Twitter API:使用Oauth和ruby gem不断获得401状态(Timestamp Out of bounds)

时间:2013-06-17 23:56:42

标签: ruby twitter oauth gem

我是ruby的新手,并尝试使用Twitters API。我从twitter开发站点获取了密钥,并将其权限设置为“读取,写入和访问直接消息”。然后我尝试使用codecademy上的一些代码来检索状态代码,但得到 401错误(用X替换了键)。奇怪的是,codecademy中的这段代码检索了200个状态代码,所以我的想法就是我的计算机中的东西:

require 'rubygems'
require 'oauth'

    consumer_key = OAuth::Consumer.new(
        "X",
        "X")
    access_token = OAuth::Token.new(
        "X",
        "X")

    # All requests will be sent to this server.
    baseurl = "https://api.twitter.com"

    # The verify credentials endpoint returns a 200 status if
    # the request is signed correctly.
    address = URI("#{baseurl}/1.1/account/verify_credentials.json")

    # Set up Net::HTTP to use SSL, which is required by Twitter.
    http = Net::HTTP.new address.host, address.port
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER

我也尝试过使用twitters gem(当然要添加所需的键),这次我得到以下错误时间戳出界(Twitter ::错误::未经授权)

require 'rubygems'
require '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.update("I'm tweeting with @gem!")

我正在运行ruby 1.9.3p429。

任何帮助都不仅仅是值得赞赏的。

3 个答案:

答案 0 :(得分:0)

我一直有同样的问题,看看oauth docs,我发现了以下内容:

Make a regular GET request using AccessToken:
@response = @token.get('/people')
@response = @token.get('/people', { 'Accept'=>'application/xml' })

如果您感到好奇,可以在此处找到更多详细信息:http://oauth.rubyforge.org/rdoc/classes/OAuth/AccessToken.html

无论如何这是我的代码:

def prepare_access_token()

  @opts = {
    'oauth_token' => 'TOKEN',
    'oauth_token_secret' => 'TOKEN_SECRET',
    'api_key' => 'API_KEY',
    'api_secret' => 'API_SECRET'
  }

  consumer = OAuth::Consumer.new("#{@opts['api_key']}", "#{@opts['api_secret']}",
                               { :site => "http://api.twitter.com",
                                 :scheme => :header
                               })
  # now create the access token object from passed values
  token_hash = { :oauth_token => "#{@opts['oauth_token']}",
               :oauth_token_secret => "#{@opts['oauth_token_secret']}"
  }
  access_token = OAuth::AccessToken.from_hash(consumer, token_hash )
  return access_token

end

#here is your url
call_url = "https://api.twitter.com/1.1/statuses/home_timeline.json"
uri = URI.encode(call_url)
# Exchange our oauth_token and oauth_token secret for the AccessToken instance.
access_token = prepare_access_token()
# use the access token as an agent to get the home timeline
response = access_token.get(uri)

这对我有用。如果您有任何反馈意见,请随时分享:)

答案 1 :(得分:0)

我昨天遇到了同样的问题,因为几天前。发生的事情是我在海外生活了一段时间,我将我的区域设置为区域X,但手动将我的时钟更改为当前的时钟。一旦我设置了当前区域并与互联网时区同步,错误就消失了。

答案 2 :(得分:0)

我有同样的问题(401)我通过在twitter中进入应用程序并重新生成消费者密钥和消费者密钥来解决它,这很容易,因为有一个按钮来执行它,使用新值停止我的401错误。希望这有助于某人。