2011-08-24 4 views
3

Je suis actuellement en train de construire une application (Rails 3.1rc6) qui implique le filtrage des données de l'API Twitter Streaming, mais j'ai des problèmes après avoir reçu le flux.HTTP :: Parser :: Erreur avec Rails et API Twitter Streaming

J'ai essayé d'utiliser à la fois la gemme Twitter-Stream et la gemme tweetstream, mais j'ai eu le même problème avec les deux, pas tout à fait surprenant puisque tweetstream dépend de Twitter-Stream.

je peux obtenir le flux absolument fin et imprimer les informations pertinentes avec le code suivant dans un fichier tracker.rb que je comptais courir comme Daemon:

require 'rubygems' 
require 'twitter/json_stream' 
require 'json' 

EventMachine::run { 
    stream = Twitter::JSONStream.connect(
    :path => '/1/statuses/filter.json?track=rails', 
    :auth => 'user:password' 
) 

    stream.each_item do |item| 
    @result = JSON.parse(item) 
    puts @result["text"] 

    end 

#Handle Errors... 

Comme j'ai l'intention de filtrer certains mots et les stocker dans la base de données, mais dès que j'essayer de faire quoi que ce soit avec ActiveRecord j'obtiens l'erreur suivante

Tom-Liveseys-MacBook-Air:twitter_stream Tom$ ruby ./lib/daemons/tracker.rb 
String 
/Library/Ruby/Gems/1.8/gems/twitter-stream-0.1.14/lib/twitter/json_stream.rb:121:in `<<': Could not parse data entirely   (HTTP::Parser::Error) 
from /Library/Ruby/Gems/1.8/gems/twitter-stream-0.1.14/lib/twitter/json_stream.rb:121:in `receive_data' 
from /Library/Ruby/Gems/1.8/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine' 
from /Library/Ruby/Gems/1.8/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run' 
from ./lib/daemons/tracker.rb:5 

Est-ce que quelqu'un a une idée pourquoi je ne peux rien faire d'utile avec les données? J'ai vérifié que le JSON est correctement analysé et @result["text"] renvoie la chaîne correcte.

Merci,

Tom

Répondre

0

Ok, je me suis dit pourquoi je recevais l'erreur. J'essayais de saisir le tweet id comme un entier et l'insérer dans une base de données pg (sur heroku) qu'il n'a pas aimé.

L'erreur est peut-être survenue en essayant de READ cette propriété avec ce grand nombre entier. Quoi qu'il en soit, j'ai changé le type de colonne en chaîne et j'ai saisi la propriété tweet["id_str"] à la place. Fonctionne bien maintenant.