我已经能够让用户通过 OmniAuth 使用 Twitter 登录(我遵循 Railscast #235-6 并制作了一个简单的应用程序)。现在我正在尝试显示登录用户的 Twitter 提要。谁能告诉我这是怎么做到的?如何初始化 Twitter?如何传入登录用户的用户名和密码?我是 Rails 的新手,所以如果我确切知道将代码放在哪里会很有帮助。谢谢
问问题
9532 次
2 回答
17
首先,如果 Twitter 订阅是公开的,您不需要用户凭据来获取它。看看 Twitter gem。安装 gem 后,您需要做的就是:
require 'twitter'
Twitter.user_timeline("icambron")
在 IRB 中尝试一下以开始使用。很容易,对吧?
现在,您可能想要使用您的 API 密钥,因为 Twitter 限制匿名请求,并且共享服务器可能会出现问题。在初始化程序中执行此操作:
Twitter.configure do |config|
config.consumer_key = YOUR_CONSUMER_KEY
config.consumer_secret = YOUR_CONSUMER_SECRET
config.oauth_token = YOUR_OAUTH_TOKEN
config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
end
从您的 Twitter 开发人员页面获取实际值。
最后,如果您想扩大规模,您可以使用从 OmniAuth 获得的 OAuth 凭据(不是他们的用户名和密码;您没有这些)代表用户提出请求。这将允许您每秒发出更多请求,因为它们来自不同的用户。只需使用设置为您从 OmniAuth 哈希中获得的内容的consumer_key
和字段来初始化 Twitter (请参阅此处,查看“凭据”以了解如何从 OmniAuth 中获取它们)。consumer_secret
于 2012-04-16T07:32:21.953 回答
0
类推文
BASE_URL = "http://api.twitter.com/1.1/statuses/user_timeline.json"
SCREEN_NAME = "OMGFacts"
MAX_TWEETS = 10000
CONSUMER_KEY = "PMiAyrY5cASMnmbd1tg"
CONSUMER_SECRET = "0TYRYg0hrWBsr1YZrEJvS5txfA9O9aWhkEqcRaVtoA"
class << self
def base_url
BASE_URL
end
def screen_name
SCREEN_NAME
end
def url(count = MAX_TWEETS)
params = {:screen_name => screen_name, :count => count}
[base_url, params.to_param].join('?')
end
def prepare_access_token(oauth_token, oauth_token_secret)
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET,
{ :site => "http://api.twitter.com",
:scheme => :header,
})
# now create the access token object from passed values
token_hash = { :oauth_token => oauth_token,
:oauth_token_secret => oauth_token_secret,
:open_timeout => 500000000
}
access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
return access_token
end
def get(count = MAX_TWEETS)
count = Preference.get(:2000).to_i
access_token = prepare_access_token("178394859-cJlRaiQvqVusPAPjqC2Nn7r3Uc7wWsGua7sGHzs","3T8LCZTYXzuPLGzmWX1yRnKs1JFpfJLKemoo59Piyl8")
response = JSON.parse access_token.request(:get, url).body
response[0...count]
end
end
end
于 2016-08-11T07:50:31.310 回答