スーダンのカドグリ近くの音を再生するサイトを作った。

UT Startup Gym 初心者勉強会の宿題が、「file_get_contents を使ったウェブページを作ってくる。」ということで、作った。
参考にするのはこちら。
Twitter API と file_get_contents でかんたん Twitter クライアント - utgym’s diary


題材はtwitterに限らずなんでもOKということだったので、AudioboomAPIを使うことにした。
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


わーい宿題できた―。