• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > 使用Ruby来编写访问Twitter的命令行应用程序的教程

使用Ruby来编写访问Twitter的命令行应用程序的教程

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了ruby 命令,ruby应用,ruby,ruby碧玺,ruby woo口红等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简介

Twitter 现已成为社交网络中的佼佼者。Twitter 只允许用户发布不多于 140 个字符的内容,谁能够想到,这个过去毫不起眼的小网站如今却价值十多亿美元,拥有数百万用户,Twitter 平台上已构建了大量的应用程序,并且不断有新的开发人员准备投入这一浪潮中。

本文并不打算介绍 Twitter(事实上,也没有这个必要)。相反,本文将介绍如何访问 Twitter 平台来构建出色的命令行应用程序。Twitter 支持各种编程语言,包括 C++、Java?、Perl、Ruby、PHP 和 Python。对于每种语言,都有大量的库或包可以帮助您完成大量工作。

本文将介绍如何使用 Ruby 来访问 Twitter。您应该对 Ruby 有所了解,但是即使不具备这方面的知识,也很容易快速掌握 Ruby。

安装 Twitter gem

一些 gem 可用于从 Ruby 访问 Twitter(参见 参考资料,以获得有关的更多信息)。对于本文,我选择使用 twitter,这是由 John Nunemaker 编写的 Ruby 包装器。安装 gem 非常简单:

bash$ gem install twitter

该命令用于在您的机器上安装 Twitter 客户端。如果您有一个定制的 gem 安装文件夹,那么首先需要从脚本中调用 rubygems,然后调用 twitter。下面展示了具体过程:

require 'rubygems'
require 'twitter'

</div>

第一个 Twitter 脚本

现在,您已经准备好构建第一个应用程序,该应用程序用于检测您所关注的人的位置。首先创建一个脚本,它会获取其他人的姓名,并告诉您他们的当前位置。清单 1 显示了相关代码。
清单 1. 跟踪用户位置

require 'rubygems'
require 'twitter'

def track
 ARGV.each do |name|
  puts name + " => " + Twitter.user("#{name}").location
 end
end

</div>

track

这段代码执行了哪些操作?如果您刚刚接触 Ruby,则需要向您解释一下,ARGV 是一个数组,它提供脚本对命令行参数的访问。Twitter.user API 返回有关您对其位置感兴趣的人的信息。调用以下脚本可以获得 Lady Gaga、Ashton Kutcher 和 Oprah Winfrey 的当前位置:

bash$ ./location_tracker.rb ladygaga aplusk Oprah
ladygaga => New York, NY
aplusk => Los Angeles, California
Oprah => Chicago, IL

</div>

在 Twitter 上实现用户搜索并了解认证情况

现在,让我们搜索 Twitter 上的一些现有用户。如果可以猜出用户的 Twitter ID,那么可以使用以下命令行:

require 'rubygems'
require 'twitter'
puts "User exists" if Twitter.user?(ARGV[0])

</div>

不过,一般情况下无法猜出用户的 ID。因此,需要提供搜索用户名的功能。这需要用以下代码实现,该代码将搜索名称与 Arpan 匹配的所有用户:

require 'rubygems'
require 'twitter'
names = Twitter.user_search("Arpan")

</div>

但是这段代码未能正常工作。清单 2 显示的错误日志告诉您问题出现在哪里。
清单 2. 无法执行用户搜索

Twitter::Unauthorized: GET https://api.twitter.com/1/users/search.json?q=Arpan%
20Sen: 401: Could not authenticate you.
  from D:/Ruby/lib/ruby/gems/1.8/gems/twitter-1.6.2/lib/faraday/response/r
aise_http_4xx.rb:12:in `on_complete'
  from D:/Ruby/lib/ruby/gems/1.8/gems/faraday-0.7.4/lib/faraday/response.r
b:9:in `call'
  from D:/Ruby/lib/ruby/gems/1.8/gems/faraday-0.7.4/lib/faraday/response.r
b:62:in `on_complete'

</div>

从这段代码可以看出,您首先需要通过 Twitter 的认证,然后才能执行其他操作。这里的认证不是要求您进行登录并输入密码;而是指对您的脚本(在Twitter 中称为 应用程序)进行认证。请牢记这一差异,然后访问 http://dev.twitter.com/apps,并使用平常的帐号和密码进行登录。Twitter 会要求您提供应用程序名称、描述和应用程序的占位符 (placeholder) 网站。提供这些信息后,还必须提供以下四项内容实现脚本认证:

  1.     用户密匙(Consumer key)
  2.     用户秘密令牌(Consumer secret token)
  3.     用户 OAuth 密匙
  4.     用户 OAuth 秘密令牌

现在,在 Ruby 代码内部,您需要使用这些选项填充 Twitter.configure 对象。清单 3 显示了相关代码。
清单 3. 配置脚本进行认证

Twitter.configure do |config|
 config.consumer_key = "mT4atgBEKvNrrpV8GQKYnQ"
 config.consumer_secret = "BiQX47FXa938sySCLMxQCTHiTHjuTTRDT3v6HJD6s"
 config.oauth_token = "22652054-Yj6O38BSwhwTx9jnsPafhSzGhXvcvNQ"
 config.oauth_token_secret = "o9JuQuGxEVF3QDzMGPUQS0gmZNRECFGq12jKs"
end

</div>

注意,清单 3 中的条目是虚构的:您需要在脚本中填充自己的内容。顺利完成认证后,就可以搜索名为 Arpan 的人(参见下面的 清单 4)。
清单 4. 在 Twitter 上搜索用户

require 'rubygems'
require 'Twitter'

Twitter.configure do |config|
 config.consumer_key = "mT4atgBEKvNrrpV8GQKYnQ"
 config.consumer_secret = "BiQX47FXa938sySCLMxQCTHiTHjuTTRDT3v6HJD6s"
 config.oauth_token = "22652054-Yj6O38BSwhwTx9jnsPafhSzGhXvcvNQ"
 config.oauth_token_secret = "o9JuQuGxEVF3QDzMGPUQS0gmZNRECFGq12jKs"
end

users = Twitter.user_search(ARGV[0])
users.each do |user|
 print "\n" + user.name + " => " 
 print user.location unless user.location.nil?
end

</div>

现在,将脚本保存为 search_for.rb,并在命令行中以 ./search_for.rb Arpan 形式调用脚本后,您将获得 清单 5 所示的用户名称。
清单 5. 清单 4 的代码输出

Arpan Jhaveri => New York
Arpan Boddishv =>
Arpan Peter => Bangalore,India
Arpan Podduturi => NYC
Arpan Kumar De => IIT Kharagpur
Arpan Shrestha => Kathmandu, Nepal
Arpan Divanjee => Mumbai,India
Arpan Bajaj => Bay Area, CA

</div>

您可能期望获得更多结果。Arpan 这个名字(印度姓名)并不少见,那么为什么搜索结果这么少?最后您会发现,user_search 使用了一个可选参数(一个 Ruby hash 表),您也可以指定可产生更多结果的选项。因此,可以稍微修改一下清单 5 的代码,传递可选的 hash 参数(#)并预填充它的值。例如,如果希望在一个页面中填充 15 项结果,那么可以使用 清单 6 中的代码。
清单 6. 在每个页面显示 15 项搜索条目

require 'rubygems'
require 'twitter'

#.. authentication code here
users = Twitter.user_search(ARGV[0], {:per_page => 15})
#... same as Listing 10

</div>

是不是可以在每个页面中显示 100 项条目?不行,Twitter.user_search 允许每页显示的最多条目为 20。清单 7 显示了如何在每个页面中显示 20 个条目。
清单 7. 每个页面显示 20 个条目

#... usual authentication stuff

pagecount = 0
while pagecount < 10
 u = Twitter.user_search("#{ARGV[0]}", {:per_page => 20, :page => pagecount})
 u.each do |user| 
 print "\n" + user.name + " => " + user.screen_name
 print " => " + user.location unless user.location.nil?
 end unless u.size < 20
 pagecount += 1
end

</div>

现在看上去好多了。您现在可以根据偏好名和用户的屏幕名称搜索用户,下面让我们做一些更有趣的事情。让我们搜索居住在纽约的、喜欢 Ruby 的名为 Nick 的人。您可以从 user_search 获得姓名和位置,但是如何处理喜欢 Ruby 的搜索要求?这引入了下一个需要学习的内容:创建定制搜索客户端。
使用 Twitter::Search 类

使用 Twitter::Search 类创建定制搜索客户端。清单 8 显示了相关代码。
清单 8. 学习使用 Twitter::Search 类

#... user authentication 
pagecount = 0
while pagecount < 10
 u = Twitter.user_search("#{ARGV[0]}", {:per_page => 20, :page => pagecount})
 u.each do |w| 
 if w.location == "New York"
  results = Twitter::Search.new.from(w.screen_name).containing("ruby").fetch
  puts w.screen_name if results.size > 10
 end
 end unless u.size < 20
 pagecount += 1
end

</div>

这里发生了什么呢?代码首先使用 Twitter::Search.new 创建了一个搜索客户端。接下来,要求搜索客户端从包含 ruby 的相应用户那里获取所有 tweet。最后,代码返回一组结果,

您可能想查找下面的文章:

  • Ruby中调用执行shell命令的6种方法
  • Ruby实现命令行中查看函数源码的方法
  • 深入剖析Ruby设计模式编程中对命令模式的相关使用
  • Ruby包管理器gem常用命令
  • 使用Ruby来编写访问Twitter的命令行应用程序的教程

相关文章

  • 解析proxy代理模式在Ruby设计模式开发中的运用
  • ruby中执行周期性任务(定时任务)的3种方法
  • ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)
  • Jekyll静态网站后台引擎使用教程
  • Ruby实现的最优二叉查找树算法
  • Ruby中常用的字符串处理函数使用实例
  • Ruby基本的环境变量设置以及常用解释器命令介绍
  • rails "No route matches" 错误的解决方法
  • 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)
  • Ruby简洁学习笔记(二):类继承、属性、类变量

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 详解Ruby中的instance_eval方法及其与class_eval的对比
    • Ruby类继承、抽象类、类拓展混入、代理类实例
    • 浅析Ruby中的正则表达式的使用
    • Ruby迭代器的7种技巧分享
    • web 应用中常用的各种 cache详解
    • 在Ruby程序中连接数据库的详细教程
    • 深入理解Ruby on Rails中的缓存机制
    • ruby实现修改ubuntu下的hosts
    • Ruby和元编程之万物皆为对象
    • Ruby的XML格式数据解析库Nokogiri的使用进阶

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有