2015-03-28 3 views
1

Я использую twitter gem для проекта Rails 4.2, работающего на Ruby 2.2.1. У меня есть следующий код:Twitter Gem for Rails не вернет твиты

def fetch_aisis_writer_tweets 
    # Cache the tweets and expire after 5 minutes. 
    data = Rails.cache.fetch([:aisis_twitter_feed, Time.now.to_i/60/5], expires_in: 15.seconds){ 
     tweet_array = []; 
     tweet = twitter_client.search("#AisisWriter").take(10).each do |tweet| 
     tweet_array.push(tweet) 
     end 
    } 

    render json: data 
    end 

Что возвращает пустой массив твитов. запуск twitter_client.search("#AisisWriter").take(10) ничего не возвращает. Как всегда, если мы перейдем к твиттеру и ищем конкретный хэштег, #AisisWriter Мы можем видеть, что я действительно возвращаю множество твитов, содержащих этот хэштег.

Итак, почему приведенный выше код возвращает пустой массив твитов?

Update

Таким образом, некоторые люди ниже предложил мне использовать Streaming API. Поэтому я обновил свой код, чтобы показать новый объект данных, используя пример кода и потоковое api.

def fetch_aisis_writer_tweets 
    # Cache the tweets and expire after 5 minutes. 
    data = Rails.cache.fetch([:aisis_twitter_feed, Time.now.to_i/60/5], expires_in: 15.seconds){ 
     tweet_array = []; 

     tweet = twitter_stream.filter(track: '#AisisWriter') do |streamed_tweet| 
     tweet_array.push(streamed_tweet) 
     end 
    } 

    render json: data 
    end 

Но, увы, ничего не происходит, консоль просто показывает:

Processing by Api::Internal::TwitterController#fetch_aisis_writer_tweets as */* 

и страница просто продолжает пытаться загрузить. В конце дня мне просто нужны последние 10 твитов из этого конкретного тэга.

ответ

0

От https://dev.twitter.com/rest/public/search:

Перед вовлекаются, это важно знать, что Search API ориентирован на актуальность и не законченность. Это означает, что некоторые твиты и пользователи могут отсутствовать в результатах поиска. Если вы хотите соответствовать полноте, вам следует вместо этого использовать Streaming API.

Это могло бы объяснить, почему twitter_client.search("#AisisWriter").take(10) возвращает пустой массив.

twitter_client.search не является конечной точкой потокового API.

Предполагая, что twitter_client определяется как Twitter::Streaming::Client объекта, следующее должно работать (при условии что новые твиты с #AisisWriter:

twitter_client.filter(track: "#AisisWriter") do |object| 
    puts object.text if object.is_a?(Twitter::Tweet) 
end 
+0

Если вы внимательно посмотрите на то, что я поставил: Я создал клиент потокового который описанный здесь https://github.com/sferik/twitter/blob/master/examples/Streaming.md в этом примере. Не уверен, что использование другого драгоценного камня поможет, оно также не покажет, как выполнить результат поиска и поток результата. – TheWebs

+0

Вы используете поиск, который не является потоковой точкой конца api. Используйте фильтр. –

+0

Добавлен пример кода для потоковой передачи Api. –

Смежные вопросы