2013-10-24 55 views
2

我使用sferiks寶石https://github.com/sferik/twitter實例化多個Twitter帳號與Ruby on Rails的嘰嘰喳喳的寶石

我想從一個循環中實例化多個帳戶。

這是我認爲會工作...

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

我在做什麼錯?

回答

1

username變量的用法只是在您的文章中的錯誤?如果沒有,您將覆蓋您的每個帳戶的嘰嘰喳喳客戶端實例,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 
+0

啊好吧!這就是你將如何使用寶石。 Thread.new {maxrosecollins.update(「test tweet」)}上面的答案是否設置了maxrosecollins = Twitter :: Client.new(etc) –

+0

err沒有。我想現在我得到你想要做的。你想要一個以你的Twitter用戶名命名的變量。相反,你用變量username填充了名字的值('username ='maxrosecollins'')。爲了獲得與名字的連接,請參閱我的編輯。 – KappaNossi

+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 
+0

好吧,這是有道理的!我編輯了這個問題來展示如何在沒有循環的情況下實例化。用戶名需要= Twitter :: Client.new() –