0

我正在尝试从 google docs 电子表格中获取数据,我认为这应该可以工作(在此处的另一个类似问题中也看到了类似的代码),但我得到的回复是:

Moved Temporarily The document has moved here.链接为here

https://www.google.com/a/4playtheband.co.uk/ServiceLogin?service=wise&continue=https://docs.google.com/a/4playtheband.co.uk/spreadsheet/pub?hl%3Den_US%26hl%3Den_US%26key%3D0AuJb1YSvmVn5dGdvUzU2QUJHUGdaTEZNbVI4dVJ6eHc%26single%3Dtrue%26gid%3D0%26output%3Dcsv%26ndplr%3D1&followup=https://docs.google.com/a/4playtheband.co.uk/spreadsheet/pub?hl%3Den_US%26hl%3Den_US%26key%3D0AuJb1YSvmVn5dGdvUzU2QUJHUGdaTEZNbVI4dVJ6eHc%26single%3Dtrue%26gid%3D0%26output%3Dcsv%26ndplr%3D1&hl=en_US&passive=true&go=true

我不知道问题是否与在 Google Apps 中使用的相关文档有关,但我已将电子表格设置为公开,并复制了它在访问时提供的链接并将其Share导出为 csv。

这是代码:

<?php

$url='https://docs.google.com/a/4playtheband.co.uk/spreadsheet/pub?hl=en_US&hl=en_US&key=0AuJb1YSvmVn5dGdvUzU2QUJHUGdaTEZNbVI4dVJ6eHc&single=true&gid=0&output=csv';

if (($handle = fopen($url, "r")) !== FALSE)
{
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
        $totalrows = count($data);
        for ($row=0; $row<=$totalrows; $row++)
        {
            echo $data[$row];
        }
    }
    fclose($handle);
}
?>

如果这可能是一个问题,我实际上是在尝试将获取的数据放在一个面框内,它似乎正在工作,除了实际的电子表格数据没有出现,因为我之前提到的错误消息实际上出现在面框内。

谢谢。

更新 当电子表格是在我的个人谷歌帐户中创建的,而不是我用于谷歌应用程序的帐户中时,代码似乎工作得很好。

4

3 回答 3

1

您将获得 HTTP 302 状态代码,这意味着您应该点击指向新 URL 的链接。

于 2011-08-15T08:40:12.893 回答
1

我认为这是因为 URL 通过发出 302 重定向而 fopen 无法遵循 HTTP 重定向。我认为使用 curl 绑定可以解决这个问题。

还可以考虑将 Zend GData 库用作 Google Docs 的高级 API。 http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html

于 2011-08-15T08:43:03.793 回答
0

我设法通过首先在我自己的谷歌帐户中使用电子表格而不是谷歌应用程序来解决这个问题,然后使用以下代码:

<div id="faqSection">
<!-- The FAQs are inserted here -->
<p>

<?php
// link to Google Docs spreadsheet
$url='google docs spreadsheet url';

// open file for reading
if (($handle = fopen($url, "r")) !== FALSE)
{
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
        $totalrows = count($data);
        for ($row=0; $row<=$totalrows; $row++)
        {
            // only print out even rows, i.e. the questions
            // the second if is to avoid blank divs from being printed out
            // which was a bug I was experiencing
            if (($row % 2 == 0) && (strlen($data[$row])>0))
            {
                $answer = $row + 1;
                echo '<dt><span class="icon"></span>'.$data[$row].'</dt><dd>'.$data[$answer].'</dd>';
            }
        }
    }
    fclose($handle);
}
?>
</p>
</div>
于 2011-08-22T22:22:35.707 回答