如何以最简单的方式将谷歌电子表格的内容作为CSV数据获取


How can I get the contents of a Google Spreadsheet as CSV data in the simplest way imaginable?

我开发了一个名为"CSV to SortTable"的WordPress插件,该插件导入CSV文件数据,将其解析为索引数组,并使用Stuart Langridge的SortTable.js将其输出为表。

该插件运行良好,但我想为用户添加一个从谷歌电子表格导入数据的选项。最重要的是,我希望尽可能多地重用现有的代码,以避免任何冗余。

我花了几个小时筛选谷歌的文档和无数论坛,我想我已经接近了。。。但我不断收到一条"暂时移动"的消息,根据我的研究,这表明我使用的URL被重定向到了授权页面。

到目前为止,我得到的是:

PHP代码:

/* Source = Google Spreadsheet */
if( $atts[gkey] <> '' ) {
    $atts[csv] = 'https://spreadsheets.google.com/pub?key=' . $atts[gkey] . '&output=csv&ndplr=1';
}
/* Source = CSV file or Google Spreadsheet */
if( $atts[csv] <> '' ) {
    $session = curl_init();
    curl_setopt( $session, CURLOPT_HEADER, 0 );
    curl_setopt( $session, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $session, CURLOPT_URL, $atts[csv] );
    $csv_data = curl_exec( $session ) or die( 'CURL ERROR: '.curl_error( $session ) );
    curl_close( $session );
    /* Call function to parse .CSV data string into an indexed array. */
    $csv_data_array = $this->parse_csv_data( $csv_data );
    /* Call function to render the table. */
    print_r( $this->table_data );
}

解释:$atts[gkey]的值是一个用户定义的短代码参数。如果它被设置为谷歌电子表格的键,我希望插件将$atts[csv]定义为一个URL,将谷歌电子表格中的内容输出为csv文件。(通常,用户会将$atts[csv]定义为.csv文件的URL。)

测试网站URL:http://sandbox.mynewsitepreview.com/test/wp-sorttable/

公共谷歌电子表格URL:https://docs.google.com/spreadsheet/ccc?key=0Aj-ZlsTpsY_wdEhIdTdhYzlmTmdEMXhjVEJaWERTFE

CSV文件URL:http://mynewsitepreview.com/plugins/sample.csv

在这个测试网站上,我首先使用将"csv"参数设置为csv文件URL的短代码,然后再次使用短代码,但将"gkey"参数设置成谷歌电子表格的KEY。这两个输出应该匹配,但显然不匹配。

信用:我很乐意为提供最优雅解决方案的人提供贡献信用。

奖励积分如果您能找到一种简单的方法来访问受密码保护的谷歌电子表格,使用短代码参数:$atts[guser]和$atts[pw]。

如果您遇到"Moved Temporary"错误,您可能应该告诉CURL遵循重定向(301):

curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );

您将看到您获得的数据是身份验证页面还是CSV。谷歌电子表格有一个文档齐全的API,你可能应该研究一下如果您希望curl遵循HTTP重定向,则可以使用CURLOPT_FOLLLOWLOCATION选项。