2010-12-09 56 views
4

Je suis actuellement en train de jouer avec NodeJS et j'essaie d'utiliser l'API de Twitter-Search. Avec curl cela fonctionne très bien - donc il n'y a rien de mal avec mon pare-feu ou quoi que ce soit. Pourtant, je ne reçois jamais de réponse dans NodeJS.request.on ("response", [...]) ne se fait jamais virer

var sys = require("sys"), 
    http = require("http"), 
    events = require("events"); 

sys.puts("Hi there… "); 
var client = http.createClient(80, "search.twitter.com"), 
    body = "", 
    query = "foobar"; 

function getResults() { 
    sys.puts("fetching for "+query); 
    var request = client.request("GET", "/search.json?q="+query); 
    request.on("response", function(data){ 
    /* this somehow never gets fired :(*/ 
    sys.puts("BODY:"+ data); 
    }); 
} 

var interval = setInterval(getResults, 5000); 

Et le URL is also working.

Toutes les astuces ou solutions sont les bienvenues!

Merci d'avance.

Répondre

8

Vous jamais envoyer la demande.

Vous devez utiliser request.end()

REMARQUE: la demande est incomplète. Cette méthode envoie uniquement l'en-tête de la requête. Il faut appeler request.end() pour finaliser la requête et récupérer la réponse. (Cela semble compliqué, mais il offre une chance pour l'utilisateur de diffuser un corps au serveur avec request.write().)

également le paramètre de l'événement response est le response objectPAS le corps. Vous devez définir l'événement data sur le response object, puis écouter l'événement end pour vous assurer que vous avez toutes les données.

request.on('response', function (response) { 
    var body = ''; 
    response.on('data', function (chunk) { 
    body += chunk; 
    }); 
    response.on('end', function() { 
    console.log('BODY: ' + body); 
    }); 
}); 
request.end(); // start the request 

Voir: http://nodejs.org/api/http.html#http_class_http_clientrequest

quelques conseils

  1. Vous pouvez utiliser querystring.escape pour urlencode votre paramètre de recherche
  2. Vous devez également définir l'en-tête Host, sinon Twitter renverra un 404

Code fixe:

var querystring = require('querystring'); 
... 
var request = client.request("GET", "/search.json?q=" + querystring.escape(query), {'Host': 'search.twitter.com'}); 
+0

, monsieur, sont mon héros personnel pour la journée. Merci! :) –