Fetching Google Docs Spreadsheet Data using PHP

不羁岁月 提交于 2019-12-08 10:40:20

问题


I am trying to fetch the data from a google docs spreadsheet and I think this should work (also seen similar code in another similar question on here) but the response I get is:

Moved Temporarily The document has moved here. with the link to here being:

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

I don't know if the problem is to do with the docs in question being used inside Google Apps but I have set the spreadsheet to be public and I copied the link it provided when I went to Share and exported it as a csv.

Here is the code:

<?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);
}
?>

If it might be an issue I am actually trying to place the fetched data inside a facebox and it seems to be working except for the actual spreadsheet data not appearing since the error message I mentioned earlier actually appears inside the facebox.

Thanks.

UPDATE The code seems to work perfectly fine when the spreadsheet is created within my personal google account and not the account that I use for Google Apps.


回答1:


You are getting a HTTP 302 status code, which means you should follow the link to the new URL.




回答2:


I think its because the URL redirects by issuing a 302 and fopen can't follow HTTP redirects. I would think using curl bindings would resolve this issue.

Also consider using the Zend GData library as a high level API for Google Docs. http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html




回答3:


I managed to fix this by firstly using a spreadsheet inside my own google account and not google apps and by then using the following code:

<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>


来源:https://stackoverflow.com/questions/7063018/fetching-google-docs-spreadsheet-data-using-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!