早速「Zend_Gdata」の「Google Spreadsheets」を使ってみたいと思います。
事前準備としてgoogleアカウントを作成し、googleドキュメントに「商品データベース」という名前でSpreadsheetsを作成しておきます。
no | name | price | show_detail | show_image1 |
1 | 商品1 | 500 | 商品1の詳細説明 | ※画像(画像の管理はPicasaで行います) |
2 | 商品2 | 600 | 商品2の詳細説明 | ※画像(画像の管理はPicasaで行います) |
先ほど作成した「商品データベース」を一覧表示します。
まずはZend Frameworkのクラスの読込み
require_once 'Zend/Loader/Autoloader.php'; // Zend Frameworkのクラス自動読込 $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->setFallbackAutoloader(true);
つぎにClientAuth 認証
// ClientAuth 認証用のパラメータ $user = "googleアカウント"; $pass = "パスワード"; $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; // 認証済みHTTPクライアント作成 $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
スプレッドシートの読み込み
// Spreadsheetサービスのインスタンス作成 $serviceSpread = new Zend_Gdata_Spreadsheets($client); // フィードの取得 $feed = $serviceSpread->getSpreadsheetFeed(); // スプレッドシートのキー取得 $i = 0; foreach($feed->entries as $entry) { if(strcmp($entry->title->text, "商品データベース")==0) { $key = split('/', $feed->entries[$i]->id->text); $spreadsheetKey = $key[5]; } $i++; }
スプレッドシートのキーは各スプレッドシートのURLで
http://spreadsheets.google.com/feeds/spreadsheets/各スプレッドシートのキー
となっています。
ワークシートの取得
// クエリの作成 $query = new Zend_Gdata_Spreadsheets_DocumentQuery(); $query->setSpreadsheetKey($spreadsheetKey); // ワークシートフィードの取得 $feed = $serviceSpread->getWorksheetFeed($query); // ワークシートの検索 $i = 0; foreach($feed->entries as $entry) { $worksheetId = split('/', $feed->entries[$i]->id->text); if(strcmp($entry->title->text, "商品一覧")==0){ $worksheetKey = $worksheetId[8]; } $i++; }
http://spreadsheets.google.com/feeds/worksheets/スプレッドシートのキー/private/full/ワークシートのキー
ヘッダ行の取得
// クエリの作成 $query = new Zend_Gdata_Spreadsheets_ListQuery(); $query->setSpreadsheetKey($spreadsheetKey); $query->setWorksheetId($worksheetKey); // リストフィードの取得 $listFeed = $serviceSpread->getListFeed($query); // ヘッダの取得 $feedHeader = array(); $rowData = $listFeed->entries[0]->getCustom(); foreach($rowData as $customEntry) { $feedHeader[] = $customEntry->getColumnName(); }
データリストの取得
// データの取得 $feedData = array(); $i = 0; foreach($listFeed->entries as $entry) { $rowData = $listFeed->entries[$i]->getCustom(); foreach($rowData as $customEntry) { $header = $customEntry->getColumnName(); $feedData[$i][$header] = $customEntry->getText(); } $i++; }
取得したデータの表示
echo "<table><tr>"; foreach($feedHeader as $header) { if(!(strpos($header, "show") !== false)){ echo "<th>".$header."</th>"; } } echo "<th>詳細</th>"; echo "</tr>"; foreach($feedData as $key=>$datas) { echo "<tr>"; foreach($datas as $header=>$data) { if(strpos($header, "price") !== false){ echo "<td>".$data."円</td>"; }else if(!(strpos($header, "show") !== false)){ echo "<td>".$data."</td>"; } } echo "<td>" . "<a href='show.php?id=" . $key . "'>詳細</a>" . "</td>"; echo "</tr>"; } echo "</table>";
詳細ページに表示したい内容はヘッダ行に「show_」と付けておきます。あとは、getで受け取った商品の詳細を表示するページを作成すればOK。内容は上記とほぼ同じなので割愛します。
投稿日: