【发布时间】:2014-03-27 20:19:17
【问题描述】:
我正在尝试在我的网站上显示我自己的 twitter 时间线,我创建了在控制台上运行良好的代码,但是当我尝试在我的应用程序上执行此操作时,我得到了整个响应正文,而不仅仅是推文'文本。
附:我正在尝试使用 NET::HTTP 而不是 httParty 或 twitter gem 从头开始学习。
我正在通过控制器的帮助器发出请求。
def twitter_timeline
baseurl = "https://api.twitter.com"
path = "/1.1/statuses/user_timeline.json"
query = URI.encode_www_form("screen_name" => "twitterapi", "count" => 5)
address = URI("#{baseurl}#{path}?#{query}")
request = Net::HTTP::Get.new address.request_uri
def print_tweets(tweets)
tweets.each do |tweet|
puts tweet["text"]
end
end
http = Net::HTTP.new address.host, address.port
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
consumer_key ||= OAuth::Consumer.new("SECRET", "SECRET")
access_token ||= OAuth::Token.new("SECRET","SECRET")
request.oauth! http, consumer_key, access_token
http.start
response = http.request request
tweets = nil
if response.code == '200' then
tweets = JSON.parse(response.body)
print_tweets(tweets)
end
nil
end
然后我像这样在视图上调用它:
<%= twitter_timeline %>
【问题讨论】:
-
为什么
print_tweets嵌套在twitter_timeline中?这没有任何意义。无论如何,您应该返回要从您的twitter_timeline方法中显示的格式化字符串。 不要在你的方法中使用puts。 -
@mischa 当我使用
return时,我只得到最后一条推文,而不是请求的 5 -
您必须构建一串 5 条推文,然后将其返回。现在你似乎在迭代推文,最后只返回最后一条,而忽略前四个。你必须这样做:
return tweets.map { |tweet| tweet['text'] }.join("\n\n")。然后用simple_format格式化时间线:<%= simple_format(twitter_timeline) %>。 -
这很有效,谢谢! @Mischa
标签: ruby ruby-on-rails-4 net-http