【问题标题】:Live Twitter Stream直播推特流
【发布时间】:2014-04-13 02:26:31
【问题描述】:

我正在使用 Ruby on Rails v(2.0.0/4.0.0) 编写应用程序,并尝试将来自特定来源 (@u101) 的实时 Twitter 提要集成到基本 HTML 页面上,但不明白如何.在谷歌搜索了几个小时后,我看到了一些似乎集成了 Twitter 的不同 gem(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>

我再次尝试使用“#u101”显示推文

【问题讨论】:

    标签: ruby-on-rails ruby twitter


    【解决方案1】:

    使用TwitterFetcher(JS)(无宝石)

    这是通过获取一个小部件(Twitter 完全支持该小部件)并解析出您可能不想要的任何样式/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;
        };
    });
    

    如果您想使用此方法,我可以为您提供更多帮助


    “直播”流媒体

    Twitter 的“实时”流媒体存在几个问题:

    1. 他们的1.1 API is rate-limited
    2. 您将如何存储数据?

    我想我明白了您想要实现的目标,但实际上,他们的 API 政策使得实现任何“实时”功能变得非常困难。如果您只想以自己的方式显示推文,我建议您使用小部件并使用上面提供的 JS

    【讨论】:

      【解决方案2】:

      在您使用的特定教程中,转到 app/models/tweet.rb 中的第 7 行,您将看到:

          search = Twitter::Search.new
      

      替换为

          search = Twitter::REST::Client.new
      

      这是最近对红宝石宝石的更改。您始终可以在documentation 中查看最新消息!

      【讨论】:

      • 我做了你建议的改变,它似乎解决了我的问题。当我运行应用程序并拉取网页时,我没有收到任何错误或任何东西,但我也没有得到任何结果。我只有一个标题,然后什么都没有。我在上面更新了我的控制器、index.html.erb 和模型。
      • 什么都没有发生,因为在版本 5 中已经弃用了太多的代码(即 tweet.from_user 不再存在,所以没有错误,但没有输出)。这是您应该使用的 v. 5 实验性流式传输的代码:github.com/sferik/twitter#streaming-experimental
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      相关资源
      最近更新 更多