APIとPHPのまとめ
最近はYahooやAmazon、楽天といった各種ウェブサービス(API)を絡めた開発を多くやっている(といっても、仕事が暇なので自分用サイトとかアフィリエイト用サイトを数多く作っているのだが・・・)。またAPIを提供する会社もたくさん増えてきたので、これから本業でもそういう仕事が増えていくと思っている。実際、最近新規で受けたり相談されている仕事もウェブサービス絡みだ。そこでウェブサービス利用の「傾向と対策」みたいな、受験勉強的メモを残しておくことにする。
(0) APIを利用するために
各種APIを利用するためにはいろいろな手順を踏まないといけないことが多い。例えば、Yahooの開発者向けAPIを利用するためには「Yahoo JAPAN IDを取得」「アプリケーションIDを取得」などの手順を踏む必要があるし、さらに一日あたりのアクセス回数上限なども気にする必要がある。もちろん利用規約も守らなくてはならない。実際にプログラムを組む前に、API毎に諸々調べておく必要がありそうだ。
(1) APIで必要な知識
APIを使用するに当たって必要な知識がいくつかある。知識といっても難しいことではなく、プログラムのスキルと言ってもいいだろう。必要なスキルは以下の3つくらいに分けられる。
・データを取得する
・取得したXMLをPHPで解釈する
・一日のアクセス上限回数を越えないよう制御する
(1)-1.データを取得する
データの取得は、最近ではRESTが一般的だ。xmlrpcやsoapを使うものもあるが、簡単と言う点からか、RESTが広く普及してきたように思われる。実際のアクセスにはPEARが使えるならHTTP_Requestや、その関連のものを使うのがいいだろう(関連リンク)。ちなみに一番お手軽なのは、file_get_contentsだ。引数にURIを与えればXMLを取得できる。ただし利用できるように設定されていることが必要だ。file_get_contents(‘http://www.yahoo.co.jp’)等として、データを取得できるかどうかチェックしてみたほうがいい。またデータの取りこぼしが出る場合があるので、要注意だ。一番確実なのはfsockopenを使って、直接HTTPでお話しすることだ。そういうクラスを一つ書いておくのがいいだろう(今後、要望次第で時期を見て公開する予定)。もちろんHTTPの最低限の知識は必要になる。
(1)-2.取得したXMLをPHPで解釈する
XMLは構造化されているとはいえ、ただのテキストだ。PHPで扱いやすいようにするには、配列や構造体に格納してやるのがわかりやすい。そのためのライブラリや関数は以前に紹介した。
・XMLを配列に読み込む
・楽天APIを少し・・・(XMLを配列に)
・XMLを配列に・・・これが最適解かも
上記の記事を参考にしていただきたい。
(1)-3.一日のアクセス上限回数を越えないよう制御する
ウェブはいつ誰がアクセスしてくるかわからない。もちろん、いつ誰がアクセスしても、うまく動いているように見せたい。「なぜかあのサイトは夕方以降はエラーが出る」なんてことにならないようにしなくてはいけない。例えば、単純にデータを毎回取得するとし、ウェブサービスの一日のアクセス上限回数が5000回と仮定して、一日6000回アクセスがあると、最後の1000回は、上限回数を超えているので必ずエラーになるのだ。これは避けなければいけない。
上限回数が決まっているのであれば、それを超えないようにすれば良い。一番簡単なのは「一度取得したデータを使いまわす」ことだ。いわゆるキャッシュだ。キャッシュの実現方法はさまざまだが二つ紹介すると・・・。
[a] cronで一定時間ごとにデータを取得しておき、ウェブからのアクセスの際はそのデータを参照する。
[b] PearのCacheを使い、前回アクセス時刻から一定時間以上経過していない場合は前回取得したデータを使いまわす。
前者の場合は、取得したデータをデータベースなどに格納しておけば、参照は容易だろう。後者の場合はPEARのCache_Liteがおすすめかな(以前の記事「キャッシュして軽いページを(Cache_Lite)」参照)。
これだけのことを知っていれば、メジャーなウェブサービスAPIの利用は難しくない。あとは(1)-2でPHPで扱いやすいように整形したデータを、いかに使うか、ということに尽きる。
ウェブサービスやAPIの利用に関しては、今後発展していくと思うので、もし不明な点があれば気軽にコメントで相談してもらっていいです(「スクリプトを書いてくれ」みたいなのはお金もらいますが、一緒に相談できるような人がいれば、勉強会を主催してもいいくらい・・・)。