2012-04-28 86 views
1
task('google:rankings' => :environment) do 
    def find_item uri, query 
    search = Google::Search::Web.new do |search| 
     search.query = query 
     search.size = :large 
     search.each_response { print '.'; $stdout.flush } 
    end 
    search.find { |item| item.uri.downcase.include?(uri.downcase) } 
    end 

    def rank_for query, domain 
    print "%35s " % query 
    if item = find_item(domain, query) 
     puts " #%d" % (item.index + 1) 
    else 
     puts " Not found" 
    end 
    end 

    Campaign.all.each do |campaign| 
    campaign.keywords.each do |keyword| 
     rank_for keyword.set, Domain.find(campaign.domain_id).name if (keyword.set) 
    end 
    end 
end 

這個小技巧是在一個rake任務中。當耙任務運行在實時控制檯窗口的更新,像這樣:ruby​​語法是什麼意思?

關鍵字。

關鍵字...

關鍵字.....未發現

我不是發生了什麼事情與#%d十分清楚?它如何使點的打印多次發生?

回答

7

這些點沒有被第4行(或任何一行)rank_for打印。它們正在被幾行前面傳遞給search.each_response的塊打印。

#%d,所述#只是#%d是C-ISH格式代碼的意思是「在這裏插的整數值」。

+0

dangit只是幾乎沒有看到它自己。在這種情況下,%35是什麼? – Jake 2012-04-28 21:59:31

+2

@Jake%表示取一個字符串,35表示將它對齊到35個字符。 – sepp2k 2012-04-28 22:01:33