Client de l'API Twitter pour nœud
Prend en charge l'API REST et 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)
Créez une instance Twit
qui peut être utilisée pour faire des demandes aux API de Twitter.
Si vous authentifiez avec le contexte de l'utilisateur, config
doit être un objet du formulaire:
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Si vous authentifiez le contexte de l'application, config
doit être un objet du formulaire:
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
Notez que l'application uniquement ne vous permettra pas d'effectuer des demandes aux points de terminaison de l'API nécessitant un contexte utilisateur, tel que la publication de tweets. Cependant, les points de terminaison disponibles peuvent avoir une limite de taux plus élevée.
T.get(path, [params], callback)
Obtenez l'un des points de terminaison de l'API REST.
chemin
Le point de terminaison à frapper. Lorsque vous spécifiez des valeurs path
, omettez le «.json» à la fin (c'est-à-dire utiliser «search / tweets» au lieu de «search / tweets.json» ).
paramètres
(Facultatifs) Paramètres pour la demande.
rappel
function (err, data, response)
data
sont les données analysées reçues de Twitter.response
est la [http.incomingMessage] (http://nodejs.org/api/http.httml# http_http_incomingMessage) reçu de Twitter. T.post(path, [params], callback)
Publiez l'un des points de terminaison de l'API REST. Même utilisation que T.get()
.
T.postMediaChunked(params, callback)
Fonction d'assistance pour publier des médias via l'API Post Media / Téléchargement (Chunked). params
est un objet contenant une touche file_path
. file_path
est le chemin d'accès absolu du fichier que vous souhaitez télécharger.
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
Vous pouvez également utiliser l'API Post Media / Téléchargez via des appels t.post () si vous voulez un contrôle plus fin sur le streaming; [Voir ici pour un exemple] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
Obtenez les jetons d'authentification du client.
T.setAuth(tokens)
Mettez à jour les jetons d'authentification du client.
T.stream(path, [params])
Utilisez-le avec l'API de streaming.
chemin
Streaming Endpoint à frapper. Un des:
Pour une description de chaque point de terminaison en streaming, consultez les documents API Twitter.
paramètres
(Facultatifs) Paramètres pour la demande. Tous les tableaux passés dans params
sont convertis en chaînes séparées par des virgules, vous permettant de faire des demandes comme:
//
// 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])
maintient la connexion vivante et renvoie un EventEmitter
.
Les événements suivants sont émis:
Émis chaque fois qu'un objet est reçu dans le flux. Il s'agit d'un événement fourre-tout qui peut être utilisé pour traiter toutes les données reçues dans le flux, plutôt que d'utiliser les événements plus spécifiques documentés ci-dessous. Nouveau dans la version 2.1.0.
stream . on ( 'message' , function ( msg ) {
//...
} )
Émis chaque fois qu'un statut (tweet) entre dans le flux.
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
Émis chaque fois qu'un message de suppression de statut (tweet) entre dans le flux.
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
Émis chaque fois qu'un message de limitation entre dans le flux.
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
Émis chaque fois qu'un message de suppression de l'emplacement entre dans le flux.
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
Émis lorsqu'un message déconnecté vient de Twitter. Cela se produit si vous avez plusieurs flux connectés à l'API de Twitter. En recevant un message de déconnexion de Twitter, Twit
fermera la connexion et émettra cet événement avec les détails du message reçus de Twitter.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Émis lorsqu'une tentative de connexion est faite sur Twitter. L'objet request
HTTP est émis.
stream . on ( 'connect' , function ( request ) {
//...
} )
Émis lorsque la réponse est reçue de Twitter. L'objet response
HTTP est émis.
stream . on ( 'connected' , function ( response ) {
//...
} )
Émis lorsqu'une tentative de reconnexion vers Twitter est prévue. Si Twitter a des problèmes ou si nous obtenons un taux limité, nous planifions une reconnexion en fonction des directives de reconnexion de Twitter. Les derniers objets request
et response
HTTP sont émis, ainsi que le temps (en millisecondes) laissé avant que la reconnexion ne se produise.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
Ce message convient aux clients utilisant des connexions à largeur de bande haute, comme le Firehose. Si votre connexion prend du retard, Twitter mettra en file d'attente des messages pour vous, jusqu'à ce que votre file d'attente se remplit, à quel point ils vous déconnecteront.
stream . on ( 'warning' , function ( warning ) {
//...
} )
Émis lorsque Twitter renvoie un message status_withheld
dans le flux. Cela signifie qu'un tweet a été retenu dans certains pays.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Émis lorsque Twitter renvoie un message user_withheld
dans le flux. Cela signifie qu'un utilisateur de Twitter a été retenu dans certains pays.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Émis lorsque Twitter envoie le préambule ["amis"] (https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) lors de la connexion à un flux d'utilisateur. Ce message contient une liste des amis de l'utilisateur, représenté comme un tableau d'ID utilisateur. Si le paramètre Stringify_Friend_IDS est défini, le préambule de liste des amis sera renvoyé sous forme de chaînes (au lieu des nombres).
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
Émis lorsqu'un message direct est envoyé à l'utilisateur. Malheureusement, Twitter n'a pas documenté cet événement pour les flux d'utilisateurs.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Émis lorsque Twitter renvoie un événement de flux d'utilisateurs. Voir les documents Twitter pour plus d'informations sur la structure de chaque événement.
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
De plus, les événements de flux d'utilisateurs suivants sont fournis pour que vous puissiez écouter:
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
(pour un événement qui ne correspond à aucun des éléments ci-dessus) stream . on ( 'favorite' , function ( event ) {
//...
} )
Émis lorsqu'une demande API ou une erreur de réponse se produit. Un objet Error
est émis, avec des propriétés:
{
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
}
Appelez cette fonction sur le flux pour arrêter le streaming (ferme la connexion avec Twitter).
Appelez cette fonction pour redémarrer le flux après avoir appelé .stop()
dessus. Remarque: il n'est pas nécessaire d'appeler .start()
pour commencer le streaming. Twit.stream
appelle .start()
pour vous.
Tout dans l'API Twitter:
Allez ici pour créer une application et obtenir des informations d'identification OAuth (si vous ne l'avez pas déjà fait): https://apps.twitter.com/app/new
Vous pouvez spécifier un tableau d'empreintes digitales de certificat de confiance si vous souhaitez faire confiance à un ensemble spécifique de certificats. Lorsqu'une réponse HTTP est reçue, il est vérifié que le certificat a été signé et que l'empreinte digitale du certificat de pairs doit être l'une des valeurs que vous avez spécifiées. Par défaut, le CAS "Root" de confiance Node.js sera utilisé.
par exemple, par exemple
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' ,
]
} )
Créez deux fichiers: config1.js
et config2.js
à la racine du dossier twit
. Ils doivent contenir deux ensembles différents d'identification OAuth à TWIT à utiliser (deux comptes sont nécessaires pour tester les interactions). Ils devraient tous les deux ressembler à ceci:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Ensuite, exécutez les tests:
npm test
Vous pouvez également exécuter l'exemple:
node examples/rtd2.js
L'exemple est un bot Twitter nommé RTD2 écrit à l'aide de twit
. RTD2 tweete sur GitHub et organise son graphique social.
FAQ
(La licence MIT)
Copyright (c) par Tolga Tezel [email protected]
L'autorisation est accordée gratuitement par la présente à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copier, de modifier, de fusionner , publier, distribuer, sous-licencier et / ou vendre des copies du logiciel, et pour permettre aux personnes à qui le logiciel est fourni pour le faire, sous réserve des conditions suivantes:
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation sont inclus dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les titulaires de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres transactions dans le LOGICIEL.
T.delete(...)
.parser-error
au lieu d'un événement error
si Twitter renvoie un corps de réponse HTTP non compressé.new
mot-clé; var t = Twit(config)
fonctionne, et var t = new Twit(config)
fonctionne également.config.trusted_cert_fingerprints
.mime
comme dépendance.friends
Event pour friends_str
Message reçu lorsqu'un flux d'utilisateur est demandé avec stringify_friend_ids=true
.error
pour ce cas.retweeted_retweet
et favorited_retweet
.T.postMediaChunked()
pour le rendre facile.account/update_profile_image
et account/update_profile_background_image
paths.quoted_tweet
message
.connected
lors de la réception de la réponse de Twitterstream.stop()
et stream.start()
au lieu d'émettre les événements start
et stop
disconnect
, ferme le flux et émet disconnect
avec le message déconnecté reçu de Twittertwit
POUR UTILISATION AVEC V1.1 de l'API Twitter.twit.stream()
. Ne prend plus de rappel. Il revient immédiatement avec l' EventEmitter
sur lequel vous pouvez écouter. La section Usage
de Readme.md a été mise à jour. Lisez-le.twit.stream()
a function (path, params, callback)