IT-TOP.BIZはPHP/CGI/AJAXベースのWEBサイト・システム製作に助力致します。

トップ 新着 ソフトウェア サポート&サービス 更新履歴 2008/11/21
WWWフロンティア〜IT-TOP.BIZ

Yahoo API の使い方

 Yahoo Web APIは、パラメータを指定したURLを実行する事で使えます。
 PHPのサンプルは、レスポンスとしてXMLを受け取ります。

7.1.Yahoo API / PHPサンプル.4を動かす

サンプル5.ではSimpleXMLとCacheを使います。
不思議な事に「common.php」と「YahooSearchExample.php」というファイル名が含まれますが、 「YJSearchExample.phpの間違い」です。
使用する時は「YJSearchExample.php」にリネームしないといけません。
〜2006.01.20現在

7.2.「common.php」の内容

やはり「common.php」はYahoo API PHPサンプル1と全く同じものです。

7.3.「YJSearchExample.php(YahooSearchExample.php)」の内容

<?php
// Yahoo! JAPAN Search Services PHP Example Code Ver.1(2005/11/30)
//

$st_timer = microtime(true);
require './common.php';
$q = build_query();

// To cache, we save the result xml to a filename that is a
// hash of the query string.  Note the use of tempnam() and
// rename() to make sure the file is created atomically.
$cache_file = '/tmp/yws_'.md5($service[$_REQUEST['type']].$q);
/*ホスティングしているサーバーの多くは「PHPセーフモード」を有効にしているため
ファイルを作成できない場合があります。
そのため、
  $cache_file = dirname ($_SERVER['SCRIPT_FILENAME']) . '/yws_'.md5($service[$_REQUEST['type']].$q);
のように、キャッシュファイルを作成するディレクトリを変更する必要があるかもしれません。
上記の場合、カレントディレクトリのアクセス権を0x777(書き込み許可)にする必要があるでしょう。*/

if(file_exists($cache_file) && filemtime($cache_file) > (time()-7200)) {
/* キャッシュファイルが存在する場合 */
  $raw = file_get_contents($cache_file);
  /* キャッシュファイルの内容をロードする*/
} else {
/*キャッシュファイルが存在しないので、クエリーに応じたキャッシュを作成する*/
  $raw = file_get_contents($service[$_REQUEST['type']].$q);
  $tmpf = tempnam('/tmp','YWS');
  /*上記のセーフモードと同様です*/
  file_put_contents($tmpf, $raw);
  /*ファイルに書き出す*/
  rename($tmpf, $cache_file);
  /*PHPセーフモードにひっかかる可能性があります
  chmod($tmpf,0777);
  copy($tmpf,$cache_file);
  unlink($tmpf);
  のような姑息な手段が必要かもしれません。*/
}
/*以下、SimpleXMLを利用する点はサンプル4.と同じです*/
$xml = simplexml_load_string($raw);
// Load up the root element attributes
foreach($xml->attributes() as $name=>$attr) $res[$name]=$attr;

$first = $res['firstResultPosition'];
$last = $first + $res['totalResultsReturned']-1;
echo "<p>Matched ${res[totalResultsAvailable]}, showing $first to $last</p>\n";
if(!empty($res['ResultSetMapUrl'])) {
  echo "<p>Result Set Map: <a href=\"${res[ResultSetMapUrl]}\">${res[ResultSetMapUrl]}</a></p>\n";
}
for($i=0; $i<$res['totalResultsReturned']; $i++) {
  foreach($xml->Result[$i] as $key=>$value) {
    switch($key) {
      case 'Thumbnail':
        echo "<img src=\"{$value->Url}\" height=\"{$value->Height}\" width=\"{$value->Width}\" />\n";
        break;
      case 'Cache':
        echo "Cache: <a href=\"{$value->Url}\">{$value->Url}</a> [{$value->Size}]<br />\n";
        break;
      case 'PublishDate':
      case 'ModificationDate':
        echo "<b>$key:</b> ".strftime('%X %x',$value)."<br />\n";
        /*ファイルに書き出した時に、日付がシリアル値になる場合があります。
        その場合、数値なので、strftimeでは解析できずにエラーが発生します。
        strftimeの部分を、date("H:i:s Y/m/d",$value)のようにする必要があるかもしれません。*/
        break;
      default:
        if(stristr($key,'url')) echo "<a href=\"$value\">$value</a><br />\n";
        else echo "<b>$key:</b> $value<br />";
        break;
    }
  }
  echo "<hr />\n";
}
next_prev($res, $first, $last);
echo "<br /><br />Page generated in <b>".(microtime(true)-$st_timer)."</b> seconds<br />\n";
done();
?>

(※)キャッシュファイルは「PHPセーフモード」に引っかかる可能性があります。
自社サーバー/自宅サーバーのような環境でなければ、ファイルの書き出し処理には注意が必要です。

7.4.サンプル5を動かしてみよう

サンプル1〜4と同様です。ローカルのサーバーの適当なディレクトリに上記の2つのファイルをアップロードし、「YJSearchExample.php」にアクセスします。
※上述したように「YahooSearchExample.php」を「YJSearchExample.php」に名前を換える必要があります。
YahooAPI PHPサンプル5のようになります。
<前へ
目次
1.Yahoo APIでできる事 
2.Yahoo API サンプルを取得する 
3.Yahoo API PHPサンプル1 を動かしてみる 
4.Yahoo API PHPサンプル2 を動かしてみる 
5.Yahoo API PHPサンプル3 を動かしてみる 
6.Yahoo API PHPサンプル4 を動かしてみる 
7.Yahoo API PHPサンプル5 を動かしてみる
サイトマップ お問い合わせ 相互リンク 免責事項
Copyright© 2005 IT-TOP.BIZCopyright© 2005 IT-TOP.BIZ