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

問題がGoogleApps内で使用されている問題のドキュメントにあるのかどうかはわかりませんが、スプレッドシートを公開に設定し、移動時に提供されたリンクをコピーし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);
}
?>

問題が発生する可能性がある場合は、フェッチしたデータをフェイスボックス内に配置しようとしていますが、前述のエラーメッセージが実際にフェイスボックス内に表示されるため、実際のスプレッドシートデータが表示されないことを除いて機能しているようです。

ありがとう。

更新 スプレッドシートが、Google Appsで使用しているアカウントではなく、個人のGoogleアカウント内で作成されている場合、コードは完全に正常に機能しているようです。

4

3 に答える 3

1

HTTP 302ステータスコードを取得しています。これは、新しいURLへのリンクをたどる必要があることを意味します。

于 2011-08-15T08:40:12.893 に答える
1

これは、URLが302を発行してリダイレクトし、fopenがHTTPリダイレクトを追跡できないためだと思います。カールバインディングを使用すると、この問題が解決すると思います。

また、ZendGDataライブラリをGoogleドキュメントの高レベルAPIとして使用することを検討してください。 http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html

于 2011-08-15T08:43:03.793 に答える
0

最初にGoogleアプリではなく、自分のGoogleアカウント内のスプレッドシートを使用し、次に次のコードを使用して、これを修正することができました。

<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 に答える