Я пытаюсь получить доступ к 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: '' }
Если вам нужно больше просто спросить.
Я не уверен, почему тело пусто, так как токен-носитель возвращается правильно, и я просто делаю запрос на получение хэштега.
Почему бы не добавить encodeURIComponent ('q = # dubNations') в строку URL-адреса в вашем get вместо того, чтобы вставлять его в тело. Я просмотрел документы и не могу проверить это, но BODY по запросам обычно используется для отправки информации о POST/PUT. Не получить. – Brant