タグ「API」が付けられているもの


PHP Warning:file_get_contents

夕方頃にdtn.jpを見てみたところ、あちこちに仕込んだAPIのデータが
表示されてないことに気が付きました。
APIのデータが取れないので、人気検索語やニュース、
電力使用状況グラフもでないので、何やら素っ気ない感じです。
yahoo_api_down.png
 
dtnで使ってる、人気ランキングやニュース情報は、
Yahoo! JAPAN Webサービスを使って引っ張ってきているので、
Yahoo!のサービス自体が止まってるかとも思ったのですが、
公式ブログやtwitterを見ても特にそんな情報はなく。。
では、APIの使用回数制限に引っかかったかなぁとも思ったのですが、
この過疎サイトでそんなことある訳もなく。
 
という訳で、急ぎ色々と調べてみました。
 
すると、サーバのログにありました。PHP Warningが山ほど!
どうやらfile_get_contentsがエラーを吐いてるようです。


PHP Warning: file_get_contents(http://*****) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /*****.php on line *****
 
 
今大風邪ひいてしまっててあまり正確には覚えていないのですが、
確か昨夜までは問題なく動いてた記憶もあるのですが....。
で、運営会社のメンテナンス情報を見てみると、サーバー緊急メンテはやったようですが、うちのと違うサーバー番号です。。でも、番号近かったから、
ついでに何か仕様変更でもしたのですかね。

さて、php.iniを確認すると、やはりallow_url_fopenがoffになってました。


allow_url_fopen Off

 
という訳で、これをOnに戻して無事解決となりました。
yahoo_api_on.png
 
Yahoo!様のAPIがないと、なんとも素っ気ないサイトってことですね。
末永くAPIを提供してくれることを祈るばかりです。

電力使用状況API

東日本大震災により被害にあわれた皆様に心よりお見舞い申しあげるとともに、
犠牲になられた方々とご遺族の皆様に対し、深くお悔やみを申しあげます。
 
何もできない非力な自分が悲しいですが、少しでも力になれればと思い、
日々頑張っていこうと思っています。
 
さて、震災以後、計画停電や放射性物質の情報確認でネットをよく見てますが、
停電実施頃より、Yahoo! Japanトップページに東京電力の電力使用状況グラフが
表示されるようになっています。
yahoopowerusage.jpg
さすがはYahoo! Japanと思って自分も確認していたのですが、
それだけではなく、このデータを電力使用状況API として公開もしてありました!
 
という訳で、早速これを使って電力使用状況グラフを作ってみました。
作り方はいつもと同じで、リクエストURLにクエリを投げ、


http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage?appid=<あなたのアプリケーションID>

返ってくるXMLをパースして、データを抜き取ればよい感じです。
方法はこちら等と同じ方法です。
 
レスポンスデータから、電力使用量、最大供給量などが取得できると思います。
せっかく取得したデータですので、これをYahoo! Japanのように
グラフ化して表示する為、pChartを使ってみました。
このpChartは、phpにGDライブラリが組み込んであれば、かなり簡単に
折れ線グラフや、棒グラフ、円グラフの描画ができます。
 
pChartのページにサンプルコードがたくさん用意されているので、
使うグラフのサンプルコードを見て、データセットの部分の
数値配列、項目配列に、APIで取得したデータを入れれば完成です。

// Dataset definition
$DataSet = new pData;
$DataSet->AddPoint(array(10,2,3,5,3),"Serie1");
$DataSet->AddPoint(array("Jan","Feb","Mar","Apr","May"),"Serie2");
$DataSet->AddAllSeries();
$DataSet->SetAbsciseLabelSerie("Serie2");

取得したグラフ画像はpng画像にして出力できるので、
定期的にcronで画像作成し、保存するようにしてあります。
power_usage.jpg
 
一日も早い復興を願い、節電への協力をしていきましょう。

YahooショッピングAPI改造

あっという間に2010年も11日が過ぎてしまいました。
本年もどうぞ宜しくお願い致します。

さて、昨年に楽天API、Yahoo!ショッピングAPIを使って作ってみた、
アフィリエイトのページ「人気商品ランキング」ですが、
年末休み中に小修正を施しておいたので、
新たに「dtnショッピング」としてリニューアルしてみました。
dtn_shopping.png

とはいえ、変わった部分といえば、
楽天APIの売上ランキングデータだけを表示していた部分に、
新たにYahoo! APIのランキングデータ合体してみただけなのですが。。。

プログラムとしては、クエリを投げてレスポンスのXMLをパースするあたりは
全く一緒なのですが(詳細はYahoo API関連の記事を参考にどうぞ)
クエリを投げる前に、Yahoo!、楽天のカテゴリデータを配列に入れておき、
これを双方のAPIに投げて、レスポンスを合体させた点が変わってます。

まぁマッシュアップとも言えないレベルのものですが、、、
基本の練習にはちょうどいい程度ではないかと思います。


ちなみにですが。
dtnショッピングの場合は、カテゴリ数も多くないので、



$CATEGORY = array(
 0 => array('C_ID' => '1371','G_ID' => '100317','C_NAME' => 'ワイン'),
 1 => array('C_ID' => '1348','G_ID' => '111968','C_NAME' => '焼酎'),
);


みたいな感じで手動でデータをまとめましたが、
楽天、Yahoo!の両APIには、カテゴリデータ取得用のAPIがありますので、
これを使って、思いっきりカテゴリデータを取得、
数千カテゴリを持つ、巨大なマッシュアップランキングサイトを
いっきに作り上げることも可能だと思います。
もちろん、検索スパム扱いされそうなのでご注意を。


新年一発目の記事がアフィリエイトネタで申し訳ありませんが、
今年も頑張ってより良いディレクトリ運営を細々と頑張ろうと思っています。
どうぞごひいきに。

YahooショッピングAPIさらに

楽天APIとYahoo!ショッピングAPIを合体して作ってみた、
アフィリエイトページの「人気商品ランキング」に、
新たにちょこっとコンテンツを追加してみました。

今回は、Yahoo!ショッピングAPIの中でも、"商品検索"機能を使い、
「クリスマスプレゼント」、「誕生日プレゼント」等のキーワードを
クエリにくっつけて投げ、帰ってきたXMLをコンテンツにしてあります。
present_ranking.png
XMLのパースは、もうだいぶ慣れっこになってきているので、
特に問題なく制作完了です。


XMLパースについては「APIで検索連動型広告の制作」の時にも書きましたが、


// パース実行、連想配列にパース結果代入
xml_parse_into_struct($parser,$buff,$val,$index);

連想配列にパースしたデータを(↑の場合は$valと$indexですね)、
print_r() するなどしてみて、実データから配列構造をじっくり眺めてみると、
すぐに扱いに慣れてくると思います。

連想配列の構造さえわかってしまえば、

foreach ($val as $key1 => $val1){

みたいにガンガン分解していけばOKです!



なお、Yahoo!ショッピングAPIには、クエリで設定すれば、
Yahoo! JAPANアフィリエイトか、バリューコマースアフィリエイトの
タグがレスポンスフィールドで取得出来るので、
自動化アフィリエイト好きな方は、是非お試し下さい。

ちなみに。
皆さん気になるのはアフィリエイトの成果だと思いますが、、、
プログラムでチャチャっと作ったコンテンツの成果は、
残念ながらご想像通りですね。
ホントに、アフィリエイトは難しいものですね。

久々に検索プログラムの修正

いつの間にかYahoo!の検索APIが仕様変更していた影響で、
dtnの検索結果画面もバグってしまっていたので、
API仕様に合わせてプログラムの修正をしてみました。

修正といっても、レスポンスフィールドが多少変更されただけなので、
xml_parse_into_structで配列化されているデータの、
引っぱり出し方を変えた程度ですが(^_^;)
xml_parse_into_struct_hairetsu.png
レスポンスフィールドにキャッシュのURLも付いたので、
パース時の配列構造が変わったみたいですね。

とりあえず、これで無事表示されるようになりました。
search_result_dtn.png

今年は「末広がりの八年目」。
しっかり管理運営も頑張ります!!

YahooショッピングAPI修正

前回書いた、PageRank更新でrank9再びの現象も、
気がついたら直ってました。
毎々ながら、不思議な現象です(^▽^;)

さて。
PageRankが落ち着いたと思ったら、
次はYahoo! JAPAN Webサービスの方に問題が、、、。

ふとTopページに置いてあるYahooのニューストピックスAPIを見ると、
データが何も表示されていませんでした。
まぁデータ取得に失敗することはたまにあったのですが、
たいてい何度か再読み込みすればうまく読み込んでくれてたのですが、
今回は全く反応が無く....。

で。これはおかしいと思い、あれこれ見直してみたところ、、、、
リクエスト放り投げ用の接続先URLが、
これまでの
Yahoo.co.jp
ではなく、
yahooapis.jp
という新しいドメインに変更されてました(^△^;)

どうやら、だいぶ前にお知らせもあったみたいです。。。
接続先を直して今は無事に動いてくれてます。

yahoo_news_error_0906.png

ニュースAPIが仕様変更されているってことは、他も変わっているの?ってことで、
早速、検索API、ショッピングAPIをチェックしてみたところ、
ショッピングAPIのレスポンスフィールドにも変更があったようで、
せっかく作ったYahoo ショッピング人気キーワードランキングが、
めちゃくちゃになってました。。。

確か、以前はレスポンスフィールドの、Relational Query(関連キーワード)は、
4個ずつになってたはずだったのですが、、、
これが0 - 4個と、ばらばらになってしまってました。

という訳で、これまでは単純にforeach文でぐるぐる回し、
順繰りに取得したデータをランキング化していけばよかったのですが、
きちんと、

・ランキングの順位情報
・検索キーワード
・検索キーワード用URL
・関連キーワード
・関連キーワード用URL

とXMLデータをパースするときにデータを振り分け、
あれこれ小細工をする必要が出てしまいました(^△^;)
アホな私には、ちょっと面倒なレスポンス仕様になっちゃいましたね。

yahoo_shopping_ranking_0906.png

とりあえず、こちらも直して無事動いてますので、
しばらくこのままでいこうと思います。

それにしても。
APIの仕様変更もマメにチェックしないとダメですね( ̄- ̄;)
皆さんもご注意下さい。

YahooショッピングAPI

楽天APIでランキングサイトを作ってみたと書きましたが、
楽天APIのランキングデータだけだと少々寂しかったので、
Yahoo! APIのショッピングランキングデータも引っ張ってきて、
これもこっそり追加しておきました。
せっかく作ったけど、サイドにあるのであんまり目立ちませんけども。。。(^▽^;)

yahoo_api_ranking_otoku.png

ちなみに。
Yahoo! APIのランキングデータの場合、
レスポンスフィールドのQueryRankingDataの中に、
 rank:現在順位(1位から100位まで)
 vector:前日差(up:上昇/down:下降/stay:維持/new:新規)
 prerank:前日順位
と、前日差を表すデータがあるので、
コレを使って変化状況を矢印表示してあります。

使ってみると、Yahoo! APIの方が、
ランキングサイトっぽく作りこむには便利かもしれないですね(^△^;)


それにしても。。。

rakuten_api_ranking_otoku.png

楽天API、Yahoo! APIの、どちらのデータでも、
「マスク」がTopにいるのを見ると、ちょっと怖くなりますね...( ̄- ̄;)
皆さんもインフルエンザにはご注意下さい。

楽天APIでアフィリエイト

APIを使って、検索連動型広告を作ってみたと以前に書きましたが、
久々に楽天ウェブサービスのページを確認してみたところ、
新たに商品ランキング機能が追加されてたので、
それを使って、ランキングサイトを作ってみました(^▽^;)
rakuten_api_affiliate.png

で。出来たのが、こんなのでした。

楽天APIは、リクエストURLのパラメーターにアフィリエイトIDを足しておくと、
アフィリエイトコード付きのURLも返してくれるので、
アフィリエイトサイトを構築するには、とっても楽ができますです。
ただ、、、単にプログラムで吐き出して作ったアフィサイトだと、
何の面白みも無いので、収入は期待できないでしょうけど...(^△^;)


ちなみに。この楽天ウェブサービスには、
↓みたいな注意書きがあります。
【※ 短い時間の間に大量に、同一のリクエストURLへアクセスすると、
一定時間利用できなくなる場合がございます。テストの際にはご注意ください。】

プログラムで、ダダダダァーっとリクエストを送りつけたりすると、
すぐレスポンスが来なくなりますので、
sleep();
などを使って、適当に処理を止めてあげて下さい(^∇^;)

Yahoo!ニュースAPIの調整

dtnの右側部分には、Yahoo! JapanのWeb APIを使って、
Yahoo!ニュースの情報を表示させています。
tabclick_yahoo_news.png

なんとなく、ニュース情報とかを載せてあると、
ポータルサイトっぽくなるかなぁと思いのせてみた訳ですが、、、
あんまり意味ないですかね(^△^;)

さて。このYahoo!ニュース部分ですが、
これまでは、国内・海外・経済・・・の各タブ部分にマウスをのせると、
OnMouseOverをきっかけに、AjaxでPHPにパラメータを放り投げ、
その結果を表示させておりましたが、、、。
マウスオーバーだと、ちょっとマウスが触れただけでphpを呼び出してしまい、
けっこう負荷もかかっていたので、OnMouseDownに変えることにしました。

という訳で、ニュース情報を切り替えたい時は、Yahoo! Japanなどと同様に、
タブ部分をクリックして下さいヽ(^O^;)ノ


ところで。Yahoo! デベロッパーネットワークのページを久々に見たら、
dtnでも使っている検索、ニュース以外にも、知恵袋、みんなの検定など、
新しいAPIがけっこう公開されてました。
時間があったら、またdtnに新しい機能をくっつけてみようと思ってます。
お楽しみにどうぞ。

Yahoo!トピックスAPIの更なる修正

前回ちょっと書いておいたことですが、
YahooトピックスAPIで、パラメータcategoryにdomestic(国内)を指定すると、
ヘッドラインという、中身の無いページが表示されてしまっていたので、
これを修正しておきました。
リンク先を見ると、↓みたいなURLのページが表示されています。
http://dailynews.yahoo.co.jp/fc/domestic/latest_development/

多分、RESTリクエスト構築に問題あるんだろうなぁって気がしますが、
なんだかちょっと原因がよく分からず、、、(^△^;)
で。あんまり時間もないので、とりあえずPHPでチョチョイといじくって、
domestic指定の時だけ、配列のループを一個ずらしておきました(^_^;)


ちなみにですが、、、。
Yahoo!トピックスAPIのリクエスト上限は、24時間中に
1IPアドレスにつき5000件が上限となっているようで。
この前ちょっと危なかったので、ちょっとこれも修正が必要な感じです。

やはりマウスオーバーだけだと、パッパッと変わってしまって、
余計にリクエスト投げてしまうんでしょうね。
近々onClickに修正しようと思います。

yahoo!トピックスAPIの修正

ニュースTopicsAPIの表示を始めて以来、
たまーにブラウザでJavascriptのエラーが表示されたりしてました。
『デコードする URI は有効なエンコーダではありません』というものです。
PHPでパースしたデータをJavascriptに返して、
decodeURIComponentでデコード処理をしていたのですが、
どうやらこれが問題だったようで。。

ネットで色々調べてると、unescapeにしておけばOKというのを見つけたので、
とりあえずこちらでデコード処理をさせておきました。
今のところ無事動いてるようです(^_^;)


時間があったら、国内部分に『ヘッドライン』という
中身の無いニュースを表示されてしまっているので、
その修正もしたいと思います。

Yahoo!ニュースAPIをAjaxで表示

dtnのトップページにはYahoo!ニュースのトピックスを表示させてあります。

とりあえずTopページにニュースを表示させておけば、
ポータルサイトっぽく見えるかなぁと思って付けたのがきっかけでしたが、、、(^_^;)
最近ではブラウザのスタートページをdtnにしていることもあり、
ニュースを表示させとくと意外と便利だなぁって思ったりもしています。

yahoo_news.png


さて、そのニュースTopicsの表示させ方ですが、
最初作った時は、Yahoo! ニュースTopicsのRSSがあったので、
このRSSデータを、PEARのXML_RSSを使って引っこ抜き、
PHPで表示させたりしておりました。。。

ただ、、、RSSデータの二次利用ってのはやっぱり良いとは思えず、、、
どうしようかなぁと思っていたら、Yahoo! デベロッパーネットワークに、
Yahoo!ニュース用のAPIがあることに今頃気が付きましたヽ(^O^;)ノ
どうやら7月30日に公開されてたようです。。。

という訳で、Yahoo! ニュース APIを使ってさっそく作り直してみました!
でも、どうせ作るんだから、ライブドアのTopページみたいに
タブで切り替えとかも出来たらいいなぁと思ったので、
最近流行のAjaxをチョイ使って、タブ切り替えもできるようにしておきました。

で。↓こんな感じになりました。
news_tab.png

仕組みとしては、XMLHttpRequestでJavaScriptからPHPに
RESTリクエスト用のパラメータを付けて放り投げます。
あとはいつも通りPHP側で、
RESTリクエスト構築→返ってきたXMLデータ分解→必要なデータでリンク作成
をして、JavaScript側に戻せばOK(^-^)
Ajaxは便利でいいですね?。

タブ部分は、onMouseOverより、onClickの方がいいかなぁとも思ったのですが、
とりあえずマウスオーバーで切り替わるようにしておきました。
使いづらいようだったらまた変えてみます。

検索プログラムのさらなる改造

検索プログラムをまたまた改造してみました。

以前の改造では、検索されたキーワードをYahoo検索APIに接続して、
返ってきたXMLデータを配列化する。
そして、そのデータとdtn登録サイトのデータを比較し、
同じものがあれば登録されているカテゴリをリンクさせる。
という改造をしていました。

しかしながら、dtn登録サイトの数がまだまだ少なく、
なかなかカテゴリリンクが表示されない、、、という状況になってしまい、
しょうがなくdtnのSQL検索結果も下のほうに10件づつ表示させていました(^△^;)
ただ、やはり見栄えがイマイチなので、、、
dtnの検索結果の表示はやめ、Yahoo API + dtn該当リンク表示のみにすることにしました。

登録リンクが増えれば増えるほど、
検索結果に表示されるカテゴリへのリンクも増えると思いますので、
気長に登録サイト様が増えるのを待ちたいと思ってます( ̄  ̄;)

ちなみに。
dtn登録サイト様が検索結果に見つかると、こんな感じで表示されるようになります。
dtn_search_img.jpg

検索結果の表示速度もだいぶ改善しつつありますので、
ぜひぜひお気軽に検索ボックスをご利用ください。

YSTのフルアップデート。

Yahoo!が開発しているウェブサーチエンジン、Yahoo! Search Technology (YST)の
インデックスデータがフルアップデートされてたようです。
ここで告知されてました。

なんだか最近Yahooからのアクセス数が増えてるなぁ。。と思っていたら、
この更新で、とあるキーワードで検索すると、トップに表示されるようになったのが原因だったようです。
あんまり日々の検索順位とかを気にしてなかったから、ちょっと嬉しかったです(^▽^;)


ところで。
dtnの検索結果は、検索キーワードをYahooの検索APIに接続して、
dtnの検索結果と合体して表示させてますが、
このYahoo検索API用のデータも更新されてるのかな???と、気になったので
色々調べてみたところ、こちらも見事に更新されたデータが表示されておりました。

タダで使わせる検索APIのデータは、ちょっと古いデータでも使ってるのかなぁ?と
思ってたのですが、本家のデータと同じデータを使わせてくれてるとは、
なかなか気前が良いサービスですね(^-^)


dtnのディレクトリ検索結果と、YahooAPIの検索結果も、
もうちょっとうまく合体させられればいいなぁ?と思ってますが、、、
なかなかうまくいかず、、、
時間があったらまた改造してみようとは思ってますので、
今しばらく今の状態でご利用ください(^_^;)

検索プログラムの更なる修正

検索プログラムを更に修正してみました。

これまでは、検索APIに接続し、返ってきたXMLデータをそのまま出力させていましたが、
今回はこのデータとdtnのSQL検索データを連携させてみました。
連携といっても、YahooやGoogleのように、独自に何億サイトものデータを
持っている訳でもないので、大したことはしてませんけども。。。(^△^;)

とりあえず、検索APIから返ってきたXMLデータを配列化して、
それとdtnのSQL検索結果を比較して、同じサイトがあったら、
検索APIからのデータをdtnのデータに置き換える。って感じにしてあります。
これにより、こんな感じで検索をしてみると
検索結果の中にdtn登録サイトがあった場合は、
その登録カテゴリへのリンクも表示されるようになってます。

検索結果に登録カテゴリへのリンクが表示されていると、
昔のYahoo検索のような感じがして、懐かしい感じがしますねぇ。

まぁまだまだdtnの登録データも少なく、うまく連携してるとはいえない状態ですが、、、
ただ単に検索APIからのデータを表示させてるだけよりは、
面白くなったかなぁと思って自己満足してます(^▽^;)

ところで。
これまでは、検索結果にgoogleの検索APIのデータも表示させていましたが、、
このgoogle API への接続がボトルネックになっているようなので、
しばらくは接続をやめようと思ってます。

おそらく、Google AJAX Search APIではなく、
Google SOAP Search APIを使ってるのが原因だと思いますが( ̄  ̄;)

うちはPHP4なので、SOAPのデータ利用にはnusoapとかを利用しており、
phpのライブラリだと速度が出ないのはしょうがないかなぁと。。。
Cで書かれたPHP5のSOAP拡張があれば、かなり快適になるとは思いますが、、、
時間があればgoogleデータの利用も考えてみようと思ってます。

というわけで、今はYahoo検索APIの結果のみを利用しています。

今後も、より面白い検索結果が表示できるように、
色々と細工していくつもりなので、まだdtnディレクトリに登録していない
サイトをお持ちの方は、ぜひ登録をしてみて下さい。