Klien API Twitter untuk Node
Mendukung sisanya dan 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)
Buat instance Twit
yang dapat digunakan untuk membuat permintaan ke API Twitter.
Jika mengautentikasi dengan konteks pengguna, config
harus menjadi objek formulir:
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Jika mengautentikasi dengan konteks aplikasi, config
harus menjadi objek formulir:
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
Perhatikan bahwa Auth hanya aplikasi tidak akan mengizinkan Anda untuk melakukan permintaan ke titik akhir API yang membutuhkan konteks pengguna, seperti memposting tweet. Namun, titik akhir yang tersedia dapat memiliki batas tarif yang lebih tinggi.
T.get(path, [params], callback)
Dapatkan titik akhir API lainnya.
jalur
Titik akhir untuk dipukul. Saat menentukan nilai path
, hilangkan '.json' di akhir (yaitu menggunakan 'pencarian/tweet' alih -alih 'pencarian/tweets.json' ).
params
(Opsional) Parameter untuk permintaan.
panggilan balik
function (err, data, response)
data
adalah data parsed yang diterima dari Twitter.response
adalah [http.incomingmessage] (http://nodejs.org/api/http.html# http_http_incomingmessage) diterima dari Twitter. T.post(path, [params], callback)
Posting salah satu titik akhir API REST. Penggunaan yang sama seperti T.get()
.
T.postMediaChunked(params, callback)
Fungsi helper untuk memposting media melalui post media/unggah (chunked) API. params
adalah objek yang berisi kunci file_path
. file_path
adalah jalur absolut ke file yang ingin Anda unggah.
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
Anda juga dapat menggunakan Posting Media/Unggah API melalui panggilan T.Post () jika Anda ingin lebih banyak kontrol berbutir halus atas streaming; [Lihat di sini untuk contoh] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
Dapatkan token otentikasi klien.
T.setAuth(tokens)
Perbarui token otentikasi klien.
T.stream(path, [params])
Gunakan ini dengan API streaming.
jalur
Streaming titik akhir untuk dipukul. Salah satu:
Untuk deskripsi setiap titik akhir streaming, lihat dokumen API Twitter.
params
(Opsional) Parameter untuk permintaan. Array apa pun yang dilewati dalam params
dikonversi ke string yang dipisahkan koma, memungkinkan Anda untuk melakukan permintaan seperti:
//
// 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])
menjaga koneksi tetap hidup, dan mengembalikan EventEmitter
.
Peristiwa berikut dipancarkan:
Dipancarkan setiap kali objek diterima di aliran. Ini adalah acara tangkapan-semua yang dapat digunakan untuk memproses data apa pun yang diterima di aliran, daripada menggunakan peristiwa yang lebih spesifik yang didokumentasikan di bawah ini. Baru dalam versi 2.1.0.
stream . on ( 'message' , function ( msg ) {
//...
} )
Dipancarkan setiap kali status (tweet) masuk ke aliran.
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
Dipancarkan setiap kali pesan penghapusan status (tweet) masuk ke aliran.
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
Dipancarkan setiap kali pesan pembatasan masuk ke aliran.
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
Dipancarkan setiap kali pesan penghapusan lokasi masuk ke aliran.
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
Dipancarkan ketika pesan pemutusan berasal dari Twitter. Ini terjadi jika Anda memiliki beberapa aliran yang terhubung ke API Twitter. Setelah menerima pesan pemutusan dari Twitter, Twit
akan menutup koneksi dan memancarkan acara ini dengan detail pesan yang diterima dari Twitter.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Dipancarkan ketika upaya koneksi dilakukan ke Twitter. Objek request
HTTP dipancarkan.
stream . on ( 'connect' , function ( request ) {
//...
} )
Dipancarkan saat respons diterima dari Twitter. Objek response
HTTP dipancarkan.
stream . on ( 'connected' , function ( response ) {
//...
} )
Dipancarkan ketika upaya penyambungan kembali ke Twitter dijadwalkan. Jika Twitter mengalami masalah atau kami mendapatkan tarif terbatas, kami menjadwalkan koneksi kembali sesuai dengan pedoman koneksi ulang Twitter. Objek request
dan response
HTTP terakhir dipancarkan, bersama dengan waktu (dalam milidetik) yang tersisa sebelum koneksi kembali terjadi.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
Pesan ini sesuai untuk klien yang menggunakan koneksi bandwidth tinggi, seperti firehose. Jika koneksi Anda tertinggal, Twitter akan mengantri pesan untuk Anda, sampai antrian Anda terisi, pada titik mana mereka akan memutuskan Anda.
stream . on ( 'warning' , function ( warning ) {
//...
} )
Dipancarkan ketika Twitter mengirimkan kembali pesan status_withheld
di aliran. Ini berarti bahwa tweet ditahan di negara -negara tertentu.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Dipancarkan saat Twitter mengirimkan kembali pesan user_withheld
di aliran. Ini berarti bahwa pengguna Twitter dirahasiakan di negara -negara tertentu.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Dipancarkan ketika Twitter mengirimkan ["preamble" "preamble] (https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) Saat terhubung ke aliran pengguna. Pesan ini berisi daftar teman pengguna, diwakili sebagai berbagai ID pengguna. Jika parameter stringify_friend_ids diatur, pembukaan daftar teman akan dikembalikan sebagai string (bukan angka).
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
Dipancarkan saat pesan langsung dikirim ke pengguna. Sayangnya, Twitter belum mendokumentasikan acara ini untuk aliran pengguna.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Dipancarkan saat Twitter mengirim kembali acara aliran pengguna. Lihat dokumen Twitter untuk informasi lebih lanjut tentang struktur setiap acara.
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
Selain itu, acara aliran pengguna berikut disediakan untuk Anda dengarkan:
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
(untuk acara yang tidak cocok dengan salah satu di atas) stream . on ( 'favorite' , function ( event ) {
//...
} )
Dipancarkan ketika permintaan API atau kesalahan respons terjadi. Objek Error
dipancarkan, dengan properti:
{
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
}
Panggil fungsi ini pada aliran untuk berhenti streaming (menutup koneksi dengan Twitter).
Panggil fungsi ini untuk memulai kembali aliran setelah Anda menelepon .stop()
di atasnya. Catatan: Tidak perlu menelepon .start()
untuk mulai streaming. Twit.stream
panggilan .start()
untuk Anda.
Apa pun di API Twitter:
Buka di sini untuk membuat aplikasi dan dapatkan kredensial OAuth (jika Anda belum melakukannya): https://apps.twitter.com/app/new
Anda dapat menentukan serangkaian sidik jari sertifikat tepercaya jika Anda hanya ingin mempercayai serangkaian sertifikat tertentu. Ketika respons HTTP diterima, diverifikasi bahwa sertifikat ditandatangani, dan sidik jari sertifikat rekan harus menjadi salah satu nilai yang Anda tentukan. Secara default, CA "root" Node.js akan digunakan.
misalnya.
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' ,
]
} )
Buat dua file: config1.js
dan config2.js
di root folder twit
. Mereka harus berisi dua set kredensial OAuth yang berbeda untuk digunakan TWIT (dua akun diperlukan untuk pengujian interaksi). Keduanya harus terlihat seperti ini:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
Kemudian jalankan tes:
npm test
Anda juga dapat menjalankan contoh:
node examples/rtd2.js
Contohnya adalah bot Twitter bernama RTD2 yang ditulis menggunakan twit
. RTD2 Tweet tentang GitHub dan mengkurasi grafik sosialnya.
FAQ
(Lisensi MIT)
Hak Cipta (C) oleh Tolga Tezel [email protected]
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani perangkat lunak tanpa pembatasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam PERANGKAT LUNAK.
T.delete(...)
.parser-error
alih-alih peristiwa error
jika Twitter mengirimkan kembali badan respons HTTP yang tidak terkompresi.new
; var t = Twit(config)
berfungsi, dan var t = new Twit(config)
juga berfungsi.config.trusted_cert_fingerprints
.mime
sebagai ketergantungan.friends
Event untuk friends_str
pesan yang diterima ketika aliran pengguna diminta dengan stringify_friend_ids=true
.error
untuk kasus ini.retweeted_retweet
dan acara pengguna favorited_retweet
.T.postMediaChunked()
untuk membuatnya mudah.account/update_profile_image
dan account/update_profile_background_image
.quoted_tweet
message
.connected
setelah menerima tanggapan dari Twitterstream.stop()
dan stream.start()
alih -alih memancarkan acara start
dan stop
disconnect
, tutup aliran dan keluarkan disconnect
dengan pesan putuskan yang diterima dari Twittertwit
yang diperbarui untuk digunakan dengan v1.1 dari API Twitter.twit.stream()
. Tidak lagi menerima panggilan balik. Segera kembali dengan EventEmitter
yang dapat Anda dengarkan. Bagian Usage
di readme.md telah diperbarui. Bacalah.twit.stream()
memiliki function (path, params, callback)