繁体   English   中英

使用Ruby提取推文将返回“ open_http”:400错误请求(OpenURI :: HTTPError)

[英]fetching tweets with Ruby returns `open_http': 400 Bad Request (OpenURI::HTTPError)

我是Ruby的新手。 我已经开始阅读Bastards Book Ruby的第一章,即推文获取,但是本教程使用Twitter API v1。 我得到的回复告诉我使用v1.1。 因此,我遵循了教程并编写了一个程序:

require 'oauth'

def prepare_access_token(oauth_token, oauth_token_secret)
    consumer = OAuth::Consumer.new("apiKey", "APISecret", { :site => "https://api.twitter.com", :scheme => :header })

    token_hash = { :oauth_token => oauth_token, :oauth_token_secret => oauth_token_secret }
    access_token = OAuth::AccessToken.from_hash(consumer, token_hash )

    return access_token
end

access_token = prepare_access_token("AccessToken", "AccessTokenSecret")

response = access_token.request(:get, "https://api.twitter.com/1.1/statuses/home_timeline.json")
puts response 

输出: #<Net::HTTPOK:0x007fb7eb0885b8>

如果我运行程序直到这里。 运行正常。 但是,如果我添加以下内容以获取推文并写入文件。 我收到错误

twitter_user = "iAbhimanyuAryan"
remote_base_url = "https://api.twitter.com/1.1/statuses/user_timeline.json?count=100&screen_name="

remote_full_url = remote_base_url + twitter_user

tweets = open(remote_full_url).read

my_local_filename = twitter_user + "-tweets.json"

my_local_file = open(my_local_filename, "w")
      my_local_file.write(tweets)

my_local_file.close    

错误:

❯ ruby twitter.rb
#<Net::HTTPOK:0x007fbbfc9d75c8>
/Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:358:in `open_http': 400 Bad Request (OpenURI::HTTPError)
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:736:in `buffer_open'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:211:in `block in open_loop'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:209:in `catch'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:209:in `open_loop'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:150:in `open_uri'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:716:in `open'
    from /Users/abhimanyuaryan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/open-uri.rb:34:in `open'
    from twitter.rb:27:in `<main>'

查看Twitter API手册页 ,此请求需要身份验证。

您将需要使用AccessToken对象发出请求。 像这样:

# response is a [Net::HTTPResponse][3]
response = access_token.get(remote_full_url)

# Get the entire body of the response
tweets = response.body

注意,这是一种非常基本的方法。 如果要将此类代码投入生产,则应添加适当的检查和错误处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM