スーダンのカドグリ近くの音を再生するサイトを作った。
UT Startup Gym 初心者勉強会の宿題が、「file_get_contents を使ったウェブページを作ってくる。」ということで、作った。
参考にするのはこちら。
Twitter API と file_get_contents でかんたん Twitter クライアント - utgym’s diary
題材はtwitterに限らずなんでもOKということだったので、AudioboomのAPIを使うことにした。
GitHub - audioBoom/api: Documentation for the Audioboom.com API
リファレンスを参考に、APIをコールするURLを組み立てる。
つくったURLがこちら。
http://api.audioboo.fm/audio_clips/located.xml?find[latitude]=11.011971&find[longitude]=29.708748
"Search by distance from point"というAPIを使ってる。Audiobooに投稿される音にはロケーションデータが付いていて、このAPIはその情報を使って、指定した位置に近い音を検索する。
latitudeとlongitudeが緯度と経度を指定していて、ここはスーダンのカドグリです。
located.のうしろのxmlが、APIから受け取るフォーマットを指定している。参考記事とおなじjsonも受け取れるんだけど、decodeがうまくいかなかった。
上のURLのリンク先で、今回使うXMLデータがそのまま見れる。
このXMLを利用して作ったホームページがこちら。
http://exercise01-hsksyusk.dotcloud.com/utgym.php
ソースはこんな。ちゃんとHTML書いてません。
<?php // APIコールURLの組み立て $url='http://api.audioboo.fm/audio_clips/located.xml?find[latitude]=11.011971&find[longitude]=29.708748'; // APIからXMLデータを取得 $xml = file_get_contents($url); // XMLデータをPHPオブジェクトとして読み込む $arr = simplexml_load_string($xml); echo '<h1>Sounds around Kadugli, Sudan</h1>'; // xmlの中のaudio_clipタグの中を$audio_clipに取得。 //audio_clipタグの数だけ繰り返す。 foreach ($arr->body->audio_clips->audio_clip as $audio_clip){ // $xx->xxの形で、xml構造の中のデータを指定して取り出す。 echo $audio_clip->title . ' by ' . $audio_clip->user->username; echo '<br />'; //HTML5のaudio要素を使用。mp3はchromeでしか扱えない、ハズ。 echo '<audio controls src='.$audio_clip->urls->high_mp3.'></audio>'; echo '<br />'; echo $audio_clip->location->distance . 'm'; echo '<br />'; echo $audio_clip->recorded_at; echo '<br />'; echo '<br />'; }
ちなみに、このサイトは以下の記事を参考にして、dotcloud上で動かしてる。
DotCloud で PHP アプリを設置してみたときの色々 - 肉とビールとパンケーキ by @sotarok
わーい宿題できた―。