2

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

我究竟做错了什么?

4

2 回答 2

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
于 2013-10-24T12:57:39.680 回答
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
于 2013-10-24T13:00:07.027 回答