首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“谷歌搜索”创业板的示例代码不起作用?

“谷歌搜索”创业板的示例代码不起作用?
EN

Stack Overflow用户
提问于 2013-10-15 13:30:23
回答 1查看 1.1K关注 0票数 1

每次我运行这段代码(作为“google”gem的示例),我所有的三个rank_for查询都被返回为"Not“。

我想也许问题出在if item = find_item(/vision\-media\.ca/, query)上,因为我不知道他们为什么要提到vision-media.ca站点。

请帮帮我!我刚刚在周末读过一本关于Ruby的书。

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中描述的特定格式输出查询内容。学会它,爱它。

这就是解释这些概念的全部。

一个非常简单的实现是:

代码语言:javascript
复制
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 }
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19382537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档