PHPを使ってGoogleショッピングAPIを叩きたく、調べていたら、
ZendFrameworkの「ZendGdata」で比較的簡単に出来る。
が、、、いかんせんドキュメントが少ない上に、
公式が英語のみでいろいろわけわからんかったけど、なんとかできた。
その覚書。
<?php
require_once( 'Zend/Gdata.php');
require_once( 'Zend/Gdata/ClientLogin.php');
require_once( 'Zend/Gdata/Gbase.php');
//クライアントのインスタンス作成。ログインIDとパスワードを設定
$client = Zend_Gdata_ClientLogin::getHttpClient( 'ログインID(メアド)', 'パスワード', Zend_Gdata_Gbase::AUTH_SERVICE_NAME );
$service = new Zend_Gdata_Gbase($client);
//新たなエントリーを作るためのインスタンス作成
$newEntry = $service->newItemEntry();
//商品名(タイトルだけど商品名として扱われる)
$newEntry->title = $service->newTitle('商品名');
// データの登録先を定義(Googleショッピングの場合はProducts)
$newEntry->itemType = "Products";
//概要(コンテンツだけど概要として扱われるらしい
$content = "概要概要概要概要";
$newEntry->content = $service->newContent($content);
$newEntry->content->type = 'text';
//品番
$newEntry->addGbaseAttribute("id", "品番", "text");
//状態 new|used|refurbished
$newEntry->addGbaseAttribute("condition", "New", "text");
//商品ページURL
$newEntry->addGbaseAttribute("link", "URL", 'url');
//価格
$newEntry->addGbaseAttribute("price", "値段 JPY", "numberUnit");
//対象国(これを忘れるとチェックが通らない。忘れがちなので注意。
$newEntry->addGbaseAttribute("target_country", 'JP', 'text' );
//データ挿入実行(テスト実行は2番目の引数をtrueにする。
$createdEntry = $service->insertGbaseItem($newEntry, false);
?>
だいたいこんな感じ。
これ以外のフィードアイテムについては、
Googleのフィード仕様の説明をご覧になればわかるかと思います。
なお、注意点として、ZendGdataはAPIでエラーが出たとき、FatalErrorとなります。
エラートラップなどの必要性がありますので、そのへんの実装は各自行ってくださいね。
私はこれを直で使うわけでなく、XMLのフォーマットを知りたかったから。
同じ様にAPIのXMLのフォーマットを知りたいという人は、
Zend/Gdata/App.phpのpost()の中で、「$requestData['data']」をecho()すれば幸せになれます。
追記:2010/12/28
上記の方法は「ClientLogin」を利用しています。
ClientLoginの場合、ログイン失敗などするとCaptcha認証が必須となり、
ログインしようとするとHTTPエラーコード403が戻りますが、
ZendGdataでは、これをハンドリングする仕様にはなってないようです。
実際の利用時は、ZendGdataに含まれるHTTPクライアントオブジェクトを拡張するなどして、
Captcha必須のエラーハンドリングを行えるようにしたほうが良いでしょう。

