From: "T.Soejima" Date: 2010-06-07T13:11:55+09:00 Subject: [ruby-list:47139] Re: 同じデータを引っ張ってしまう。 そえじま@勉強中です。 自己レス+追加の質問なんですが、以前のメールで投稿したソースをいろいろ いじってみたのですが、どうも、1箇所気になるところがあります。 res = Amazon::Ecs.item_search($key,{ :search_index=>$idx, :response_group=>'Medium', :sort=>'salesrank', :item_page=>page}) というような書き方をしているんですが、これはなんらかのハッシュの リストをAmazon::Ecsに渡していると思うのですが、他のハッシュはリテラル で確定しているのに、:item_page=>page だけは変数を渡しています。 別に仕様の問題ではないと思うのですが、400件を過ぎたあたりから、同じ ページばかりを引っ張ってくるようになるので、:item_page がうまく変化 できていないんじゃないかという気がしています。 このような場合に、:item_page がちゃんと変化してくれているかどうか を調べる方法はないでしょうか? # puts "page = #{page}" を入れてみたところ、変数自体はちゃんと増加 していました。 そもそも、ハッシュの値に変数を渡すこと自体が間違っているのでしょうか? ご教示、よろしくお願いいたします。 T.Soejima さんは書きました: > お世話になります。そえじま@勉強中です。 > > Amazonからデータを引っ張りながら、RubyとXMLなどについて > 並行して勉強しています。 > > 試しに下記のようなコードを書いてためしてみたのですが、ある程度 > の量をDBに落としたところから、常に同じデータしか引っ張らなく > なってしまいます。 > > アルゴリズムを勘違いしてるのだと思うのですが、何かヒントをいた > だけないでしょうか? > > > def get_page(page=1) > res = Amazon::Ecs.item_search($key,{ > :search_index=>$idx, :response_group=>'Medium', :sort=>'salesrank', > :item_page=>page}) > off = Amazon::Ecs.item_search($key,{ > :search_index=>$idx, :response_group=>'OfferSummary', > :sort=>'salesrank', :item_page=>page}) > return res, off > end > > db = SQLite3::Database.new( "bunko.db" ) > sql = "insert into test ( id, title, amount, real_price, used_price ) > values ( ?, ?, ?, ?, ? )" > > for i in (1..$pages) > begin > res,off = get_page(i) > rescue => e > p e > retry > else > res.items.each{ |item| > $title = item.get('title') > $amount = item.get('amount') > } > off.items.each{ |item| > $r_price = item.get('lowestnewprice/amount') > $u_price = item.get('lowestusedprice/amount') > } > db.execute( sql, nil, $title, $amount, $r_price, $u_price ) > end > end > db.close > > > retryを同じところで繰り返してるような気がするのですが、使い方が > 間違っていますでしょうか? > > ご教示いただけると助かります。よろしくお願いいたします。 > > > > > > >