使用PHP获取Google Docs电子表格数据

时间:2011-08-15 08:36:51

标签: php google-docs google-docs-api

我正在尝试从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);
}
?>

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

感谢。

更新 在我的个人Google帐户中创建电子表格时,代码似乎完全正常,而不是我用于Google Apps的帐户。

3 个答案:

答案 0 :(得分:1)

您正在获取HTTP 302状态代码,这意味着您应该关注指向新网址的链接。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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>