Photosynthには、下記のURLにおいてSOAP APIが用意されています。
PhotosynthService Web Service
今回は、この中から『GetCollectionData』というAPIを使ってみることにします。これは、対象のPhotosynthのGUID(PhotosynthのコンテンツのURLの最後についているID。先日紹介したNASAのPhotosynthなら、”a8d71756-1671-493e-a07d-4ebf0eda0faf”)を渡すことにより、そのPhotosynthのデータついて記述したXMLを返すAPIです。
実を言うと、PHPでSOAP APIを利用する方法以前にSOAPというものがどういうものかよく分かっていなかったのですが、簡単に説明するとPOST渡しで指定のフォーマット通りにXMLを渡すとXML形式で結果が返ってくるのがSOAPだそうです。でも、どうやらWSDLモードというものがあると、それを使うことによりSOAP APIを簡単に利用できるのだとか。普通にXMLで渡す方法でいいような気もするのですが、PHPでSOAPを使う方法を探してみるとこのWSDLモードを使う方法ばかりで、これが正直よくわかりませんでした(PhotosynthのWSDLはこちら)。正直今でもよく分かってない部分はあるのですが、とりあえず下記のサイトなどを参考に作ってみました。
参考:PHP: SoapClient – Manual
参考:PHP5のSOAP関数のサンプル
そうして作った関数が下記。
function getCollectionDataOfPhotosynth($guid) { if(!strlen($guid)) return ""; // 正規表現でPhotosynthのGUIDかチェック if( !preg_match("/^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$/", $guid) ){ return ""; } $client = new SoapClient('http://photosynth.net/photosynthws/PhotosynthService.asmx?WSDL'); $soap_body = array( 'collectionId' => $guid, 'incrementEmbedCount' => 'true' ); $param = array('collectionId' => $guid, 'incrementEmbedCount' => 'false'); $result = $client->GetCollectionData($param); return $result; }
これは、PhotosynthのGUIDの文字列を引数にいれて呼ぶと、SOAP APIのGetCollectionDataを呼んだ結果を返す関数となっています。
試しに下記のような感じで、var_dumpで出力するだけのページを作ってみました。
$guid = isset($_GET['guid']) ? htmlspecialchars($_GET['guid']) : null; var_dump(getCollectionDataOfPhotosynth($guid));
サンプルページ:NASAのPhotosynthのGUIDでSOAP APIを呼んだ結果
ここで、JSON形式で書かれたページのURLを取得できますが、ここからPhotosynthで利用している画像を取得するのに必要なデータが得られるようです(本当はその画像を表示するページを作ろうと思ったのだけれども、単純にJSONに画像のURLが書かれてるわけではないようなので断念。そのうちそのようなページを作るかもしれません)。
他にも、最初に記したページを軽く読み流してみると、APIを使うことにより、Photosynthを独自のサーバーで追加したり削除したりできるようです。使い方はわかりませんが・・・。
余談ですが、先日、Photosynthを開発したMicrosoft Researchのシリコンバレーの開発拠点が閉鎖されたようです。
参考:米マイクロソフトが2100人削減、シリコンバレーのR&D拠点閉鎖 | ビジネス | 最新ニュース | ニューズウィーク日本版 オフィシャルサイト
参考:Microsoft Research Silicon Valley 最後の日を見て – (iwi)の日記
このニュースについて、Photosynthがどれぐらい関係しているのかどうかというのはよく分かっていないのですが、今後どうなるのか気になります。
コメント