我有一个简单的脚本,基本上读取RSS脚本&把它推到推特上。
该脚本工作正常,除非我将它全部移动到函数并调用函数时,它不会执行。为什么会这样?
这是有效的:
require 'rubygems'
require 'simple-rss'
require 'open-uri'
require 'bitly'
require 'twitter'
def setup_bitly()
puts "Bitly setup"
bitly_username = "<user-name>"
bitly_apikey = "R_<api-key>"
Bitly.use_api_version_3
bitly = Bitly.new(bitly_username, bitly_apikey)
end
def setup_twitter()
Twitter.configure do |config|
config.consumer_key = "<key>"
config.consumer_secret = "<secret>"
config.oauth_token = "<token>"
config.oauth_token_secret = "<secret>"
twitter = Twitter::Client.new
end
end
bitly = setup_bitly()
twitter = setup_twitter()
url = "http://stackoverflow.com/feeds/tag/ruby"
puts 'Fetching and parsing feed: ' + url.to_s
rss = SimpleRSS.parse open(url)
rss.items.reverse.each_with_index do |i,idx|
u = bitly.shorten(i.link, :history => 1)
twitter_status = "#{i.title}"
puts twitter_status
twitter.update(twitter_status)
sleep 10
end
这是输出:
C:\Users\Sathya\Documents\code\read-feed>read-feed.rb
Fetching and parsing feed: http://stackoverflow.com/feeds/tag/ruby
Dynamic lists in rails 3
Ruby add dynamic events using AASM
如果我将最后一个块移动到某个函数,它就不会执行。通过“不执行”,我的意思是,Ruby解释器运行&amp;退出,没有(错误)消息,没有。为什么会这样?
这是导致问题的版本:
require 'rubygems'
require 'simple-rss'
require 'open-uri'
require 'bitly'
require 'twitter'
def setup_bitly()
puts "Bitly setup"
bitly_username = "<username>"
bitly_apikey = "<api_key>"
Bitly.use_api_version_3
bitly = Bitly.new(bitly_username, bitly_apikey)
end
def setup_twitter()
Twitter.configure do |config|
config.consumer_key = "<key>"
config.consumer_secret = "<secret>"
config.oauth_token = "<token>"
config.oauth_token_secret = "<secret>"
twitter = Twitter::Client.new
end
end
def do_work()
url = "http://stackoverflow.com/feeds/tag/ruby"
puts 'Fetching and parsing feed: ' + url.to_s
rss = SimpleRSS.parse open(url)
rss.items.reverse.each_with_index do |i,idx|
u = bitly.shorten(i.link, :history => 1)
twitter_status = "#{i.title}"
puts twitter_status
twitter.update(twitter_status)
sleep 10
end
bitly = setup_bitly()
twitter = setup_twitter()
do_work()
end
如果我运行它,脚本运行&amp;退出:
C:\Users\Sathya\Documents\code\read-feed>read-feed.rb
我在Ruby 1.9.2p290上运行Windows 7 64位
答案 0 :(得分:3)
这是完全正常的,您的函数看不到变量bitly
和twitter
。
您可以执行以下操作之一:
答案 1 :(得分:1)
你确定它安静地运行没有错误吗?代码至少存在2个问题:
您在twitter.update
中调用了do_work
,但没有在范围内调用twitter
的局部变量。同样适用于bitly
。
最后一行还有一个end
。