国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > Ruby > 正文

使用Ruby來編寫訪問Twitter的命令行應用程序的教程

2020-10-29 19:41:01
字體:
來源:轉載
供稿:網友

簡介

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'

第一個 Twitter 腳本

現在,您已經準備好構建第一個應用程序,該應用程序用于檢測您所關注的人的位置。首先創建一個腳本,它會獲取其他人的姓名,并告訴您他們的當前位置。清單 1 顯示了相關代碼。
清單 1. 跟蹤用戶位置

require 'rubygems'require 'twitter'def track ARGV.each do |name|  puts name + " => " + Twitter.user("#{name}").location endend

track

這段代碼執行了哪些操作?如果您剛剛接觸 Ruby,則需要向您解釋一下,ARGV 是一個數組,它提供腳本對命令行參數的訪問。Twitter.user API 返回有關您對其位置感興趣的人的信息。調用以下腳本可以獲得 Lady Gaga、Ashton Kutcher 和 Oprah Winfrey 的當前位置:

bash$ ./location_tracker.rb ladygaga aplusk Oprahladygaga => New York, NYaplusk => Los Angeles, CaliforniaOprah => Chicago, IL

在 Twitter 上實現用戶搜索并了解認證情況

現在,讓我們搜索 Twitter 上的一些現有用戶。如果可以猜出用戶的 Twitter ID,那么可以使用以下命令行:

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

不過,一般情況下無法猜出用戶的 ID。因此,需要提供搜索用戶名的功能。這需要用以下代碼實現,該代碼將搜索名稱與 Arpan 匹配的所有用戶:

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

但是這段代碼未能正常工作。清單 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/raise_http_4xx.rb:12:in `on_complete'  from D:/Ruby/lib/ruby/gems/1.8/gems/faraday-0.7.4/lib/faraday/response.rb:9:in `call'  from D:/Ruby/lib/ruby/gems/1.8/gems/faraday-0.7.4/lib/faraday/response.rb:62:in `on_complete'

從這段代碼可以看出,您首先需要通過 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

注意,清單 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"endusers = Twitter.user_search(ARGV[0])users.each do |user| print "/n" + user.name + " => "  print user.location unless user.location.nil?end

現在,將腳本保存為 search_for.rb,并在命令行中以 ./search_for.rb Arpan 形式調用腳本后,您將獲得 清單 5 所示的用戶名稱。
清單 5. 清單 4 的代碼輸出

Arpan Jhaveri => New YorkArpan Boddishv =>Arpan Peter => Bangalore,IndiaArpan Podduturi => NYCArpan Kumar De => IIT KharagpurArpan Shrestha => Kathmandu, NepalArpan Divanjee => Mumbai,IndiaArpan Bajaj => Bay Area, CA

您可能期望獲得更多結果。Arpan 這個名字(印度姓名)并不少見,那么為什么搜索結果這么少?最后您會發現,user_search 使用了一個可選參數(一個 Ruby hash 表),您也可以指定可產生更多結果的選項。因此,可以稍微修改一下清單 5 的代碼,傳遞可選的 hash 參數(#)并預填充它的值。例如,如果希望在一個頁面中填充 15 項結果,那么可以使用 清單 6 中的代碼。
清單 6. 在每個頁面顯示 15 項搜索條目

require 'rubygems'require 'twitter'#.. authentication code hereusers = Twitter.user_search(ARGV[0], {:per_page => 15})#... same as Listing 10

是不是可以在每個頁面中顯示 100 項條目?不行,Twitter.user_search 允許每頁顯示的最多條目為 20。清單 7 顯示了如何在每個頁面中顯示 20 個條目。
清單 7. 每個頁面顯示 20 個條目

#... usual authentication stuffpagecount = 0while 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 += 1end

現在看上去好多了。您現在可以根據偏好名和用戶的屏幕名稱搜索用戶,下面讓我們做一些更有趣的事情。讓我們搜索居住在紐約的、喜歡 Ruby 的名為 Nick 的人。您可以從 user_search 獲得姓名和位置,但是如何處理喜歡 Ruby 的搜索要求?這引入了下一個需要學習的內容:創建定制搜索客戶端。
使用 Twitter::Search 類

使用 Twitter::Search 類創建定制搜索客戶端。清單 8 顯示了相關代碼。
清單 8. 學習使用 Twitter::Search 類

#... user authentication pagecount = 0while 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 += 1end

這里發生了什么呢?代碼首先使用 Twitter::Search.new 創建了一個搜索客戶端。接下來,要求搜索客戶端從包含 ruby 的相應用戶那里獲取所有 tweet。最后,代碼返回一組結果,如果在 tweet 中提到 Ruby 的次數超過十次,則將此人定義為喜歡 Ruby 的人。

讓我們嘗試為 hash 標記 #ruby 獲取一組 tweet。下面是具體實現:

#... user authentication coderesults = search.hashtag("ruby").fetchresults.each do |r| puts r.text + " from " + r.from_userend

不過,還可以實現更多內容。對于 ruby 之類的 hash 標記,您希望獲得數百個條目,不是嗎?對于這種情況,使用搜索客戶端也會帶來便利,因為您可以從搜索客戶端輕松地檢索下一個頁面。清單 9 的代碼顯示了有關 Ruby 的十頁 tweet。
清單 9. 顯示多個頁面

更多搜索選項

搜索客戶端可以讓您實現更出色的功能,比如使用特定語言或來自某個地方(比如德國)的 tweet。您甚至可以搜索提到特定用戶的 tweet,或搜索匹配特定條件的 tweet。例如,搜索所有提到 Ruby 但沒有提到 Rails 的 tweet?嘗試下面的代碼:

search.containing("ruby").not_containing("rails").fetch

當然,您可以像下面這樣進行串聯:

search.containing("ruby").not_containing("rails").mentioning("username").from("place-id")

搜索短語非常直觀。例如,輸入以下代碼:

search.phrase("ruby on rails").fetch

現在,您已經掌握了入門要領!
速度限制

關于 Twitter,您需要了解一件重要的事情,即速度限制,Twitter 非常重視這個問題。速度限制意味著 Twitter 只允許您的腳本每個小時執行有限次數的查詢。您可能已經發現,對于某些應用程序,您不需要進行顯式的認證,但是對于另外一些應用程序,認證則是必須的。對于不包含 OAuth 標記的應用程序,當前的最大限制是每小時執行 150 個調用;對于帶有該標記的應用程序,允許每小時執行 350 個調用。有關 Twitter 速率限制的最新信息,請查看 參考資源。要了解您的腳本認證的當前限制,請添加以下代碼:

puts Twitter.rate_limit_status

下面是輸出結果:

<#Hashie::Mash hourly_limit=350 remaining_hits=350 reset_time="Sat Aug 13 21:48:59 +0000 2011" reset_time_in_seconds=1313272139>

如果您希望獲得更具體的結果,請用代碼查看下面的內容:

Twitter.rate_limit.status.remaining_hits

下面的輸出禁用了認證。注意,您已經用完了可用限制的 50%:

<#Hashie::Mash hourly_limit=150 remaining_hits=77 reset_time="Sat Aug 13 21:13:50 +0000 2011" reset_time_in_seconds=1313270030>

更新 Twitter 的狀態,重新發布 tweet 和其他內容

搜索功能暫時告一段落。現在需要使用腳本更新 tweet 的狀態。只需一行代碼即可(當然,您需要在腳本中包含認證代碼):

#... authentication codeTwitter.update (ARGV [0])

將代碼保存為 update.rb,并以 ruby update.rb "Hello World from Ruby Script" 的形式從命令行調用它。現在,您的 Twitter 頁面已經實現了更新!對話功能是 Twitter 的一個自然擴展,向另一個用戶發送消息非常簡單:

#... authentication codeTwitter.direct_message_create("username", "Hi")

您可以選擇使用用戶的屏幕名或數字 ID 發送消息。Twitter 的另一個有趣特性是可以快速查看最近發送的和最近接收到的 20 條消息:

#... authentication codeTwitter.direct_messages_sent.each do | s |  puts "Sent to: " + s.recipient_screen_name puts "Text: " + s.textend

我們有時候需要強調某些 tweet 的重要性,一個好方法就是重新發布 tweet。下面顯示了重新發布的最近 20 個 tweet:

#... authentication codeTwitter.retweets_of_me.each do |rt| print rt.text puts " retweet count = " + rt.retweet_count.to_send

當然,如果能知道是誰在重新發布 tweet 就更好了,但是無法從 retweets_of_me API 直接獲取該信息。相反,您需要使用 retweeters_of API。注意,每個 tweet 都有一個唯一的 ID,而 retweeters_of 需要獲得這一 ID。清單 10 展示了相關代碼:
清單 10. 誰在向我重新發布 tweet

#... authentication codeTwitter.retweets_of_me.each do |rt| print rt.text print " retweeted by "  Twitter.retweeters_of(rt.id).each do |user| puts user.screen_name endend

用 Twitter 實現有趣的功能

您可以利用自己的腳本做許多有趣的事情。例如,假如您很關心當前 Twitter 中正在發生的事情,那么您可以獲取前十個趨勢:

Twitter.trends.each do | trend |  puts trend.nameend

twitter.com 只能報告前十個趨勢。參考 參考資源,獲得有關的更多信息。通常,您可能只關心所在地的趨勢。只需要提供所在地的 where-on-earth ID (WOEID),Twitter 就可以提供這些信息。下面我展示了如何獲得印度的當前趨勢:

Twitter.local_trends(12586534 ).each do | trend |  puts trend #local_trends returns Stringend

獲得 Twitter 推薦的用戶也很容易。首先查看以下腳本:

Twitter.suggestions("technology").users.each do | user |  puts user.screen_nameend

我對這段代碼的輸出進行了仔細檢查。前十個結果意味著這段代碼可以正常工作。Twitter 提供了不同的用戶感興趣的類別,通過調用 Twitter.suggestions(只需將 Twitter.suggestions 放在腳本里)便可獲得此信息。每個類別都有一個簡短名稱,在 Twitter 中稱為 slug,您需要將其傳遞給 Twitter.suggestions,然后便可獲得 Twitter 推薦的用戶。清單 11 展示了相關輸出。
清單 11. 技術類別中推薦的前幾名用戶

gruber
dannysullivan
AlecJRoss
timoreilly
Padmasree
tedtalks
OpenGov
twitter
BBCClick
woot
anildash
laughingsquid
digiphile
jennydeluxe
biz
ForbesTech
chadfowler
leolaporte

本文最后將介紹如何找到 Sachin Tendulkar(最棒的板球隊員)的最受歡迎的粉絲。首先,Sachin 的 ID 是 sachin_rt(在相關主題上,您可以使用 Twitter.user("sachin_rt").follower_count 查看其粉絲的數量,并使用 Twitter.user("sachin_rt").verified 確認他的狀態)。

現在,使用 Twitter.follower_ids("sachin_rt") 獲得 Sachin 粉絲的數量。默認情況下,您將獲得 5000 名用戶,這足夠支持您完成下面的工作。確保您已經閱讀 Twitter 文檔并參考了 Twitter 的 API resources for friends and followers,了解如何獲得完整的粉絲列表。下面是一個代碼示例:

#... authenticate yourselfputs Twitter.follower_ids("sachin_rt").ids.size

最后,根據 follower_count 對這 5000 名用戶中的某些用戶進行排序:

#... authenticate yourselfputs Twitter.follower_ids("sachin_rt").ids[0..49].sort!{|a, b| /  Twitter.user(a).followers_count <=> / Twitter.user(b).followers_count}.reverse.first.name

在 sort 之后,"!" 表示排序對所調用的內容修改了數組(并且沒有返回新的數組),花括號({})中的代碼是比較功能。這解釋了使用 Ruby 的另一個原因:能夠在一行代碼中實現 20 行 C++ 代碼完成的工作。

結束語

為 Twitter 編寫命令行腳本非常有趣,并且可以使您洞悉 Twitter 尚未提供的功能。此外,無論是搜索符合您的條件的特定用戶(從本地技術人員到領域中的主題專家),還是搜索令人興奮的新 tweet,都可以很方便地通過命令行來實現。在結束本文之前,我需要給出最后兩條忠告:首先,Twitter 非常在意每小時的速率限制,因此最好將搜索結果緩存到您的代碼中。其次,隨時關注 Twitter 的 REST API 資源,其中列出了您的 Twitter 客戶端的所有 API。最重要的是,盡情享受 Twitter 的樂趣!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
伊人资源视频在线| 最新中文字幕在线视频| 国产私人影院| 国产小视频免费在线观看| 国产午夜三区视频在线| 国产一级网站视频在线| 精品无人区乱码1区2区3区免费 | 国产中文字幕在线| 国产精品一区在线看| 国产老肥熟xxxx在线观看| 天堂在线免费视频| 99久久国产视频| 九色在线网站| 91免费日韩| 国产尤物视频| 国产成人精品综合网站| 老司机精品视频一区二区| 国产精品久久精品牛牛影视| www网站在线观看| 非洲黑人最猛性xxxx交| 国产对白叫床清晰在线播放| 日本不卡视频一区二区| 97国产视频| 天天操天天射天天插| 精品美女在线观看视频在线观看| 永久免费不卡在线观看黄网站| 国产专区在线| 欧美精品久久久久久久小说| 999在线视频| 国产精品国精产品一二| 国产在线资源| 麻豆精品免费视频入口| 亚洲最新永久观看在线| 国产高清一区二区三区视频| 国产麻豆视频免费观看| 狠狠干天天干| 女子免费在线观看视频www| av文字幕在线观看| 四虎成人免费| www.久草.com| 午夜在线不卡| 欧美在线中文| 国产中文字幕在线看| 欧美啪啪精品| 粉嫩av一区| 中文字幕国产在线| 最近中文字幕在线中文视频 | 人人在线视频| 日本高清中文字幕在线| 人人干人人插| 91av久久| 国产极品嫩模在线视频一区| 国产偷窥洗澡视频| 国产精品视频一区二区久久 | 国产探花在线观看| 国产日本韩国在线播放| 国产精品美女视频免费观看软件 | 狠狠操视频网站| xxxx视频在线| 国产三级av在线| 精品国内一区二区三区免费视频| av影视在线看| 日本中文字幕高清视频| 国产黄色片中文字幕| 亚洲综合在线网| 国产在线一二三区| 国产小视频在线观看| 18成年在线观看| www.操.com| 国产丝袜精品丝袜| aaa大片在线观看| 国产在线视频网站| 国产h在线观看| 开心婷婷激情五月| 91午夜在线| 国产专区在线| 亚洲一道本在线| 国产一级片在线| v天堂福利视频在线观看| 最近久乱中文字幕| www.操操| 亚洲综合激情六月婷婷在线观看| 国产一区二区三区美女秒播| 超碰97在线免费观看| 国产精品bbw一区二区三区| 日本亚洲欧美| 精品国内自产拍在线视频| 久久精品亚洲7777影院| 97视频在线观看网站| 国产乱视频在线观看播放| 四虎www视频| 在线视频观看亚洲| 91最新在线| 国产成人精品自线拍| 国产麻豆精品高清在线播放 | 天天干天天摸| 伊人网在线视频| 国产高清视频在线播放| 中文字幕视频在线观看| 国产免费电影网站入口| 精品国产免费第一区二区| 国产视频中文字幕| 国产美女在线看| 福利视频网站导航| 88av在线| 精品网站www| 四虎网站在线观看| 麻豆国产在线视频| 国产69精品久久app免费版 | 在线免费观看高清视频色| 精品入口蜜桃| 99re热视频在线| 欧美性受xxxx免费视频| jizz一区二区三区| 非洲黑人最猛性xxxx交| 91福利在线免费| 国产www在线观看| 四虎影视成人永久免费观看视频| av在线播放国产| www.夜夜操.com| 中文字幕在线视频免费观看| 国产精品入口麻豆电影| 在线免费观看你懂的| 久久久久久91精品色婷婷| 国产秀色在线www免费观看| 精品欧美日韩一区二区| www操操操| 国产日韩精品在线看| 亚洲久草视频| 综合蜜桃精品| 亚洲欧美久久婷婷爱综合一区天堂| 麻豆福利在线观看| 91美女主播在线视频| 激情综合丁香| 国产高清视频在线| 免费在线高清av| 99热免费观看| 国产极品一区二区三区| 久久av少妇| eeuss影院www在线观看| 国产视频福利| 免费三级毛片| av高清在线| 国产午夜在线| 好看的中文字幕在线播放| 在线观看的网站你懂的| 国产一区电影| 大香伊人中文字幕精品| 在线国产1区| 精品女厕厕露p撒尿| 国产一卡2卡3卡四卡网站| 黄色片大全在线观看| h网址在线观看| 一本久中文高清| 永久av在线| 在线观看精品视频一区二区三区| 久草亚洲一区| 久热中文字幕精品视频在线| 在线免费看黄网站| 在线免费观看你懂的| 国产超碰97| 精品视频在线一区二区| 2018中文字幕在线观看| 国产精品白浆视频免费观看| 国产三级自拍| 国产不卡在线| av片在线观看| yjizz视频网站在线播放| 亚洲an天堂an在线观看| 亚洲人在线播放| 久热免费在线视频| 久久久久久国产视频| 九九热在线播放| 天天操天天操天天色天天要| 中文字幕有码在线视频| 国产黄色大片在线观看| 精品麻豆一区二区三区 | 国产成人亚洲欧美电影| 96久久久久久| 免费视频中文字幕| 国内精品一区视频| 国产欧美黑人| eeuss影院在线观看| 九九热在线免费视频| 国产三级在线观看| 2019中文字幕在线视频| 亚洲精品视频区| 福利资源在线久| 91精品专区| 玖玖在线视频| 国产精品久久一区二区三区不卡| 在线亚洲不卡| 国产乱在线观看视频| 精品麻豆国产| 国产女人伦码一区二区三区不卡| 国产精品久久麻豆| 九九热视频在线观看| 精品福利视频导航大全| 国产女呦网站| 日本中文字幕在线看|