【问题标题】:How do I retrieve a status from twitter with the oauth gem directly?如何使用 oauth gem 直接从 twitter 检索状态?
【发布时间】:2013-06-08 06:25:49
【问题描述】:

如何使用OAuth gem 获取推文的 json?

我尝试了以下方法,但即使我知道我的密钥是好的,它仍然拒绝访问:

def prepare_access_token(consumer_key, consumer_secret)
   consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site => "https://api.twitter.com"})
   consumer.get_request_token.get_access_token
end

token = prepare_access_token(twitter_consumer_key, twitter_consumer_secret)
token.request(:get, "https://api.twitter.com/1.1/statuses/show/344726259449860096.json")

我知道 twitter gem,但不想依赖看似如此简单的东西。

我特别指出,以下是异常状态 401。

consumer.get_request_token.get_access_token

我做错了什么?

【问题讨论】:

标签: ruby twitter oauth


【解决方案1】:

我还没有机会对此进行测试,但the docs 有一个完全不同的显示 URL:

获取 https://api.twitter.com/1.1/statuses/show.json?id={id}

我会试试的。

【讨论】:

  • 在那之前我有点卡住了......我什至无法从请求令牌中获取访问令牌:(
  • 对不起伙计,我已经宣誓退出 Twitter API。
【解决方案2】:

我不确定您的应用程序流程是什么,但我通过 twitter 应用程序登录,这就是我所做的。 ※ 这个过程给了我用户的access_token,所以我可以访问它的数据

首先,我有一个 twitter app 对象,它要求 request_token。

# defines app's consumer
consumer = OAuth::Consumer.new(consumer_key, 
                               consumer_secret,
                               :site => 'https://api.twitter.com',
                               :authorize_path => '/oauth/authenticate',
                               :sign_in => true)
# get the request_token and pass my callback url
request_token = consumer.get_request_token({:oauth_callback => callback_url})

您需要以某种方式存储 request_token ! request_token 将为您提供 access_token 但 .get_request_token() 每次都会生成不同的请求,因此您需要保留原始请求才能最终获得您的 access_token

# setting the src of the login button
link_to 'log via twitter', request_token.authorize_url

用户登录。
在 Twitter 中,您会在 url oauth_token 和 oauth_verifier 中获得两个参数。在用户登录之前取回之前创建的 request_token,由于每次访问都会得到不同的 request_token,因此需要找到与回调响应匹配的 request_token

request_token = request_tokens.detect do |rt|
                  rt.token == oauth_token
                end
# let's get the access_token
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)

似乎 access_token 与您使用的应用程序相关联,因此您必须存储 consumer_key、consumer_secret、access_token.token 和 access_token.secret

如何获取关注者数量的示例

json_http_response = access_token.get("http://api.twitter.com/1/users/show.json?user_id=#{twitter_account_id}"))
followers_count = JSON.parse(json_http_response.body)['followers_count']

稍后,如果您想取回 access_token,您可以这样做

access_token =
  OAuth::AccessToken.from_hash(application_consumer,   # the same as the very top
                               {:oauth_token => token, # access_token.token from above
                                :oauth_token_secret => secret}))  # access_token.secret from above

【讨论】:

  • 是的,我昨天发现了很多乱七八糟的东西,我真的想避免需要那些我更喜欢dev.twitter.com/docs/auth/application-only-auth 的 auth_tokens,因为这样我们的管理员只需要添加客户端令牌。
  • 好吧,我有点卡住了,需要下降到以太看看网络中发生了什么
猜你喜欢
  • 1970-01-01
  • 2011-08-12
  • 2012-06-03
  • 2012-05-09
  • 2020-07-14
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
相关资源
最近更新 更多