読み込み件数を指定すると読み込めない
select * from rss where url in ('http://www.jra.go.jp/rss/jra-info.rdf', 'http://keiba.rakuten.co.jp/info/feed') limit 5 offset 1
YQLのクエリ部分をYQL Consoleで実行して、出力結果を確認することが出来ます。見やすくするために上の命令は途中で改行を加えています。
http://developer.yahoo.com/yql/console/#h=select+*+from+rss+where+url+in+('http%3A%2F%2Fwww.jra.go.jp%2Frss%2Fjra-info.rdf'%2C'http%3A%2F%2Fkeiba.rakuten.co.jp%2Finfo%2Ffeed')+limit+5+offset+1
JRAと楽天競馬のニュースフィードを読み込もうと思いました。読み込み件数を指定しないと、デフォルトでは二つで130件フィードを読み込むので、時間がかかります。そこで読み込み件数を「limit」に設定しました。するとurlの最初に設定したJRAのニュースしか読み込めなくなりました。
形式が違うことが原因?
http://nako.cocolog-nifty.com/nakolog/2004/05/xmlrdfrss.htmlを見ると、RSSはRDFという規格によって書かれたものなので、JRAのニュースはRSSとなります。しかし楽天競馬の形式?は「feed」となっています。
読み込み件数を増やす
select * from rss where url in ('http://www.jra.go.jp/rss/jra-info.rdf','http://keiba.rakuten.co.jp/info/feed') limit 30 offset 1
読み込み件数を30件にしてみました。結果はJRAのニュースが30件読み込まれていました。
select * from rss where url in ('http://www.jra.go.jp/rss/jra-info.rdf','http://keiba.rakuten.co.jp/info/feed') limit 31 offset 1
読み込み件数を30件にしてみました。結果はJRAのニュースが30件、楽天競馬から1件読み込まれていました。そこで楽天競馬から返ってくるデータを見てみると、pubDataというのを発見。pubDataはRSS2.0に使われる形式。ではRSSなのか。一方記事の全文を配信しているようにも見えました。だったらAtomなのか。そこがよくわかりませんでした。
形式が混同しているときはXML
下のリンクを見てみると、RSS2.0やAtom,Feed0.3?が混同している場合はXMLで指定して、個々にデータを分けるようにしようとのことでした。
YQLで複数ブログのRSSをJSONで取得して、新着として表示する - 仙台 Ruby Vim JavaScript フリーランスプログラマ
何が問題なのかもう一度考える
ごちゃごちゃしてきたので考えを整理します。問題はlimitの制限がJRAと楽天競馬の二つを合わせたフィードに適用されていないこと、二つのフィードを日時順にソートできていないことです。
この二つの問題をどうやって解決するのか考えたところ、対象データの指定が間違っているのではないかと思いました。これまではワイルドカードの*を指定おり、欲しいデータを指定してはいませんでした。そこを指定していなかったので、ソートができていなかったのかもしれません。
XMLで読み込む
これまでのやり方がダメだったので、XMLで読むことにしました。
select * from xml where url in ('http://www.jra.go.jp/rss/jra-info.rdf', 'http://keiba.rakuten.co.jp/info/feed') limit 31 offset 1
続きは次回以降
ぜんぜんわからないので、明日以降にまたトライします。問題は解決されていませんが、ここでいったん終了とします。