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"
)

次に、gem を使用して投稿します。

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おり、最後のアカウントのみが含まれます。ハッシュを使用して、それらを 1 つずつ格納します。

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 に答える