ホリデープログラミング入門

ホリデーにプログラミングを楽しむための入門 by 船木信宏

全体表示

[ リスト ]

Yahoo!ウェブ検索APIのライブラリをつくってみる


後編。
いよいよパースする部分。正規表現の箇所はちょっと難しいかと思います。
$url = $request_url . $request_parameters;
$buf = file_get_contents($url);
$c = preg_match_all('@<Result>.*?<Title>(?P<title>.*?)</Title>.*?
<Summary>(?P<summary>.*?)</Summary>.*?
<Url>(?P<url>.*?)</Url>.*?<ClickUrl>(?P<clickurl>.*?)</ClickUrl>.*?
<ModificationDate>(?P<modificationdate>.*?)</ModificationDate>.*?
<MimeType>(?P<mimetype>.*?)</MimeType>.*?
(?:<Cache>.*?<Url>(?P<cacheurl>.*?)</Url>.*?<Size>(?P<cachesize>.*?)</Size>.*?</Cache>.*?)?
</Result>@s', $buf, $match, PREG_SET_ORDER);
print_r($match);
return $results;

読みやすくするため、改行を入れていますがpreg_match_allの正規表現部分は1行で書きます。(結果とは関係ありませんが、正規表現自体は若干冗長です)
正規表現はちょっと書いてはprint_rで$matchを確認し、を繰り返してデバッグしていきます。<Cache>は無いときもあるので注意。一応、?P<名前>で取得したい箇所に名前をつけてあります。

$results = $match;
return $results;
取得した結果を(今回はそのまま)$resultsに代入してreturn。$matchには使わないデータも多く入ってしまっているので、余分なものを消してからreturnした方がいいような気もしますがまずは動くことを重視して省略しました。

作った関数を利用する


$data = yahoo_web_api_parser('zuzara', '今日は何の日?');
foreach ($data as $val) {
echo sprintf('<p>%s<br /><a href="%s">%s</a></p>', $val['title'], $val['clickurl'], $val['url']);
}

出来上がった関数は配列を返すので、foreachでこんな風に使います。10件、検索結果が表示されるでしょうか。

リンク先にはclickurlを指定していますが、これについてはAPIのページのFAQに書いてあります。
Q: "click URL"と "display URL"の違いは何ですか?
Yahoo!デベロッパーネットワーク - よくある質問

yahoo_web_api_parser関数は、yahoo_web_api_parser.phpというファイルに保存しておきます。

require_once 'yahoo_web_api_parser.php';
$data = yahoo_web_api_parser(云々);
とrequire_onceで呼び出すのが使い勝手がいいと思います。
appidは常に同じなので、「定数」として定義しておくのもいいかもしれません。
PHP: 定数 - Manual

require_once 'yahoo_web_api_parser.php';
define('YAHOO_APPLICATION_ID', 'zuzara');
$data = yahoo_web_api_parser(YAHOO_APPLICATION_ID, 'タッチアンドゴー', 'any', 10, 2);
...いろいろな処理
$data2 = yahoo_web_api_parser(YAHOO_APPLICATION_ID, '別の検索語');

プログラムのファイルはこちらでも見えるようにしておきました。基本的にはご自由にお使いください。
http://www.zuzara.com/pub/yahoo_web_api_parser.phps

次回


今回は短いプログラムでライブラリ的な機能を実装しました。実際に使うにはまだもうちょっと機能が必要です。具体的には、エラー処理とCacheの仕組み、<ResultSet>にあるtotalResultsAvailableも取得したいところです。

次回はその辺りを実装していこうかと思います。

この記事に

閉じる コメント(1)

顔アイコン

yahoo検索APIを探していました。早速使わせていただきます! 削除

2008/9/8(月) 午後 5:04 [ aaa ] 返信する

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事