2016-06-20 5 views
0

Я пытаюсь получить доступ к twitter api, чтобы получить сообщения из хэштега. Я выполнил шаги для проверки подлинности только для приложений. Шаг 2 - получить токен-носитель, который я могу сделать. Однако после этого шага, когда я отправляю запрос на получение, чтобы получить твиты, я получаю пустое тело.Twitter api возвращает пустое тело с node.js

В следующем коде я сам опустил ключ API.

var express = require('express'); 
    var bodyParser = require('body-parser'); 

    //var sendNotification = require('./utils/sendNotification.js'); 
    var request = require('request'); 
    var app = express(); 

    app.use(bodyParser.urlencoded({ 
      extended: true 
    })); 
    app.use(bodyParser.json()); 



    function getTweets(){ 
     request.post({ 
       headers: {'content-type' : 'application/x-www-form-urlencoded',"Authorization": 'Basic WmR5Tk9tMHJQUlV3VVlwZm1iRDR3eTRCeTpFdVRoZ2FPSEZpNDJsM0h6azlYWjJwaWNCaFA2SFh0RnBDdkNycDN2Zk1zM29TV2NGYw=='}, 
       url:  'https://api.twitter.com/oauth2/token', 
       body: 'grant_type=client_credentials' 
     }, function(error, response, body){ 
       var token =JSON.parse(body)['access_token']; 
       console.log("Bearer "+ token); 
       request.get({ 
         headers: {'Authorization':'Bearer ' + JSON.stringify(token)}, 
         url: 'https://api.twitter.com/1.1/search/tweets.json?', 
         body: encodeURIComponent('q=#dubNations') 
       },function(e,r,b){ 
        console.log(r) 
        console.log(b) 
       }); 
     }); 

    } 

Часть выхода (ответ) является:

 ClientRequest { 
    domain: null, 
    _events: [Object], 
    _eventsCount: 5, 
    _maxListeners: undefined, 
    output: [], 
    outputEncodings: [], 
    outputCallbacks: [], 
    outputSize: 0, 
    writable: true, 
    _last: true, 
    chunkedEncoding: false, 
    shouldKeepAlive: false, 
    useChunkedEncodingByDefault: false, 
    sendDate: false, 
    _removedHeader: [Object], 
    _contentLength: null, 
    _hasBody: true, 
    _trailer: '', 
    finished: true, 
    _headerSent: true, 
    socket: [Object], 
    connection: [Object], 
    _header: 'GET /1.1/search/tweets.json? HTTP/1.1\r\nAuthorization: Bearer "AAAAAAAAAAAAAAAAAAAAAMzZvgAAAAAATAmG%2Fj8Hnx3oqys3DqfsfbuSuIU%3DVUfy6IOBmx5QPrvhHybuLSHcG8fE8sO27r1MjX1YZ2Ar4ynwHz"\r\nhost: api.twitter.com\r\ncontent-length: 17\r\nConnection: close\r\n\r\n', 
    _headers: [Object], 
    _headerNames: [Object], 
    _onPendingData: null, 
    agent: [Object], 
    socketPath: undefined, 
    method: 'GET', 
    path: '/1.1/search/tweets.json?', 
    _ended: true, 
    parser: null, 
    res: [Circular] }, 
ntick: true, 
response: [Circular], 
originalHost: 'api.twitter.com', 
originalHostHeaderName: 'host', 
responseContent: [Circular], 
_ended: true, 
_callbackCalled: true }, 
toJSON: [Function: responseToJSON], 
caseless: 
    Caseless { 
    dict: 
    { connection: 'close', 
     'content-length': '0', 
    date: 'Mon, 20 Jun 2016 02:22:03 GMT', 
    server: 'tsa_a', 
    'x-connection-hash': '6cd802f0e295a3ad66ee45459323b83c' } }, 
read: [Function], 
body: '' } 

Если вам нужно больше просто спросить.

Я не уверен, почему тело пусто, так как токен-носитель возвращается правильно, и я просто делаю запрос на получение хэштега.

+0

Почему бы не добавить encodeURIComponent ('q = # dubNations') в строку URL-адреса в вашем get вместо того, чтобы вставлять его в тело. Я просмотрел документы и не могу проверить это, но BODY по запросам обычно используется для отправки информации о POST/PUT. Не получить. – Brant

ответ

0

Ваш синтаксис запроса GET неверен (как указано в @Brant). Вы должны использовать qs свойство:

request.get({ 
    headers: {'Authorization':'Bearer ' + JSON.stringify(token)}, 
    url: 'https://api.twitter.com/1.1/search/tweets.json?', 
    json: true, 
    qs: { 
     q: '#dubNations' 
    } 
},function(e,r,b){ 
    console.log(r) 
    console.log(b) 
}); 

Я также добавил json: true собственность, как это сказать, запрос для разбора ответ как JSON и возвращает его в параметре b.

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