第6回 APIを組み合わせてマッシュアップサイトを作ってみる - マッシュアップ講座

ZAPA先生のマッシュアップ講座

Lecutures on PHP

第6回 APIを組み合わせてマッシュアップサイトを作ってみる (その1)

 このエントリーをはてなブックマークに追加

地域限定の天気予報、写真、動画を表示するマッシュアップサイトを作る

ZAPA先生第3回、第4回、第5回とさまざまなWeb サービスAPI の利用方法を解説してきました。どれもほとんど同じような手順でAPIを利用できることが理解できたと思います。実は、REST 形式でXML を返すAPIであれば、他のサイトやサービスが提供するAPIでもほとんど同じような手順で利用できるのです。

今回は、前回までの3つのAPIを組み合わせてマッシュアップサイトを作っていきます。指定した地域限定の天気予報、写真、動画を表示するマッシュアップサイトです。マッシュアップだからと言って、それほど難しく考えることはありません。今まで、それぞれのAPIを利用してHTMLタグを生成して返す関数を作ってきたのは、再利用しやすいようにするためです。

したがって、マッシュアップサイトだからと言って、今まで作ってきた関数に手を加える必要はありません。今まで通り、それぞれの関数に引数を与えてコールするだけです。

今回は、地域に「横浜」を設定して、横浜の天気予報、写真、動画を表示してみることにします。リクエストパラメータを以下のように設定して、これまで作成してきた関数を順番にコールします。

//リクエストパラメータ設定
$city = "70";           //横浜を設定
$day = "tomorrow";      //tomorrow(明日の天気)を設定
$keyword = "横浜";      //横浜を設定
$limit = 5;             //取得件数に5件を設定

//それぞれの関数を順番にコールする
echo lwws($city,$day);
echo photozou($keyword,$limit);
echo youtube($keyword,$limit);

これだけで、「横浜」の地域情報を確認できるマッシュアップサイトを作ることができます。以下のリスト1は、サンプルプログラムになります。

● リスト1 area.php
    1  <html>
    
2  <head>
    
3  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
4  <title>地域限定の天気予報、写真、動画を表示するマッシュアップサイトを作る</title>
    
5  </head>
    
6  <body>
    
7  <?php
    8
    9  
function lwws($city,$day){
   
10
   11    
//XMLデータ取得用ベースURL
   
12    $req "http://weather.livedoor.com/forecast/webservice/rest/v1";
   
13    
   14    
//XMLデータ取得用リクエストURL生成
   
15    $req .= "?city=".$city."&day=".$day;
   
16    
   17    
//XMLファイルをパースし、オブジェクトを取得
   
18    $xml simplexml_load_file($req)
   
19     or die("XMLパースエラー");
   
20    
   21    
//$xmlオブジェクトの中身を確認する場合は、以下のコメントを外す
   
22    /*
   23    echo "<pre>";
   24     var_dump ($xml);
   25    echo "</pre>";
   26    */
   27    $ret '<div class="lwws">';
   
28    $ret .= "<div>".$xml->title."</div>";
   
29    $ret .= "<div><img src=\"".$xml->image->url."\" 
alt=\""
.$xml->image->title."\"></div>";
   
30    $ret .= "<div>".$xml->description."</div>";
   
31    $ret .= "<div>最高気温".$xml->temperature->max->celsius."度</div>";
   
32    $ret .= "<div>最低気温".$xml->temperature->min->celsius."度</div>";
   
33    $ret .= "</div>";
   
34    return $ret;
   
35
   36  
}
   
37
   38  
function photozou($keyword,$limit){
   
39  
   40    
//XMLデータ取得用ベースURL
   
41    $req "http://api.photozou.jp/rest/search_public";
   
42      
   43    
//XMLデータ取得用リクエストURL生成
   
44    $req .= "?type=photo&keyword=".urlencode($keyword)."&limit=".$lim
it
;
   
45      
   46    
//XMLファイルをパースし、オブジェクトを取得
   
47    $xml simplexml_load_file($req)
   
48     or die("XMLパースエラー");
   
49      
   50    $ret 
'<div class="photozou">';
   
51    foreach ($xml->info->photo as $photo){
   
52      $ret .= "<a href=\"".$photo->url."\">";
   
53      $ret .= "<img src=\"".$photo->thumbnail_image_url."\" alt=\"".
$photo->photo_title."\">";
   
54      $ret .= "</a>\n";
   
55    }
   
56    $ret .= "</div>";
   
57    return $ret;
   
58  }
   
59
   60  
function youtube($keyword,$limit){
   
61
   62    
//dev_idを設定
   
63    $dev_id "取得したDeveloper ID";
   
64  
   65    
//XMLデータ取得用ベースURL
   
66    $req "http://www.youtube.com/api2_rest";
   
67      
   68    
//XMLデータ取得用リクエストURL生成
   
69    $req .= "?method=youtube.videos.list_by_tag";
   
70    $req .= "&dev_id=".$dev_id."&tag=".urlencode($keyword).
"&page=1&per_page=".$limit;
   
71      
   72    
//XMLファイルをパースし、オブジェクトに代入
   
73    $xml simplexml_load_file($req)
   
74     or die("XMLパースエラー");
   
75      
   76    $ret 
'<div class="youtube">';
   
77    foreach ($xml->video_list->video as $video){
   
78      $ret .= '<object width="340" height="280"><param name="movie" 
value="http://www.youtube.com/v/'
;
   
79      $ret .= $video->id;
   
80      $ret .= '"></param><param name="wmode" value="transparent">
</param>'
;
   
81      $ret .= '<embed src="http://www.youtube.com/v/';
   
82      $ret .= $video->id;
   
83      $ret .= '" type="application/x-shockwave-flash" 
wmode="transparent" width="340" height="280">'
;
   
84      $ret .= '</embed></object>'."\n";
   
85    }
   
86    $ret .= "</div>";
   
87    return $ret;
   
88  }
   
89  
   90  
echo "<h1>地域限定の天気予報、写真、動画を表示するマッシュアップサイトを作る</h1>\n";
   
91  
   92  
//リクエストパラメータ設定
   
93  $city "70";        //横浜を設定
   
94  $day "tomorrow";   //tomorrow(明日の天気)を設定
   
95  $keyword "横浜";  //横浜を設定
   
96  $limit 5;          //取得件数に5件を設定
   
97  
   98  
//それぞれの関数を順番にコールする
   
99  echo lwws($city,$day);
  
100  echo photozou($keyword,$limit);
  
101  echo youtube($keyword,$limit);
  
102  
  103  
?>
  104  </body>
  105  </html>
  • 1
  • 2

  



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)