top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_1149

simplexml で bingAPI:bingAPI、なかなかいいね。いろいろと使えそう。今まで、MagpieRSSよ、ありがとう ・・・ 【PHPでマッシュアップ】

 2009-11-07
 きっかけは、
 MagpieRSS: Failed to fetch
 これだ。
 今運営しているサイトで、提供していた
 ・Googleニュースからのマッシュアップ
  ・MagpieRSS利用してたんだけど、エラー
   (・ニュースの取得 MagpieRSS:やっぱりPHPだね?ライブラリやツールが豊富で、情報も多いし ・・・ 【やっぱりPHPだね
   突然・・・

 ググると原因は、プロバイダの制限っぽいんだけど。
 (かなり古い記事もありますが・・・)
  ・Warning: MagpieRSS: Failed to fetch
  ・数日前からPHPエラーがでます


 そろそろこの古い(?)方法やめて、PHPsimpleXML使いなよ、って
 言われている気がして・・・


 それにこのマッシュアップ
 APIkey使った正規なやり方じゃないしな。


 さらに、最近、「bing」が妙に気になるし。
 よし、変えよ。


  追記に ▼


 ※ところで、こちらは・・・
◇今日(2回目の)のGoogle(2009/11/07)
今日のGoogle(2009/11/07)
※おぉ、1日で2度目だ。

FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎ simplexml で bingAPI :PHPでマッシュアップ
************************************************


 ・bingAPIについては、
  前に、一度軽く経験した。
  ・bing API:頭から、bing が離れない。bingでまったく無視する状況を改善するために、こちらから近付いてやるぞ ・・・ 【検索API】
  でもその時は、仕組みをなぞっただけだった。
  今回は実装だ。


 


 ■APIは使用URLごとに必要だから、

Bing API 2.0
Bing API 2.0 こちらで、取得




 利用方法は、前に書いた上記の記事にあるが、
●SourceType
・Web
  - Searches for web content
・Image
  - Searches for images on the web
・News
  - Searches news stories
・InstantAnswer
  - Searches Encarta online
・Spell
  - Searches Encarta dictionary
   for spelling suggestions
・Phonebook
  - Searches phonebook entries
・RelatedSearch
  - Returns the query strings
   most similar to yours
・Ad
  - Returns advertisements
   to incorporate with results
 これらのソースを指定して、
http://api.search.live.net/xml.aspx?Appid=(APIKey)&query=(検索キーワード)&sources=web
 とすればよいのだが・・・
 通常、php の simpleXMLで、
 ・データ取得>XMLパースを行う際、
$xml = simplexml_load_file($url);
print_r($xml);
 で値をハンドリングできる。

 しかし、bingAPIではうなく行かなかった。


 ■ネームスペース(名前空間)
  bingAPIは、この「ネームスペース(名前空間)」を利用している
  ・・・らしい。(というのは、そんなには詳しくないのだ)
  しかし、ある程度動きがわかればいい。


  bingAPIの上記のurlで、取得された値は、
  (ブラウザで取得すればわかるが)
<?pageview_candidate ?>
?<SearchResponse Version="2.2">
?<Query>
<SearchTerms>創る</SearchTerms>
</Query>
?<web:Web>
<web:Total>954000</web:Total>
<web:Offset>0</web:Offset>
?<web:Results>
?<web:WebResult>
<web:Title>財団法人あしたの日本を創る協会</web:Title>
?<web:Description>
■ 広 告 ■ バナー広告の掲載について(2,000円/月) ※現在空き枠はございません。 HOT情報 ● 平成21年度あしたのまち・くらしづくり活動賞決定 ● 全国フォーラム開催案内 地域づくりに関心のある方、参加してみませんか!
</web:Description>
<web:Url>http://www.ashita.or.jp/</web:Url>
?<web:CacheUrl>
http://cc.bingj.com/cache.aspx?q=%e5%89%b5%e3%82%8b&d=4737473519224436&w=139a115,f5f04fca
</web:CacheUrl>
<web:DisplayUrl>www.ashita.or.jp</web:DisplayUrl>
<web:DateTime>2009-11-05T05:51:20Z</web:DateTime>
</web:WebResult>
・・・・・
 のようになっている。
  つまり、コロンで表現されたタグで構成されているのだ。

 


  今回は、&sources=web で検索したものなので、
  このようになっている。
  これを単純に
$xml = simplexml_load_file($url);
print_r($xml);
 としても値はハンドリングできない。
  この場合、
$xml = simplexml_load_file($url);
$ns = $xml->getDocNamespaces(true);
$web = $xml->children($ns['web']);
 として名前空間から値を取り出して
foreach ($web->Web->Results->WebResult as $dataitem) {
echo $dataitem->{'Title'};
}
 などのように利用できるのだ。
  ・・・などと、偉そうに。
  私も今回はっきりと(やっと)理解したのだ。

 さて、ひとつ面白かったのは、このソース(&sources=web)のところだが
 今回利用したのは &sources=news で、この場合、帰ってくるデータの
 タブ形式も変わってくる。
 ハンドリングは、
$xml = simplexml_load_file($url);
$ns = $xml->getDocNamespaces(true);
$news = $xml->children($ns['news']);
foreach ($news->News->Results->NewsResult as $dataitem) {
echo $dataitem->{'Title'};
}
 ・・・となる。
 また、データの最初には、RelatedSearches というのがあって、
foreach ($news->News->RelatedSearches->NewsRelatedSearch as $dataitem) {
echo $dataitem->{'Title'};
}
 とやれば、最近検索されたキーワードが得られる。
 面白い。

 一応今回の作業は終えたのだけれど
 ひとつ、留意事項。


 


 ■検索するキーワードは、エンコードしてから渡すのは
  当たり前だが、
  ・今回のサイトが euc-jp のサイトだったので
   単純に渡しては文字化けする。
   ・まず一度 utf8 にして
    ・エンコード
     ・値を投げ
   ・帰ってきた値を
    ・表示する際に euc-jp に戻した。
$q_str="創る";
$q_str = mb_convert_encoding($q_str, "utf8", "auto");
$url = "http://api.search.live.net/xml.aspx?Appid=(APIKey)&query=".rawurlencode($q_str)."&sources=news";
$xml = simplexml_load_file($url);
$ns = $xml->getDocNamespaces(true);
$news = $xml->children($ns['news']);
foreach ($news->News->Results->NewsResult as $dataitem) {
echo htmlspecialchars(mb_convert_encoding($dataitem->{'Title'}, "EUC-JP", "auto"));
}
 だ。注意、注意。

 しかし、こんなに簡単に情報利用させていただいて
 いいのものだろうか。
 Powered by bing は忘れずに・・・

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/1149-c6518304
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。