jsでクロスドメインのHTMLスクレイピングが使えるようになるjquery.xdomainajax.jsだけど、
しばらく前から使えないようになった。
結論
jquery.xdomainajax.jsの中身を以下のように変える
//古いデータ 18行目くらい YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', query = 'select * from html where url="{URL}" and xpath="*"';
//新しいデータ 18行目くらい YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys', query = 'select * from htmlstring where url="{URL}" and xpath="*"';
解説
jquery.xdomainajax.jsがクロスドメインの壁を超えるために、Yahoo!の YQL というサービスを使ってたのだけど、それが使えなくなったのでURLを書き換えることで使えるようになったみたい。
ただ、返ってくるデータが生テキストからタグエスケープ済みのテキストデータになってるので、このままではセレクタの呼び出しや検索ができない。なので読み出し側も修正が必要。
呼び出し側の修正
//古いデータ resspnseTextをそのままjQueryオブジェクトに変換すればHTMLタグ化できた $.ajax({ url: 'http://yahoo.co.jp/', type: 'GET', success: function(data) { content = $(data.responseText); $('body').append(content); } });
//新しいデータ resspnseTextの中に<result>があり、その中にエスケープされたテキストが入ってるので //オブジェクト化→アンエスケープ→オブジェクト化という手順を踏んでみた $.ajax({ url: 'http://yahoo.co.jp/', type: 'GET', success: function(data) { content = $($(data.responseText).text()); $('body').append(content); } });
もっと良い方法があったら教えて下さい。