Cliente da API do Twitter para Nó
Suporta o restante e a API de streaming .
npm install twit
var Twit = require ( 'twit' )
var T = new Twit ( {
consumer_key : '...' ,
consumer_secret : '...' ,
access_token : '...' ,
access_token_secret : '...' ,
timeout_ms : 60 * 1000 , // optional HTTP request timeout to apply to all requests.
strictSSL : true , // optional - requires SSL certificates to be valid.
} )
//
// tweet 'hello world!'
//
T . post ( 'statuses/update' , { status : 'hello world!' } , function ( err , data , response ) {
console . log ( data )
} )
//
// search twitter for all tweets containing the word 'banana' since July 11, 2011
//
T . get ( 'search/tweets' , { q : 'banana since:2011-07-11' , count : 100 } , function ( err , data , response ) {
console . log ( data )
} )
//
// get the list of user id's that follow @tolga_tezel
//
T . get ( 'followers/ids' , { screen_name : 'tolga_tezel' } , function ( err , data , response ) {
console . log ( data )
} )
//
// Twit has promise support; you can use the callback API,
// promise API, or both at the same time.
//
T . get ( 'account/verify_credentials' , { skip_status : true } )
. catch ( function ( err ) {
console . log ( 'caught error' , err . stack )
} )
. then ( function ( result ) {
// `result` is an Object with keys "data" and "resp".
// `data` and `resp` are the same objects as the ones passed
// to the callback.
// See https://github.com/ttezel/twit#tgetpath-params-callback
// for details.
console . log ( 'data' , result . data ) ;
} )
//
// retweet a tweet with id '343360866131001345'
//
T . post ( 'statuses/retweet/:id' , { id : '343360866131001345' } , function ( err , data , response ) {
console . log ( data )
} )
//
// destroy a tweet with id '343360866131001345'
//
T . post ( 'statuses/destroy/:id' , { id : '343360866131001345' } , function ( err , data , response ) {
console . log ( data )
} )
//
// get `funny` twitter users
//
T . get ( 'users/suggestions/:slug' , { slug : 'funny' } , function ( err , data , response ) {
console . log ( data )
} )
//
// post a tweet with media
//
var b64content = fs . readFileSync ( '/path/to/img' , { encoding : 'base64' } )
// first we must post the media to Twitter
T . post ( 'media/upload' , { media_data : b64content } , function ( err , data , response ) {
// now we can assign alt text to the media, for use by screen readers and
// other text-based presentations and interpreters
var mediaIdStr = data . media_id_string
var altText = "Small flowers in a planter on a sunny balcony, blossoming."
var meta_params = { media_id : mediaIdStr , alt_text : { text : altText } }
T . post ( 'media/metadata/create' , meta_params , function ( err , data , response ) {
if ( ! err ) {
// now we can reference the media and post a tweet (media will attach to the tweet)
var params = { status : 'loving life #nofilter' , media_ids : [ mediaIdStr ] }
T . post ( 'statuses/update' , params , function ( err , data , response ) {
console . log ( data )
} )
}
} )
} )
//
// post media via the chunked media upload API.
// You can then use POST statuses/update to post a tweet with the media attached as in the example above using `media_id_string`.
// Note: You can also do this yourself manually using T.post() calls if you want more fine-grained
// control over the streaming. Example: https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js#L20
//
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
//
// stream a sample of public statuses
//
var stream = T . stream ( 'statuses/sample' )
stream . on ( 'tweet' , function ( tweet ) {
console . log ( tweet )
} )
//
// filter the twitter public stream by the word 'mango'.
//
var stream = T . stream ( 'statuses/filter' , { track : 'mango' } )
stream . on ( 'tweet' , function ( tweet ) {
console . log ( tweet )
} )
//
// filter the public stream by the latitude/longitude bounded box of San Francisco
//
var sanFrancisco = [ '-122.75' , '36.8' , '-121.75' , '37.8' ]
var stream = T . stream ( 'statuses/filter' , { locations : sanFrancisco } )
stream . on ( 'tweet' , function ( tweet ) {
console . log ( tweet )
} )
//
// filter the public stream by english tweets containing `#apple`
//
var stream = T . stream ( 'statuses/filter' , { track : '#apple' , language : 'en' } )
stream . on ( 'tweet' , function ( tweet ) {
console . log ( tweet )
} )
var T = new Twit(config)
Crie uma instância Twit
que possa ser usada para fazer solicitações para as APIs do Twitter.
Se autenticar com o contexto do usuário, config
deve ser um objeto do formulário:
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Se autenticar com o contexto do aplicativo, config
deve ser um objeto do formulário:
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
Observe que a autenticação somente aplicativo não permitirá que você execute solicitações para os pontos de extremidade da API que requerem um contexto de usuário, como postar tweets. No entanto, os pontos de extremidade disponíveis podem ter um limite de taxa mais alto.
T.get(path, [params], callback)
Obtenha qualquer um dos pontos de extremidade da API REST.
caminho
O endpoint a ser atingido. Ao especificar os valores path
, omite o '.json' no final (ou seja, use 'pesquisa/tweets' em vez de 'pesquisa/tweets.json' ).
params
(Opcional) Parâmetros para a solicitação.
ligar de volta
function (err, data, response)
data
são os dados analisados recebidos do Twitter.response
é [http.incomingmessage] (http://nodejs.org/api/http.html# http_http_incomingmessage) recebido do Twitter. T.post(path, [params], callback)
Publique qualquer um dos pontos de extremidade da API REST. Mesmo uso que T.get()
.
T.postMediaChunked(params, callback)
Função auxiliar para pós -mídia através da API de pós -mídia/upload (rolada). params
é um objeto que contém uma chave file_path
. file_path
é o caminho absoluto para o arquivo que você deseja fazer upload.
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
Você também pode usar a API de pós-mídia/upload via T.Post () Chamadas se desejar um controle mais refinado sobre o streaming; [Veja aqui por exemplo] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
Obtenha os tokens de autenticação do cliente.
T.setAuth(tokens)
Atualize os tokens de autenticação do cliente.
T.stream(path, [params])
Use isso com a API de streaming.
caminho
Streaming terminal para acertar. Um de:
Para uma descrição de cada terminal de streaming, consulte os documentos da API do Twitter.
params
(Opcional) Parâmetros para a solicitação. Quaisquer matrizes aprovadas em params
são convertidas em seqüências de seqüências separadas por vírgula, permitindo que você faça solicitações como:
//
// I only want to see tweets about my favorite fruits
//
// same result as doing { track: 'bananas,oranges,strawberries' }
var stream = T . stream ( 'statuses/filter' , { track : [ 'bananas' , 'oranges' , 'strawberries' ] } )
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
T.stream(path, [params])
mantém a conexão viva e retorna um EventEmitter
.
Os seguintes eventos são emitidos:
Emitido cada vez que um objeto é recebido no fluxo. Este é um evento que pode ser usado para processar todos os dados recebidos no fluxo, em vez de usar os eventos mais específicos documentados abaixo. Novo na versão 2.1.0.
stream . on ( 'message' , function ( msg ) {
//...
} )
Emitido cada vez que um status (tweet) entra no fluxo.
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
Emitida cada vez que uma mensagem de exclusão de status (tweet) entra no fluxo.
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
Emitida cada vez que uma mensagem de limitação entra no fluxo.
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
Emitida cada vez que uma mensagem de exclusão de localização entra no fluxo.
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
Emitido quando uma mensagem de desconexão vem do Twitter. Isso ocorre se você tiver vários fluxos conectados à API do Twitter. Ao receber uma mensagem de desconexão do Twitter, Twit
fechará a conexão e emitirá este evento com os detalhes da mensagem recebidos do Twitter.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Emitido quando uma tentativa de conexão é feita ao Twitter. O objeto request
HTTP é emitido.
stream . on ( 'connect' , function ( request ) {
//...
} )
Emitido quando a resposta é recebida do Twitter. O objeto response
HTTP é emitido.
stream . on ( 'connected' , function ( response ) {
//...
} )
Emitido quando uma tentativa de reconexão ao Twitter está agendada. Se o Twitter estiver tendo problemas ou teremos a taxa limitada, agendamos uma reconexão de acordo com as diretrizes de reconexão do Twitter. Os últimos objetos request
e response
HTTP são emitidos, juntamente com o tempo (em milissegundos) que restam antes que a reconexão ocorra.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
Esta mensagem é apropriada para clientes que usam conexões de alta largura de banda, como a FireHose. Se sua conexão estiver ficando para trás, o Twitter fará fila para você, até que sua fila preencha, quando eles o desconectarão.
stream . on ( 'warning' , function ( warning ) {
//...
} )
Emitido quando o Twitter envia de volta uma mensagem status_withheld
no fluxo. Isso significa que um tweet foi retido em certos países.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Emitido quando o Twitter envia de volta uma mensagem user_withheld
no fluxo. Isso significa que um usuário do Twitter foi retido em certos países.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Emitido quando o Twitter envia o preâmbulo ["Friends"] (https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) ao se conectar a um fluxo de usuário. Esta mensagem contém uma lista dos amigos do usuário, representados como uma variedade de IDs de usuário. Se o parâmetro stringify_friend_ids estiver definido, a lista de amigos Preamble será devolvida como strings (em vez de números).
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
Emitido quando uma mensagem direta é enviada ao usuário. Infelizmente, o Twitter não documentou este evento para fluxos de usuário.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Emitido quando o Twitter envia de volta um evento de fluxo de usuário. Consulte os documentos do Twitter para obter mais informações sobre a estrutura de cada evento.
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
Além disso, os seguintes eventos de fluxo de usuários são fornecidos para você ouvir:
blocked
unblocked
favorite
unfavorite
follow
unfollow
mute
unmute
user_update
list_created
list_destroyed
list_updated
list_member_added
list_member_removed
list_user_subscribed
list_user_unsubscribed
quoted_tweet
retweeted_retweet
favorited_retweet
unknown_user_event
(para um evento que não corresponde a nenhum dos itens acima) stream . on ( 'favorite' , function ( event ) {
//...
} )
Emitido quando ocorre uma solicitação de API ou erro de resposta. Um objeto Error
é emitido, com propriedades:
{
message : '...' , // error message
statusCode : '...' , // statusCode from Twitter
code : '...' , // error code from Twitter
twitterReply : '...' , // raw response data from Twitter
allErrors : '...' // array of errors returned from Twitter
}
Chame essa função no fluxo para parar de transmitir (fecha a conexão com o Twitter).
Chame essa função para reiniciar o fluxo depois de ligar para .stop()
nela. Nota: Não há necessidade de ligar para .start()
para começar a transmitir. Twit.stream
Calls .start()
para você.
Qualquer coisa na API do Twitter:
Vá aqui para criar um aplicativo e obter credenciais do OAuth (se você ainda não o fez): https://apps.twitter.com/app/new
Você pode especificar uma variedade de impressões digitais de certificado confiável, se desejar confiar apenas em um conjunto específico de certificados. Quando uma resposta HTTP é recebida, é verificado que o certificado foi assinado e a impressão digital do certificado de pares deve ser um dos valores que você especificou. Por padrão, o Node.js confiava no CAS "root" será usado.
por exemplo.
var twit = new Twit ( {
consumer_key : '...' ,
consumer_secret : '...' ,
access_token : '...' ,
access_token_secret : '...' ,
trusted_cert_fingerprints : [
'66:EA:47:62:D9:B1:4F:1A:AE:89:5F:68:BA:6B:8E:BB:F8:1D:BF:8E' ,
]
} )
Crie dois arquivos: config1.js
e config2.js
na raiz da pasta twit
. Eles devem conter dois conjuntos diferentes de credenciais do OAuth para o TWIT usar (duas contas são necessárias para testar interações). Ambos deveriam parecer algo assim:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Em seguida, execute os testes:
npm test
Você também pode executar o exemplo:
node examples/rtd2.js
O exemplo é um bot Twitter chamado RTD2 escrito usando twit
. O RTD2 tweets sobre o Github e é curado seu gráfico social.
Perguntas frequentes
(A licença do MIT)
Copyright (C) Por Tolga Tezel [email protected]
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.
T.delete(...)
.parser-error
em vez do Evento error
, se o Twitter enviar de volta um corpo de resposta HTTP não compactado.new
palavra -chave; var t = Twit(config)
funciona e var t = new Twit(config)
também funciona.config.trusted_cert_fingerprints
.mime
como uma dependência.friends
for friends_str
Mensagem recebida quando um fluxo de usuário é solicitado com stringify_friend_ids=true
.error
emite para este caso.retweeted_retweet
e favorited_retweet
Eventos de usuário.T.postMediaChunked()
para facilitar.account/update_profile_image
e account/update_profile_background_image
caminhos.quoted_tweet
message
.connected
ao receber a resposta do Twitterstream.stop()
e stream.start()
em vez de emitir os eventos start
e stop
disconnect
, fecha o fluxo e emite disconnect
com a mensagem de desconexão recebida do Twittertwit
atualizado para uso com v1.1 da API do Twitter.twit.stream()
. Não leva mais um retorno de chamada. Ele retorna imediatamente com o EventEmitter
que você pode ouvir. A seção Usage
no readme.md foi atualizada. Leia.twit.stream()
tem function (path, params, callback)