我正在使用Ruby on Rails v(2.0.0 / 4.0.0)编写应用程序,并尝试将来自特定来源(@ u101)的实时Twitter提要集成到基本HTML页面上,并且不要使用&#39 ;了解如何。谷歌搜索了几个小时后,我已经看到了几个不同的宝石,似乎整合了Twitter(tweetstream,twitter api,twitter),然而,我无法让这些宝石中的任何一个工作。我已按照此http://www.phyowaiwin.com/how-to-download-and-display-twitter-feeds-for-new-year-resolution-using-ruby-on-rails等指南进行操作 那一个特别给了我这个错误:
irb(main):002:0> Tweet.get_latest_new_year_resolution_tweets
NameError: uninitialized constant Twitter::Search
from C:/Sites/EasyBakeOven/blog/app/models/tweet.rb:6:in `get_latest_new
_year_resolution_tweets'
我不明白。如果有人能指导我完成我的目标或指出正确的方向,我会非常感激。
更新: 型号:tweet.rb
class Tweet < ActiveRecord::Base
#A method to grab latest tweets from Twitter
def self.get_latest_new_year_resolution_tweets
#create a Twitter Search object
search = Twitter::REST::Client.new
#grab recent 100 tweets which contain 'new year resolution' words, and loop each of them
search.containing("u101").result_type("recent").per_page(100).fetch.each do |tweet_results|
#parsing the string 'created_at' to DateTime object
twitter_created_at = DateTime.parse(tweet_results.created_at)
#making sure we are not saving exact same tweet from a person again
unless Tweet.exists?(['twitter_created_at = ? AND from_user_id_str = ?', DateTime.parse(tweet_results.created_at), tweet_results.from_user_id_str])
#finally creating the tweet record
Tweet.create!({
:from_user => tweet_results.from_user,
:from_user_id_str => tweet_results.from_user_id_str,
:profile_image_url => tweet_results.profile_image_url,
:text => tweet_results.text,
:twitter_created_at => twitter_created_at
})
end
end
end
end
tweets_controller.rb
class TweetsController < ApplicationController
def index
#Get the tweets (records) from the model Ordered by 'twitter_created_at' descending
@tweets = Tweet.order("twitter_created_at desc")
end
end
index.html.rrb:
<h1>Tweets#index</h1>
<div id="container">
<ul>
<% @tweets.each do |tweet| %>
<li class="<%=cycle('odd', '')%>">
<%= link_to tweet.from_user, "http://twitter.com/#{tweet.from_user}", :class => "username", :target => "_blank" %>
<div class="tweet_text_area">
<div class="tweet_text">
<%= tweet.text %>
</div>
<div class="tweet_created_at">
<%= time_ago_in_words tweet.twitter_created_at %> ago
</div>
</div>
</li>
<% end %>
</ul>
</div>
我再次尝试使用&#39;#u101&#39;
显示推文答案 0 :(得分:2)
使用TwitterFetcher (JS)(无宝石)
这可以通过获取一个小部件(由Twitter实时和完全支持)和&amp;解析出你可能不想要的任何样式/ HTML。我们已经无数次地实施了这个:
#app/assets/javascripts/twitterfetch.js
[[twitter fetcher JS here]]
#app/assets/javascripts/application.js
//= require twitterfetch
$(function() {
twitterFetcher.fetch('WIDGET_ID', 'twitter_feed', 3, true, true, true, '', false, handleTweets, false);
function handleTweets(tweets){
var x = tweets.length;
var n = 0;
var element = document.getElementById('twitter_feed');
var html = '<ul>';
while(n < x) {
html += '<li>' + tweets[n] + '</li>';
n++;
}
html += '</ul>';
element.innerHTML = html;
};
});
如果您想使用此方法,我可以为您提供更多帮助
<强>&#34;活&#34;流强>
&#34; live&#34;有几个问题。来自推特的流媒体:
- 他们的1.1 API is rate-limited
- 您将如何存储数据?
醇>
我认为我得到了你想要实现的目标,但实际上,他们的API政策使得很难实现任何&#34; live&#34;功能。如果您只想以自己的方式显示推文,我建议您使用小部件&amp;使用上面提供的JS
答案 1 :(得分:1)
在您使用的特定教程中,转到app / models / tweet.rb中的第7行,您将看到:
search = Twitter::Search.new
将其替换为
search = Twitter::REST::Client.new
这是最近对红宝石宝石的改变。您始终可以查看documentation中最新的内容!