我正在使用sferiks gem https://github.com/sferik/twitter
我想在循环中实例化多个帐户。
这是我认为可行的......
twitter_accounts.each do |twitter_account|
username = twitter_account['username']
token = twitter_account['oauth_token']
secret = twitter_account['oauth_token_secret']
username = Twitter::Client.new(
:oauth_token => token,
:oauth_token_secret => secret
)
end
如果我要在没有循环的情况下实例化多个帐户
erik = Twitter::Client.new(
:oauth_token => "Erik's access token",
:oauth_token_secret => "Erik's access secret"
)
john = Twitter::Client.new(
:oauth_token => "John's access token",
:oauth_token_secret => "John's access secret"
)
然后使用你要做的宝石发布
Thread.new{erik.update("test")}
Thread.new{john.update("test")}
我做错了什么?
答案 0 :(得分:1)
使用each
,代码覆盖username
,最后得到最后一个Twitter::Client
对象,并且不会保存块的返回值。
改为使用Enumerable#map
。
accounts = twitter_accounts.map do |twitter_account|
username = twitter_account['username']
token = twitter_account['oauth_token']
secret = twitter_account['oauth_token_secret']
Twitter::Client.new(
:oauth_token => token,
:oauth_token_secret => secret
)
end
答案 1 :(得分:1)
username
变量的使用是否只是您帖子中的错误?如果没有,您将覆盖每个帐户的Twitter客户端实例,username
将仅包含最后一个帐户。使用哈希值逐个存储它们。
accounts = {}
twitter_accounts.each do |twitter_account|
username = twitter_account['username']
token = twitter_account['oauth_token']
secret = twitter_account['oauth_token_secret']
accounts[username] = Twitter::Client.new(
:oauth_token => token,
:oauth_token_secret => secret
)
end
Thread.new{accounts['erik'].update('test')} # post stuff