読者です 読者をやめる 読者になる 読者になる

あれこれ備忘録@はてなブログ

勉強したことやニュースや出来事を備忘録として書いていきます

Amazonで今すぐ使えるクーポンGET !

Google Feed API終了に対応した 代替案を紹介

右下のYahoo!急上昇ワードにYahoo!ショッピングの商品を関連付けるスクリプトGoogle Feed API終了で動かなくなっていました。

 

XMLなのだから、jQueryでパースできないのか?と思って試してみたら、クロスドメインの問題で取得出来ませんでした。

 

はてなブックマークブックマークレットといい、クロスドメイン対策は安全のために必要なのでしょうが面倒ですね。

 

前にもそうだったからGoogle Feed APIを使ったんでしょうね。

 

忘れていました。

 

調べてみたところ、Yahoo.comのAPIを利用したこんなjQueryプラグインがありました。

 

jQuery-Plugins/cross-domain-ajax at e5f123741ce6bc1be93e1db846a0e59cfe7e750c · denka/jQuery-Plugins · GitHub

 

YahooのAPIがこれです。使い方が知りたいです。

 

YQL - Yahoo Developer Network

 

ネット上のページでも、これを紹介しているところがありましたが、値の取得に失敗しPHPを使う方式に乗り換えていました。

 

色々と試行錯誤した結果、Yahoo!急上昇ワードランキングの場合、ゲットできたXMLデータ変数(オブジェクト)下のresponseTextにデータがありました。

 

こんな感じです。

    $.ajax({
        url: "http://hogehoge.xml",
        type: "GET",
        async: false,
        cache: false,
        dataType: "xml",
        success: function(xml) {

            //例えばtitleなどの要素を抜き出す
            $(xml.responseText).find('title').each(function(i, el) {
                //何かの処理
            });
        }
    });

 

これを見つけるのに2時間位かかってしまいました。

 

あと、"type: 'GET'"がいることですかね。

 

無いときには取得できませんでした。

 

プラグインを読みこめば、jQueryで同一ドメインRSSを取得するのとほぼ同じ方法が使えるのは便利ですよね。

 

追記

JavaScriptでクロスドメインの壁を飛び越える方法 - FICC Workbook

 

ここはわかりやすい解説がされていますね。

data.responseTextにデータの中身があるのはjquery.xdomainajax.jsによるもので、その下にYQLによって返されたデータがあり、その下に目的のRSSデータがあるのですね。

 

一辺にやったのでそのあたりがわかっていませんでした。

追記終わり

 

はてなでも困っている人がいるようなので、参考になればと思います。

b.hatena.ne.jp

 

moneyreport.hatenablog.com

 

bulldra.hatenablog.com

 

 

私はほとんど素人なので使いこなせませんが、他にも

 

So What is "Feed to JavaScript"?

 

などがあります。

 

これをテキストで取得してパースすればうまくいく場合もあるのではないでしょうか?

 

ツイッターなどで検索すると、アンテナサイトは結構困っているんですね。

 

逆に、これを使えばアンテナサイトが作れるんだということがわかりました。

 

紹介した人(私)のスクリプトが汚いとか、アフィカスが云々という批判は受け付けませんので、悪しからず・・・。

 

追記

YQLについて調べてみたら、こんな記事が

 

techblog.yahoo.co.jp

 

これで良いような気がしてきました。

 

しかも、YQLにはcallback関数を指定できますね。

 

jquery.xdomainajax.jsいらないような気がします。

 

 

 

 さらに追記

皆さん、ここに書かれた方法で対応しているようです。

Google AJAX Feed API が「403 : This API is no longer available.」を返す件について | astone.jeez.jp

 

Googleスプレッドシートを使う方法も書いてありました。

 

みんなxdomainajax.jsを使っていないところを見ると、XMLデータのうちの必要なデータの場所がわからなくて挫折したのでしょうか・・・?

 

さらにさらに

どうもYahoo! Pipesが終了するというのがあって、そのためにそれを使ったxdomainajax.jsも使えなくなるだろうという判断があるらしいですね。

 

すぐ上のページで紹介されている方法のほうが良さそうです・・・。

 

と思ったのですが、pipes.yahoo.comのページはなくなっていますが、YQLのページは相変わらず残っているので、別物でしょうね。

 

まだ使えるのではないでしょうか?

 

さらにさらにさらに

はてなRSSを読み込んでみたところ、読み込めるRSSの大きさに制限があるようでした。

 

あわせて読みたい」など、自分のサイトのRSSを読み込んで操作するスクリプトなら、ajaxで取得できるのでわざわざPHPや外部のWeb APIを利用する必要はありません。

 

多くの人はjQueryだけで対応できるのではないでしょうか?

 

その後

GoogleFeedAPI - PHP用 Google Feed API が完全に廃止されてしまった時の対応方法 - Qiita

 

記事はPHPでの対処法について書かれたものですが、12/4に復活したという記述がありました。

 

試してみたところ、確かに動いていますね。

 

一体、あの騒動は何だったのでしょうね・・・。

 

追記

この1ヶ月ほどこの記事へのアクセスが高かったようですが、一時復活したGoogle Feed APIがとうとう正式に終了したようですね。

今はこのプログラム動かしていないので、今でも動くのかどうかわかりません。

不都合がなければGoogleスプレッドシートを使う方法の方が良いのではないでしょうか?

ただjQueryなどでこれまでと同じような感じでFeedを扱いたい場合には上の方法が一番簡単なんですよね。

 

広告を非表示にする