Cliente de API de Twitter para nodo
Admite tanto el resto como la API de transmisión .
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)
Cree una instancia Twit
que se pueda usar para realizar solicitudes a las API de Twitter.
Si se autentica con el contexto del usuario, config
debe ser un objeto del formulario:
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Si se autentica con el contexto de la aplicación, config
debe ser un objeto del formulario:
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
Tenga en cuenta que la Auth solo de aplicación no le permitirá realizar solicitudes a puntos finales de API que requieran un contexto de usuario, como publicar tweets. Sin embargo, los puntos finales disponibles pueden tener un límite de tasa más alto.
T.get(path, [params], callback)
Obtenga cualquiera de los puntos finales REST API.
camino
El punto final para golpear. Al especificar los valores path
, omita el'json ' al final (es decir, usar ' búsqueda/tweets ' en lugar de ' buscar/tweets.json ' ).
parámetros
(Opcional) Parámetros para la solicitud.
llamar de vuelta
function (err, data, response)
data
son los datos analizados recibidos de Twitter.response
es [http.incomingmessage] (http://nodejs.org/api/http.html# http_http_incomingmessage) recibido de Twitter. T.post(path, [params], callback)
Publique cualquiera de los puntos finales REST API. Mismo uso que T.get()
.
T.postMediaChunked(params, callback)
Función auxiliar para publicar medios a través de la API post Media/Subload (Trited). params
es un objeto que contiene una tecla file_path
. file_path
es la ruta absoluta al archivo que desea cargar.
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
También puede usar la API de Post Media/Subload a través de t.post () llamadas si desea un control más de grano fino sobre la transmisión; [Vea aquí para un ejemplo] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
Obtenga las fichas de autenticación del cliente.
T.setAuth(tokens)
Actualice los tokens de autenticación del cliente.
T.stream(path, [params])
Use esto con la API de transmisión.
camino
Transmisión de punto final para golpear. Uno de:
Para obtener una descripción de cada punto final de transmisión, consulte los documentos de la API de Twitter.
parámetros
(Opcional) Parámetros para la solicitud. Cualquier matrices pasadas en params
se convierte en cadenas separadas por comas, lo que le permite hacer solicitudes 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])
mantiene viva la conexión y devuelve un EventEmitter
.
Se emiten los siguientes eventos:
Emitido cada vez que se recibe un objeto en la transmisión. Este es un evento de atrapar todo que se puede utilizar para procesar los datos recibidos en la transmisión, en lugar de usar los eventos más específicos documentados a continuación. Nuevo en la versión 2.1.0.
stream . on ( 'message' , function ( msg ) {
//...
} )
Emitido cada vez que un estado (tweet) entra en la transmisión.
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
Emitido cada vez que un mensaje de eliminación de estado (tweet) entra en la transmisión.
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
Emitido cada vez que un mensaje de limitación entra en la transmisión.
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
Emitido cada vez que un mensaje de eliminación de ubicación entra en la transmisión.
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
Emitido cuando un mensaje de desconexión proviene de Twitter. Esto ocurre si tiene múltiples transmisiones conectadas a la API de Twitter. Al recibir un mensaje de desconexión de Twitter, Twit
cerrará la conexión y emitirá este evento con los detalles del mensaje recibidos de Twitter.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Emitido cuando se hace un intento de conexión a Twitter. Se emite el objeto request
HTTP.
stream . on ( 'connect' , function ( request ) {
//...
} )
Emitido cuando se recibe la respuesta de Twitter. Se emite el objeto response
HTTP.
stream . on ( 'connected' , function ( response ) {
//...
} )
Emitido cuando se programa un intento de reconexión a Twitter. Si Twitter tiene problemas o obtenemos una tasa limitada, programamos una reconexión de acuerdo con las pautas de reconexión de Twitter. Se emiten los últimos objetos request
y response
HTTP, junto con el tiempo (en milisegundos) que quedan antes de que ocurra la reconexión.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
Este mensaje es apropiado para los clientes que utilizan conexiones de alto ancho de banda, como la manguera de fuego. Si su conexión se está quedando atrás, Twitter pondrá en cola los mensajes para usted, hasta que su cola se llene, momento en el que lo desconectarán.
stream . on ( 'warning' , function ( warning ) {
//...
} )
Emitido cuando Twitter envía un mensaje status_withheld
en la transmisión. Esto significa que un tweet fue retenido en ciertos países.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Emitido cuando Twitter envía un mensaje user_withheld
en la transmisión. Esto significa que un usuario de Twitter fue retenido en ciertos países.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Emitido cuando Twitter envía el preámbulo ["Amigos"] (https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) cuando se conecta a una transmisión de usuario. Este mensaje contiene una lista de los amigos del usuario, representada como una variedad de ID de usuario. Si se establece el parámetro Stringify_friend_ids, el preámbulo de la lista de amigos se devolverá como cadenas (en lugar de números).
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
Emitido cuando se envía un mensaje directo al usuario. Desafortunadamente, Twitter no ha documentado este evento para transmisiones de usuario.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Emitido cuando Twitter envía un evento de transmisión de usuario. Vea los documentos de Twitter para obtener más información sobre la estructura de cada evento.
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
Además, se proporcionan los siguientes eventos de transmisión de usuario para que pueda escuchar:
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 un evento que no coincida con ninguno de los anteriores) stream . on ( 'favorite' , function ( event ) {
//...
} )
Emitido cuando se produce una solicitud de API o un error de respuesta. Se emite un objeto Error
, con propiedades:
{
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
}
Llame a esta función en la transmisión para detener la transmisión (cierra la conexión con Twitter).
Llame a esta función para reiniciar la transmisión después de llamar .stop()
en ella. Nota: No hay necesidad de llamar a .start()
para comenzar a transmitir. Twit.stream
llama .start()
para usted.
Cualquier cosa en la API de Twitter:
Vaya aquí para crear una aplicación y obtener credenciales de OAuth (si aún no lo ha hecho): https://apps.twitter.com/app/new
Puede especificar una variedad de huellas digitales de certificados de confianza si solo desea confiar en un conjunto específico de certificados. Cuando se recibe una respuesta HTTP, se verifica que el certificado se firmó y la huella digital del certificado de par debe ser uno de los valores que especificó. Por defecto, se utilizará Node.js Confied "Root" CAS.
p.ej.
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' ,
]
} )
Cree dos archivos: config1.js
y config2.js
en la raíz de la carpeta twit
. Deben contener dos conjuntos diferentes de credenciales OAuth para que TWIT use (se necesitan dos cuentas para probar interacciones). Ambos deberían verse algo así:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Luego ejecute las pruebas:
npm test
También puede ejecutar el ejemplo:
node examples/rtd2.js
El ejemplo es un bot de Twitter llamado RTD2 escrito usando twit
. RTD2 Tweets sobre GitHub y cura su gráfico social.
Preguntas frecuentes
(La licencia del MIT)
Copyright (c) Por Tolga Tezel [email protected]
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado de o en relación con el software o el uso u otros tratos en el SOFTWARE.
T.delete(...)
.parser-error
en lugar de Evento error
si Twitter envía un cuerpo de respuesta HTTP sin comprimir.new
palabra clave; var t = Twit(config)
funciona, y var t = new Twit(config)
también funciona.config.trusted_cert_fingerprints
.mime
como dependencia.friends
EMIT para el mensaje friends_str
recibido cuando se solicita una transmisión de usuario con stringify_friend_ids=true
.error
de emitir para este caso.retweeted_retweet
y eventos de usuario favorited_retweet
.T.postMediaChunked()
para que sea fácil.account/update_profile_image
y account/update_profile_background_image
rutas.quoted_tweet
message
.connected
al recibir la respuesta de Twitterstream.stop()
y stream.start()
en lugar de emitir los eventos start
y stop
disconnect
, cierra la transmisión y emite disconnect
con el mensaje de desconexión recibido de Twittertwit
actualizado para su uso con V1.1 de la API de Twitter.twit.stream()
. Ya no toma una devolución de llamada. Regresa inmediatamente con el EventEmitter
en el que puede escuchar. La sección Usage
en el readme.md se ha actualizado. Léelo.twit.stream()
tiene function (path, params, callback)