每次我运行这段代码(作为“google”gem的示例),我所有的三个rank_for查询都被返回为"Not“。
我想也许问题出在if item = find_item(/vision\-media\.ca/, query)上,因为我不知道他们为什么要提到vision-media.ca站点。
请帮帮我!我刚刚在周末读过一本关于Ruby的书。
require "rubygems"
require "google-search"
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 =~ uri }
end
def rank_for query
print "%35s " % query
if item = find_item(/vision\-media\.ca/, query)
puts " #%d" % (item.index +1)
else
puts " Not found"
end
end
rank_for "hackerspace new york"
rank_for "makerspace new york"
rank_for "fab lab new york"发布于 2013-10-15 15:52:13
这个例子并不明显,因为它使用了“高级”的ruby功能。
例如:
search.each_response { print "." ; $stdout.flush }在{...}中注册一个代码块,当从谷歌获取另一个结果页面时调用该代码块。
search.find { |item| item.uri =~ uri }是一个非常基本的概念,被称为迭代器,但这可能是您获得"Not“消息的情况。它检查返回的google是否与rank_for (/vision\-media\.ca/)中提供的正则表达式匹配。如果正则表达式是新的,您应该明确地阅读它。它们也被广泛地应用于红宝石。请记住,方法中的最后一个评估对象将是该方法的返回值。因此,find_item将返回find计算的值( uri与vision-media.ca匹配的所有项)。
另一件事是输出格式化print "%35s " % query。这将以sprintf中描述的特定格式输出查询内容。学会它,爱它。
这就是解释这些概念的全部。
一个非常简单的实现是:
require "google-search"
[
"hackerspace new york",
"makerspace new york",
"fab lab new york"
].each do |query|
puts "searching for #{query}"
Google::Search::Web.new do |search|
search.query = query
search.size = :large
end.each { |item| puts item.title }
endhttps://stackoverflow.com/questions/19382537
复制相似问题