公開APIに興味を持っている人はどれくらいいるのか?にも書いたとおり、公開APIに興味を持っている人は少なからずいると思います。では、なぜ実際に公開APIを利用したサイトを作ってみないのかというと、公開APIを利用したサイトが完成するまでの流れにも書いたように、実際にサイトを作るまでにはいろいろな壁があるからです。
というわけで、今回は少しでも公開APIに対する抵抗感を取り除いてもらうために、「10分で理解する初めてのAPI」ページを作ってみました。「本当に10分で理解できるのか?」と疑問を持たれてしまいそうですが、「公開APIを利用するのは、怖い、難しい、大変なことではない」ということを理解していただけたら幸いです。サンプルソースとしてはPHP5を使わせてもらいましたが、基本的にはどのプログラミング(スクリプト)言語を用いても大丈夫なはずです。公開APIを利用したサイト作りへの第一歩としてこのページをご覧になってください。
今回、公開APIとして取り上げたのは、livedoorの「お天気Webサービス」です。なぜこのAPIを選んだのかというと、
という理由からです。
他のどのAPIでもそうですが、「利用しやすい、イメージしやすい」APIであることはとても大切なことです。
サンプルサイトを作る前に、まずはお天気Webサービス仕様 - Weather Hacks - livedoor 天気情報を簡単にでも良いので読んでみてください。「リクエストパラメータ」「レスポンスフィールド」の解説と実際の「XMLデータサンプル」が載っています。
このAPIの仕様を確認したところで、試しにPHP5を利用してサンプルサイトを作ってみました。本来、天気を表示する地域はデータベースからユーザー情報の住所を設定したり、POSTやGETで入力された値を利用しますが、今回はサンプルということで固定値に設定しています。では、まずはできあがったサンプルサイトを見てください。「お天気Webサービス(REST)」を利用して、神奈川県横浜市の明日の天気と最高気温、最低気温を表示しています。
サンプルサイトを見た後は、次にサンプルソースを見てみましょう。
素人のPHPソースコードを見せてしまうのは、これ以上ないくらい恥ずかしいことですが、恥を忍んで公開してみることにします。
上記ソースコード中にコメント文として解説も載せておきましたが、順を追ってもう一度解説したいと思います。
"; $site['copyright'] = "ZAPAnet総合情報局"; //XMLデータ取得用ベースURL $req = "https://weather.livedoor.com/forecast/webservice/rest/v1"; //リクエストパラメータ設定(今回はサンプルとして固定値を設定しています) //実際は、データベースからユーザー情報の住所を設定したり、POSTやGETで入力された値を設定してください $city = "70"; //サンプルとして横浜を設定しています $day = "tomorrow"; //サンプルとしてtomorrowを設定しています //XMLデータ取得用リクエストURL生成 $req .= "?city=".$city."&day=".$day; //XMLファイルをパースし、オブジェクトに代入(PHP5の場合、simplexml_load_fileを使うと簡単です) $xml = simplexml_load_file($req) or die("XMLパースエラー"); //パースエラーが起きていなければ、$xmlオブジェクトにデータが全て格納されています //$xmlオブジェクトがどのように格納されているかを確認してみる場合は、以下のコメントアウトを外して実行してみてください /* echo "
"; print_r($xml); echo ""; */ //RESTによる公開APIを利用する場合、リクエストパラメータを生成し、取得したXMLをパースするのが基本です //プログラミング言語によって処理方法は若干違いますが、ほぼどんな言語でも処理できるのがRESTの強みでもあります //あとは自分の好きなように加工(他のAPIと組み合わせたマッシュアップやAjaxなどの動的な表示方法)して表示すれば完成です //HTML出力(PHPでのXML処理などは以上で終了させて、ここからHTMLタグを一気に出力させます) //簡易的にデザインとロジックを分離させています echo <<
{$xml->title} | |
---|---|
{$xml->description} | |
最高気温 | {$xml->temperature->max->celsius} |
最低気温 | {$xml->temperature->min->celsius} |
まず最初に、「サイト設定」の部分ですが、これはプログラムのロジックとデザインを分離させるために設定してあるだけですので、直接HTMLコードに書いても何の問題もありません。
//サイト設定(タイトル、URL、CSS、文字コード、サイト説明文などを設定します)
$site['title'] = "";
$site['url'] = "";
$site['css'] = "";
$site['mojicode'] = "";
$site['info'] = "";
$site['copyright'] = "";
続いて、XMLデータ取得用ベースURLの設定とリクエストパラメータの設定になります。
XMLデータ取得用ベースURLは、お天気Webサービス仕様ページに書かれている通りに設定します。REST APIではこのベースURLにパラメータを付加して通信を行います。パラメータもお天気Webサービス仕様ページに書かれている通り「city」「day」を設定します。パラメータが少ないので簡単でわかりやすいですね。
//XMLデータ取得用ベースURL
$req = "https://weather.livedoor.com/forecast/webservice/rest/v1";
//リクエストパラメータ設定(今回はサンプルとして固定値を設定しています)
$city = "70";
$day = "tomorrow";
//XMLデータ取得用リクエストURL生成
$req .= "?city=".$city."&day=".$day;
今回はサンプルとして、「横浜の明日の天気」を固定値で設定していますが、実際に利用する際はデータベースからユーザー情報の住所を設定したり、POSTやGETで入力された値を設定してください。
リクエスト用のURLが生成できたら、次は実際に通信を行ってXMLの解析を行います。PHP5であれば下記のようにPHP標準関数「simplexml_load_file」を使えば一行で終了します。
$xml = simplexml_load_file($req);
これだけでXMLの解析が終了し、$xmlオブジェクトにデータが格納されます。
$xmlオブジェクトにどのようにデータが格納されたかは、print_r($xml);部分のコメント文を外して、実際にオブジェクトの内容を表示して確認してみてください。ライブドアからREST APIで返ってきたXMLがどのように変換されたかがよくわかります。例えば、取得したXMLデータのタグ名"title"には、$xml->titleでアクセスできます。同様にタグ名"image"の"url"には、$xml->image->urlでアクセスすることが出来ます。
後は、自分の好きなようにHTMLを表示させれば完成です。
ここではサンプルソースとして、上記(テキストエリア内参照)のようにヒアドキュメントで一気にHTMLを表示していますが、この辺りは好みに合わせて自由に記述してください。
つまり、REST APIを使った公開APIは
の3つの手順だけで利用できることがわかったと思います。
「何か難しそう…」というイメージから「自分にもできそうかも…!」と思っていただけたら幸いです。
このページでは、簡単にAPI利用方法について解説してきましたが、あとは少しずつ自分のアイディアを組み込んでいくことで自分だけのオリジナルサイトができあがります。例えば、上記サンプルコードでは横浜の明日の天気しか表示できませんでしたが、他の地域にも対応させてみると以下のようなサイトが作成できます。
「いつ」「どこの地域」の二つのパラメータをGETで渡して、PHP内で処理をして天気予報を表示させています。
次に、上記サイトをAjaxに対応させ、画面遷移なしに表示できるようにしてみると以下のようなサイトが作成できます。
Ajaxを利用すると、画面遷移のないWebアプリを構築できるようになります(ただし、PHP以外にJavascriptの知識が必要になり、また動作はクライアントサイドに依存してしまうため、バグ取りなどもなかなか大変になってくる欠点もあります)。Ajaxを利用したり、他のAPIとのマッシュアップで今までにないサイト作りに是非チャレンジしてみてください。
今回は、「10分で理解する初めてのAPI」としてお天気Webサービスを扱いました。上記の通り、このAPIは参入障壁の少ないわかりやすいAPIです。まずはわかりやすいAPIに触れてみることで「公開APIに対する抵抗感」が取り除かれるのではないかと思い、このページを作りました。PHP5という限定された言語ではありましたが、「公開APIを利用したサイト作り」への第一歩の参考にしてもらえれば幸いです。
もし、他の言語でお天気Webサービスを利用したサンプルサイトとサンプルソースを公開された(もしくはこれから公開される)方がいましたら、下記ブログ記事(もしくはメールフォーム)までご連絡ください。こちらのページからリンクさせていただきたいと思います。また、上記サンプルソースコードでおかしな点や改善点がある場合にもご連絡ください。感想などもお待ちしています。
それでは、この辺で「10分で理解する初めてのAPI」は終了とします。「読んでるだけで10分越えたよ!」という方がいましたらごめんなさい。時間がかかった分だけ、公開APIに興味があるのだと思います。10分越えた時点できっと"理解した"のだと思います。