Twitter -API -Client für Knoten
Unterstützt sowohl den Rest als auch den Streaming -API.
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)
Erstellen Sie eine Twit
-Instanz, mit der Anfragen an Twitters APIs gestellt werden können.
Wenn sich die Authentifizierung mit dem Benutzerkontext authentifiziert, sollte config
ein Objekt des Formulars sein:
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Wenn die Authentifizierung mit dem Anwendungskontext ist, sollte config
ein Objekt des Formulars sein:
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
Beachten Sie, dass Sie nur Anwendungs-Authorten nicht ermöglichen können, Anforderungen an API-Endpunkte auszuführen, die einen Benutzerkontext erfordern, z. B. Tweets. Die verfügbaren Endpunkte können jedoch eine höhere Ratengrenze haben.
T.get(path, [params], callback)
Holen Sie sich einen der Rest -API -Endpunkte.
Weg
Der Endpunkt zu treffen. Lassen Sie beim Angeben von path
die ".json" am Ende weg (dh "such/tweets" anstelle von "such/tweets.json" ).
Parameter
(Optionale) Parameter für die Anforderung.
Rückruf
function (err, data, response)
data
sind die von Twitter empfangenen analysierten Daten.response
ist die von Twitter empfangene [http.incomingMessage] (http.incomingMessage] (http://nodejs.org/api/http.html# http_http_incomingMessage). T.post(path, [params], callback)
Posten Sie einen der Rest -API -Endpunkte. Gleiche Verwendung wie T.get()
.
T.postMediaChunked(params, callback)
Helferfunktion zum Posten von Medien über die API von Post Media/Upload (Chunked). params
ist ein Objekt, das einen file_path
-Schlüssel enthält. file_path
ist der absolute Pfad zur Datei, die Sie hochladen möchten.
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
Sie können auch die Post-Media/Upload-API über T.Post () -Anrufe verwenden, wenn Sie eine feinkörnige Kontrolle über das Streaming wünschen. [Beispiel für ein Beispiel] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
Holen Sie sich die Authentifizierungs -Token des Kunden.
T.setAuth(tokens)
Aktualisieren Sie die Authentifizierungs -Token des Kunden.
T.stream(path, [params])
Verwenden Sie dies mit der Streaming -API.
Weg
Streaming -Endpunkt zum Schlagen. Einer von:
Eine Beschreibung jedes Streaming -Endpunkts finden Sie in den Twitter -API -Dokumenten.
Parameter
(Optionale) Parameter für die Anforderung. Alle in params
übergebenen Arrays werden in von Kommas getrennte Zeichenfolgen konvertiert, sodass Sie Anfragen stellen können, wie:
//
// 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])
hält die Verbindung am Leben und gibt einen EventEmitter
zurück.
Die folgenden Ereignisse werden emittiert:
Jedes Mal, wenn ein Objekt im Stream empfangen wird. Dies ist ein Catch-All-Ereignis, mit dem alle im Stream empfangenen Daten verarbeitet werden können, anstatt die nachstehend dokumentierten spezifischeren Ereignisse zu verwenden. Neu in Version 2.1.0.
stream . on ( 'message' , function ( msg ) {
//...
} )
Jedes Mal, wenn ein Status (Tweet) in den Stream kommt.
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
Jedes Mal, wenn ein Status (Tweet) Löschmeldung in den Stream kommt.
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
Jedes Mal, wenn eine Begrenzungsnachricht in den Stream kommt.
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
Jedes Mal emittiert, wenn eine Löschung mit Löschung in den Stream kommt.
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
Emittiert, wenn eine Trennmeldung von Twitter stammt. Dies geschieht, wenn mehrere Streams mit der API von Twitter verbunden sind. Nach Erhalt einer Trennnachricht von Twitter schließt Twit
die Verbindung und schließt dieses Ereignis mit den von Twitter empfangenen Nachrichtendetails aus.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Emittiert, wenn ein Verbindungsversuch an Twitter unternommen wird. Das HTTP request
wird emittiert.
stream . on ( 'connect' , function ( request ) {
//...
} )
Emittiert, wenn die Antwort von Twitter empfangen wird. Das HTTP response
wird emittiert.
stream . on ( 'connected' , function ( response ) {
//...
} )
Emittiert, wenn ein Wiederverbindungsversuch für Twitter geplant ist. Wenn Twitter Probleme hat oder wir Rate begrenzt haben, planen wir eine Wiederverbindung gemäß den Wiederverbindungsrichtlinien von Twitter. Die letzten HTTP request
und response
werden zusammen mit der Zeit (in Millisekunden), die vor der Wiederverbindung verbleiben, emittiert.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
Diese Nachricht ist für Clients geeignet, die Verbindungen mit hoher Bandbreite wie die Feuerwehr verwenden. Wenn Ihre Verbindung zurückfällt, werden Twitter Nachrichten für Sie anstellen, bis sich Ihre Warteschlange ausfüllt, und an diesem Punkt werden sie Sie trennen.
stream . on ( 'warning' , function ( warning ) {
//...
} )
Emittiert, wenn Twitter eine status_withheld
-Meldung im Stream zurücksendet. Dies bedeutet, dass in bestimmten Ländern ein Tweet zurückgehalten wurde.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Emittiert, wenn Twitter eine user_withheld
-Nachricht im Stream zurücksendet. Dies bedeutet, dass ein Twitter -Nutzer in bestimmten Ländern zurückgehalten wurde.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Emittiert, wenn Twitter die ["Friends" Preamble] (https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) sendet, wenn sie eine Verbindung zu einem Benutzerstrom herstellen. Diese Nachricht enthält eine Liste der Freunde des Benutzers, die als Array von Benutzer -IDs dargestellt wird. Wenn der Parameter Stringify_Friend_ids festgelegt ist, wird die Vorverstärker der Freunde als Zeichenfolgen (anstelle von Zahlen) zurückgegeben.
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
Emittiert, wenn eine direkte Nachricht an den Benutzer gesendet wird. Leider hat Twitter dieses Ereignis für Benutzerströme nicht dokumentiert.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Emittiert, wenn Twitter ein Benutzerstromereignis zurücksendet. Weitere Informationen zur Struktur jedes Ereignisses finden Sie in den Twitter -Dokumenten.
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
Darüber hinaus können Sie die folgenden Ereignisse des Benutzerstroms zur Verfügung stellen, an dem Sie sich anhören können:
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
(für ein Ereignis, das nicht zu dem oben genannten übereinstimmt) stream . on ( 'favorite' , function ( event ) {
//...
} )
Emittiert, wenn eine API -Anforderung oder ein Antwortfehler auftritt. Ein Error
wird mit Eigenschaften emittiert:
{
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
}
Rufen Sie diese Funktion im Stream auf, um das Streaming zu stoppen (schließt die Verbindung mit Twitter).
Call this function to restart the stream after you called .stop()
on it. HINWEIS: Es ist nicht erforderlich .start()
anzurufen, um mit dem Streaming zu beginnen. Twit.stream
ruft .start()
für Sie.
Alles in der Twitter -API:
Gehen Sie hierher, um eine App zu erstellen und OAuth -Anmeldeinformationen zu erhalten (wenn Sie es noch nicht getan haben): https://apps.twitter.com/app/new
Sie können eine Reihe von vertrauenswürdigen Zertifikat -Fingerabdrücken angeben, wenn Sie nur einen bestimmten Satz von Zertifikaten vertrauen möchten. Wenn eine HTTP -Antwort empfangen wird, wird überprüft, dass das Zertifikat unterschrieben wurde und der Fingerabdruck des Peer -Zertifikats einer der von Ihnen angegebenen Werte sein muss. Standardmäßig wird der node.js vertrauenswürdige "root" CAS verwendet.
z.B.
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' ,
]
} )
Erstellen Sie zwei Dateien: config1.js
und config2.js
am root des twit
order. Sie sollten zwei verschiedene Sätze von OAuth -Anmeldeinformationen für Twit enthalten (zwei Konten sind für die Testen von Interaktionen erforderlich). Sie sollten beide ungefähr so aussehen:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Dann führen Sie die Tests aus:
npm test
Sie können auch das Beispiel ausführen:
node examples/rtd2.js
Das Beispiel ist ein Twitter -Bot mit dem Namen RTD2, der mit twit
geschrieben wurde. RTD2 twittert über GitHub und kuratiert seine soziale Grafik.
FAQ
(Die MIT -Lizenz)
Copyright (c) von Tolga Tezel [email protected]
Die Erlaubnis wird hiermit kostenlos an eine Person erteilt, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien ("Software") erhält, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte zu verwenden, zu kopieren, zu modifizieren, zu verschmelzen, verschmelzen , veröffentlichen, vertreiben, unterlizenzieren und/oder Kopien der Software verkaufen und Personen, denen die Software dazu bereitgestellt wird, unter den folgenden Bedingungen ermöglicht:
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall haftet die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen, sei es in einer Vertragsklage, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder anderen Geschäften in der SOFTWARE.
T.delete(...)
.parser-error
anstelle von error
, wenn Twitter eine unkomprimierte HTTP-Antwortkörper zurücksendet.new
Schlüsselwort zulassen; var t = Twit(config)
funktioniert und auch var t = new Twit(config)
funktioniert.config.trusted_cert_fingerprints
.mime
als Abhängigkeit hinzufügen.friends
Ereignis für friends_str
-Nachricht, die empfangen wird, wenn ein Benutzerstrom mit stringify_friend_ids=true
angefordert wird.error
für diesen Fall.retweeted_retweet
und favorited_retweet
Benutzerereignisse.T.postMediaChunked()
hinzu, um es einfach zu machen.account/update_profile_image
und account/update_profile_background_image
-Pfade.quoted_tweet
Ereignis hinzumessage
hinzufügen.connected
Ereignis nach Erhalt der Antwort von Twitterstop
nun den Stream an, um den stream.start()
start
starten stream.stop()
disconnect
sendet, den Stream schließt und disconnect
mit der von Twitter empfangenen Trennungsnachricht ausgibttwit
für die Verwendung mit V1.1 der Twitter -API aktualisiert.twit.stream()
. Nimmt keinen Rückruf mehr. Es kehrt sofort mit dem EventEmitter
zurück, den Sie hören können. Der Usage
in der Readme.md wurde aktualisiert. Lies es.twit.stream()
hat function (path, params, callback)