6
votes

Nodejs - analysant Twitter JSON JSON

Le serveur Nodejs 'obtient' Ce flux JSON de Twitter et l'envoie au client:

http.get({
  headers: { 'content-type': 'application/json' },
  host: 'stream.twitter.com',
  path: '/1/statuses/filter.json?track...
}, function(res) {

  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    client.each(function(e) {
      e.send(chunk);  
  });  
 });

  // does not fire
  res.on('end', function () {

  });  

...


1 commentaires

Êtes-vous sûr que concaincre les morceaux et attendre que l'événement final ne fonctionne pas? Je pense que c'est comme ça que cela devrait être fait car il ne peut pas analyser le demi-morceau reçu.


3 Réponses :


15
votes

Regardez la section intitulée réponses dans la documentation de Twitter.

L'analyse des réponses JSON de l'API en continu est simple Chaque objet est renvoyé sur sa propre ligne et se termine par un retour de chariot. Les caractèresWLINE (\ n) peuvent survenir dans des éléments d'objet (l'élément de texte d'un objet d'état, par exemple), mais les retours de chariot (\ r) ne doivent pas. P> BlockQuote>

du côté du serveur, continuez à accumuler des morceaux jusqu'à ce que vous voyiez le retour de chariot "\ r" code>. Une fois que le retour du chariot est trouvé, extrait la chaîne jusqu'au retour du chariot et cela nous donne un tweet. P> xxx pré>

Le client devient simple. Analysez simplement le message de la prise en tant que JSON dans son intégralité. P>

socket.on('message', function(data) {
    var tweet = JSON.parse(data);
});


1 commentaires

Je pense que cela devrait être Message.split ("\ r"). Foreach (fonction (Tweet)



2
votes

@Anurag i'Cant Ajouter des commentaires, mais au lieu de

if ( chunk.charCodeAt(chunk.length-2) == 13 )


1 commentaires

Merci d'avoir souligné cela. J'ai un peu changé ma mise en œuvre. Les morceaux de Twitter ne se terminent pas toujours dans une nouvelle ligne ou un retour en calèche.



0
votes

Je recommanderais de passer la réponse à un analyseur JSON. Vous pouvez utiliser ceci: https://github.com/dominictarr/jspronstroam


0 commentaires