not good but great

プログラミング、アート、映画・本の感想について書きます。

YQLで複数フィードを読み込む件数を指定しても反映されない、ソートもされない・・・

読み込み件数を指定すると読み込めない

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を見ると、RSSRDFという規格によって書かれたものなので、JRAのニュースはRSSとなります。しかし楽天競馬の形式?は「feed」となっています。

RSS,feedの違いがわからない

まず更新情報を発信する規格にはRSSAtomがあります。feedというのはその二つの総称のことを言います。RSSAtomの違いが前者が概要、後者が全文を配信していることです。RSSAtomはともにXMLで記述されています。
http://curo.jp/61

これらを考慮して、楽天競馬のfeedというのはRSSなのかAtomなのかよくわかりません。

読み込み件数を増やす

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

http://developer.yahoo.com/yql/console/#h=select+*+from+xml+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+31+offset+1

読み込み件数の確認

limitに31を設定していましたが、適応はされていませんでした。JRAが30件、楽天競馬が100件読み込んでいました。だから130件になっていたのですね。

楽天競馬はAtom

楽天競馬から帰ってくるデータを確認すると、Atomと書いてありました。これでXMLで読み込む意義があるかもしれません。(RSSAtom両方XMLで記述されているので。)

続きは次回以降

ぜんぜんわからないので、明日以降にまたトライします。問題は解決されていませんが、ここでいったん終了とします。