YQL を使用して Web ページから HTML を取得しようとしていますが、問題が発生しています。
全体像: 検索基準を GET 要求の形式でサイトに送信し、応答から結果の数を抽出するアプリケーションを作成しようとしています。このサイトはhttp://nl.newsbank.comで、米国のニュース記事の検索に使用できます。検索のプロセスは非常に簡単です。このような GET リクエストを送信すると、キーワード「pizza」を含むすべての記事を検索できます (リンクを参照して、クエリがどのように構成されているかを確認できます)。私のアプリケーションはこのリクエストを送信し、「Results: 1 - n of n」ラベルで示される結果の数を抽出します。
これは紙の上では単純で、サーバー側で簡単に実装できます。ただし、これは「実際の」API ではなく、関心のある非常に小さなデータを取得するためにページ全体をロードする必要があるため、必要以上に多くの帯域幅を消費します。これをサーバー側で行います。
この回答で提案されているように、YQL を使用してクライアント側で同様の機能を実装しようとしています。問題は、提供された例では次のことです。
var query = 'SELECT * FROM html WHERE url="http://mattgemmell.com/2008/12/08/what-have-you-tried/" and xpath="//h1" and class="entry-title"';
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=??";
$.getJSON(url,function(data){
alert(data.query.results.h1.content);
})
http://nl.newsbank.comの検索で同じことを行うことはできません。上記の方法で xpath を使用すると、問題が発生しました。
2 つのケースがあります: GET リクエストを実行しようとすると、ご覧のようにブラウザで正常に読み込まれますが、data
入力した xpath に関係なく、次のエラーが表示されます: `Query syntax error(s) [line 1:89]一致しない文字 ' ' は '"' を予期しています]
または、 http: //nl.newsbank.comから html を取得しようとすると、YQL から null HTML が返されます。
他のタイプのアクセス (サーバー側での HTMLAgilityPack の使用や単なるブラウザーなど) を使用している場合、jsfiddle で例を試してみるとわかるように、null HTML が取得されない場合、他の Web サイトでも問題なく動作するので、なぜこれがこの特定のウェブサイトに協力しないのかについて、私は完全に当惑しています.
どんな助けでも大歓迎です。
編集: 失敗する YQL クエリ構成の例は次のとおりです。
var xpath = "//span[@class='basic-text-white']";
var query = 'SELECT * FROM html WHERE url="http://nl.newsbank.com/nl-search/we/Archives/?s_siteloc=NL2&p_queryname=4000&p_action=search&p_product=NewsLibrary&p_theme=newslibrary2&s_search_type=customized&d_sources=location&d_place=United%20States&p_nbid=&p_field_psudo-sort-0=psudo-sort&f_multi=&p_multi=&p_widesearch=smart&p_sort=YMD_date%3aD&p_maxdocs=200&p_perpage=10&p_text_base-0=SEARCHTERM&p_field_base-0=&p_bool_base-1=AND&p_text_base-1=&p_field_base-1=Section&p_bool_base-2=AND&p_text_base-2=&p_field_base-2=&p_text_YMD_date-0=April_1_2001_to_April_1_2012&p_field_YMD_date-0=YMD_date&p_params_YMD_date-0=date%3aB,E&p_field_YMD_date-3=YMD_date&p_params_YMD_date-3=date%3aB,E&Search.x=18&Search.y=18" and xpath="'+xpath+'"';
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=??";