not good but great

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

yql.query.multiで個別に読み込み件数を指定してフィードを読み込む

前回までの問題

前回の問題は下の通りでした

  • limitの制限がJRA楽天競馬の二つを合わせたフィードに適用されていないこと
  • 二つのフィードを日時順にソートできていないこと

・前回エントリ
YQLで複数フィードを読み込む件数を指定しても反映されない、ソートもされない・・・ - not good but great

個別に読み込み件数を指定できた

select *
from yql.query.multi where queries in (
    "select * from feed where url='http://www.jra.go.jp/rss/jra-info.rdf' limit 3",
    "select * from feed where url='http://keiba.rakuten.co.jp/info/feed' limit 3"
);

yql.query.multi」を指定すれば、個別にクエリを設定できるので、読み込み件数を指定できました。しかし日時順にソートすることはまだできていないので、JRAのフィードが3件読み込まれた後に楽天競馬が3件読み込まれるようになっています。

http://developer.yahoo.com/yql/console/#h=select+*%0Afrom+yql.query.multi+where+queries+in+(%0A++++%22select+*+from+feed+where+url%3D'http%3A%2F%2Fwww.jra.go.jp%2Frss%2Fjra-info.rdf'+limit+3%22%2C%0A++++%22select+*+from+feed+where+url%3D'http%3A%2F%2Fkeiba.rakuten.co.jp%2Finfo%2Ffeed'+limit+3%22%0A)%3B

var feed1 = "\"select * from feed where url='http://www.jra.go.jp/rss/jra-info.rdf' limit 3\"",
	feed2 = "\"select * from feed where url='http://keiba.rakuten.co.jp/info/feed' limit 3\"";
var query = "select * from yql.query.multi where queries in (" + feed1 + "," + feed2 + ") | sort(field='date',descending='true')";

jsで書くときはダブルクオテーションをエスケープすることに注意します。

Ti.Yahoo.yql(query,function(d){
	var rssItems = d.data.results;
		
	for(j = 0;j < rssItems.length;j++){
		for(i = 0;i < rssItems[j].item.length;i++){
			//タイトルや日時を取得する処理
		}
	}
);

2つのフィードを読み込むので、二重for文で処理します。

tableView.addEventListener("click",function(e){
	//途中省略
	entryView = Ti.UI.createWebView({
		url:rssItems[(e.index / rssItems[0].item.length)|0].item[e.index % rssItems[0].item.length].link
	});
	//途中省略
);

タッチイベントで、タッチした要素のリンク先を設定します。ちょっとコードが複雑になって、めんどくさくなってきました。

残った問題

ソートをどうやってやるのか

個別に読み込んで日時を別配列で格納して、ソートさせればできそうな気がします。しかし非常にめんどくさいです。

2つのフィードの合計にlimitを設定する

これをするには予め日時でソートされる必要があります。ソートされたフィードを新しい順で3件読み込むみたいなことをすればできるとかなと思います。

複数フィードを読み込む必要があるのか

開発に時間がかかりすぎているので、複数フィードを読み込む必要があるのか疑問に思ってきました。それよりも必要なフィードをタブにつき一つ表示したほうがわかりやすいのではと思ってきました。とにかく処理がめんどくさいので、一つのフィードに絞っていこうと思います。