我用机械化编写了一个工作 ruby 脚本来获取我的
- 堆栈溢出声誉和徽章
- 推特推文和关注者
并将输出打印到屏幕。
我首先在终端上运行此命令:
/Users/cyclotrojan/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /Users/cyclotrojan/Desktop/Snippets/get_so_reputation_and_tw_followers.rb
输出在终端上正确显示如下:
StackOverflow :
Reputation is : 406
Total Badges : 10
Twitter :
Tweets : 1,494
Followers : 137
现在,我希望使用GeekTools在桌面上显示脚本的输出,并将刷新时间设置为30分钟,因此它会一遍又一遍地运行脚本,从而更新我的统计信息。但是,当我将相同的命令粘贴到极客工具外壳上时,没有输出。
这是脚本:
文件 get_so_reputation_and_tw_followers.rb
require 'mechanize'
def get_stackoverflow_data
url_so = 'https://stackoverflow.com/users/898346/cyclotrojan'
begin
so_page = Mechanize.new.get(url_so)
so_reputation = so_page.link_with(:href => "/users/898346/cyclotrojan?tab=reputation").to_s
so_badges = so_page.search(".badgecount").first
print "StackOverflow :" + "n"
print " Reputation is : " + so_reputation + "n"
print " Total Badges : " + so_badges + "n"
rescue
print "StackOverflow :" + "n"
print "tReputation is : " + "NA" + "n"
print "tTotal Badges : " + "NA" + "n"
end
end
def get_twitter_data
url_tw = 'https://twitter.com/cyclotrojan'
begin
tw_page = Mechanize.new.get(url_tw)
tw_tweets = tw_page.link_with( :href => "/" + url_tw.split("/").last).to_s.split(" ").first
tw_followers = tw_page.link_with( :href => "/#!/" + url_tw.split("/").last + "/followers").to_s.split(" ").first
print "Twitter :" + "n"
print "tTweets : " + tw_tweets + "n"
print "tFollowers : " + tw_followers + "n"
rescue
print "Twitter :" + "n"
print "tTweets : " + "NA" + "n"
print "tFollowers : " + "NA" + "n"
end
end # end function
get_stackoverflow_data()
get_twitter_data()
但是,输出根本不显示在我的桌面上。我知道问题不在于检测红宝石,因为我使用另一个文件 test.rb 对其进行了测试。
文件测试.rb
puts "hello"
此命令将适用于GeekTool shell并正确显示hello:
/Users/cyclotrojan/.rvm/rubies/ruby-1.9.2-p290/bin/ruby /Users/cyclotrojan/Desktop/Snippets/test.rb;
极客工具外壳上的输出:你好
我做了一些调试,发现如果我删除该行需要"机械化"然后脚本正常运行,并且由于异常,将显示以下输出:
StackOverflow :
Reputation is : NA
Total Badges : NA
Twitter :
Tweets : NA
Followers : NA
所以问题在于在脚本中包含机械化。请帮助我解决这个问题。哗啦啦!
这些问题没有帮助:如何在Geektool中运行Ruby脚本?,Ruby, Mac, Geektool 问题, 文件访问权限?
如果您没有尝试挽救错误,您将能够判断。看起来我们的老朋友ssl验证错误,所以试试这个:
@agent = Mechanize.new
@agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
tw_page = @agent.get url_tw
我应该补充一点,你可能想确保你了解OpenSSL::SSL::VERIFY_NONE
的后果。这里还有一个提示:
tweets = tw_page.at('a[@data-element-term="tweet_stats"] strong').text rescue 'N/A'
followers = tw_page.at('a[@data-element-term="follower_stats"] strong').text rescue 'N/A'
puts "Twitter :" + "n"
puts "tTweets : #{tweets}"
puts "tFollowers : #{followers}"