[#47173] 小数点以下を切り捨てる方法について — "T.Soejima" <clev@...2.so-net.ne.jp>

お世話になっております。そえじま@勉強中です。

16 messages 2010/06/23

[ruby-list:47139] Re: 同じデータを引っ張ってしまう。

From: "T.Soejima" <clev@...2.so-net.ne.jp>
Date: 2010-06-07 04:11:55 UTC
List: ruby-list #47139
そえじま@勉強中です。

自己レス+追加の質問なんですが、以前のメールで投稿したソースをいろいろ
いじってみたのですが、どうも、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を同じところで繰り返してるような気がするのですが、使い方が
> 間違っていますでしょうか?
>
> ご教示いただけると助かります。よろしくお願いいたします。
>
>
>
>
>
>
>   


In This Thread