6

私は YQL を使用して一連のページを取得していますが、そのうちのいくつかはオフラインである可能性があります (明らかにどのページかはわかりません)。私はこのクエリを使用しています:

SELECT * FROM html WHERE url IN ("http://www.whooma.net", "http://www.dfdsfsdgsfagdffgd.com", "http://www.cnn.com")

最初と最後の 1 つは実際のサイトですが、2 番目のサイトは明らかに存在しません。実際には 2 つの結果が返されますが、それらが読み込まれた場所の URL はどこにも表示されません。では、クエリ内のすべてのページがロードされていない場合、どの html ページがどの URL に属しているかを調べる方法は何でしょうか?

4

2 に答える 2

3

残念ながら、キーが URL で値が html 応答である応答で key=>value ペアを取得する方法がわかりません。ただし、次のクエリを試して、ユース ケースに適合するかどうかを確認できます。

select * from yql.query.multi where queries="select * from html where url='http://www.whooma.net';select * from feed where url='http://www.dfdsfsdgsfagdffgd.com';select * from html where url='http://www.cnn.com'"

ここで試してみてください。できることは、クエリを実行する前に、urlsoqueriesなど の配列で順序を維持すること['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com']です。この配列を呼び出すことができますA。YQL クエリからの応答を反復処理すると、存在しない URL は null を返します。上記のクエリからのサンプル応答:

<results>
  <results>
    // Response from select * from html where url='http://www.whooma.net'. This should be some html
  </results>
  <results>
    // Response from select * from feed where url='http://www.dfdsfsdgsfagdffgd.com'. This should be null.
  </results>
  <results>
    // select * from html where url='http://www.cnn.com'. This should also be some html
  </results>
</results>

結論として、配列Aと YQL からの応答を反復処理できます。配列の最初の要素は、その YQL 応答Aの最初の (内部結果) 要素に対応する必要があります。resultsつまり、2 つの配列からハッシュマップを作成しています。答えが長いことは知っていますが、必要だったと思います。混乱がある場合はお知らせください。

于 2013-10-07T23:15:42.817 に答える
1

YQL 診断フラグを使用して、読み込まれていない URL を特定できます。診断フラグにより​​、応答には、対応するサーバーが見つかったかどうかを示す配列をdiagnostics持つプロパティが含まれます。urlおそらく、読み込まれなかった URL を削除すると、結果ページは残りの URL と一致するようになります。

于 2013-10-12T12:56:30.733 に答える