使用Ruby on Rails twitter gem实例化多个Twitter帐户

时间:2013-10-24 12:54:42

标签: ruby-on-rails ruby twitter twitter-gem

我正在使用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")}

我做错了什么?

2 个答案:

答案 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