ノード用のTwitter APIクライアント
残りとストリーミング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)
TwitterのAPIへのリクエストを作成するために使用できるTwit
インスタンスを作成します。
ユーザーコンテキストで認証する場合、 config
フォームのオブジェクトである必要があります。
{
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
アプリケーションコンテキストで認証する場合、 config
フォームのオブジェクトである必要があります。
{
consumer_key: '...'
, consumer_secret: '...'
, app_only_auth: true
}
アプリケーションのみの認証では、ツイートの投稿など、ユーザーコンテキストを必要とするAPIエンドポイントへのリクエストを実行できないことに注意してください。ただし、利用可能なエンドポイントはより高いレート制限を持つことができます。
T.get(path, [params], callback)
REST APIエンドポイントのいずれかを取得します。
パス
ヒットするエンドポイント。 path
値を指定するときは、最後に「.json」を省略します(つまり、 「検索/tweets.json」の代わりに「検索/ツイート」を使用します)。
パラメージ
(オプション)リクエストのパラメーター。
折り返し電話
function (err, data, response)
data
、Twitterから受信した解析データです。response
、[http.incomingmessage](http://nodejs.org/api/http.html# http_http_incomingmessage)です。 T.post(path, [params], callback)
REST APIエンドポイントのいずれかを投稿します。 T.get()
と同じ使用法。
T.postMediaChunked(params, callback)
ポストメディア/アップロード(チャンク)APIを介してメディアを投稿するヘルパー機能。 params
、 file_path
キーを含むオブジェクトです。 file_path
は、アップロードするファイルへの絶対パスです。
var filePath = '/absolute/path/to/file.mp4'
T . postMediaChunked ( { file_path : filePath } , function ( err , data , response ) {
console . log ( data )
} )
また、ストリーミングをより微調整された制御が必要な場合は、T.POST()呼び出しを介してPost Media/アップロードAPIを使用することもできます。 [例についてはこちらを参照](https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20)。
T.getAuth()
クライアントの認証トークンを取得します。
T.setAuth(tokens)
クライアントの認証トークンを更新します。
T.stream(path, [params])
これをストリーミングAPIで使用します。
パス
ヒットするストリーミングエンドポイント。 1つ:
各ストリーミングエンドポイントの説明については、Twitter APIドキュメントを参照してください。
パラメージ
(オプション)リクエストのパラメーター。 params
で渡されたアレイは、コンマ区切りの文字列に変換され、次のようなリクエストを行うことができます。
//
// 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])
接続を生かし続け、 EventEmitter
を返します。
以下のイベントが放出されます。
ストリームでオブジェクトが受信されるたびに放出されます。これは、以下に文書化されたより具体的なイベントを使用するのではなく、ストリームで受信したデータの処理に使用できるキャッチオールイベントです。バージョン2.1.0の新しい。
stream . on ( 'message' , function ( msg ) {
//...
} )
ステータス(ツイート)がストリームに入るたびに放出されます。
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
ステータス(ツイート)削除メッセージがストリームに入るたびに放出されます。
stream . on ( 'delete' , function ( deleteMessage ) {
//...
} )
制限メッセージがストリームに入るたびに放出されました。
stream . on ( 'limit' , function ( limitMessage ) {
//...
} )
場所の削除メッセージがストリームに入るたびに放出されます。
stream . on ( 'scrub_geo' , function ( scrubGeoMessage ) {
//...
} )
切断メッセージがTwitterから送信されると放出されます。これは、TwitterのAPIに複数のストリームが接続されている場合に発生します。 Twitterから切断メッセージを受信すると、 Twit
接続を閉じ、Twitterから受信したメッセージの詳細を使用してこのイベントを発します。
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
Twitterに接続の試行が行われたときに放出されます。 HTTP request
オブジェクトが排出されます。
stream . on ( 'connect' , function ( request ) {
//...
} )
応答がTwitterから受信されたときに放出されます。 HTTP response
オブジェクトが放出されます。
stream . on ( 'connected' , function ( response ) {
//...
} )
Twitterの再接続試行がスケジュールされたときに放出されます。 Twitterが問題を抱えている場合、またはレートが制限されている場合、Twitterの再接続ガイドラインに従って再接続をスケジュールします。最後のHTTP request
とresponse
オブジェクトは、再接続が発生する前に残された時間(ミリ秒単位)とともに放出されます。
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
このメッセージは、Firehoseなどの高帯域幅接続を使用するクライアントに適しています。接続が遅れている場合、Twitterはキューがいっぱいになるまでメッセージをキューにキューにします。その時点で、それらはあなたを切断します。
stream . on ( 'warning' , function ( warning ) {
//...
} )
Twitterがストリームにstatus_withheld
メッセージを送信すると放出されます。これは、特定の国でツイートが差し控えられたことを意味します。
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
Twitterがストリーム内のuser_withheld
メッセージを送り返すと放出されます。これは、特定の国でTwitterユーザーが差し控えられたことを意味します。
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Twitterが[「Friends "Preamble](https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages)をユーザーストリームに接続するときに送信すると放出されます。このメッセージには、ユーザーIDの配列として表されるユーザーの友人のリストが含まれています。 stringify_friend_idsパラメーターが設定されている場合、フレンズリストプリアンブルは文字列として(数字の代わりに)返されます。
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
直接メッセージがユーザーに送信されたときに放出されます。残念ながら、Twitterはユーザーストリームのこのイベントを文書化していません。
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
Twitterがユーザーストリームイベントを送り返すと放出されます。各イベントの構造の詳細については、Twitterドキュメントを参照してください。
stream . on ( 'user_event' , function ( eventMsg ) {
//...
} )
さらに、次のユーザーストリームイベントが提供されています。
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
(上記と一致しないイベントの場合) stream . on ( 'favorite' , function ( event ) {
//...
} )
API要求または応答エラーが発生したときに放出されます。 Error
オブジェクトが放出され、プロパティがあります。
{
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
}
ストリーミングを停止するために、ストリーム上のこの関数を呼び出します(Twitterとの接続を閉じます)。
この関数を呼び出して、 .stop()
を呼び出した後、ストリームを再起動します。注:ストリーミングを開始するために.start()
を呼び出す必要はありません。 Twit.stream
Calls .start()
あなたのために。
Twitter APIの何でも:
アプリを作成してOAuth資格情報を取得するためにここにアクセスしてください(まだ持っていない場合):https://apps.twitter.com/app/new
特定の証明書のみを信頼する場合は、信頼できる証明書指紋の配列を指定できます。 HTTP応答が受信されると、証明書が署名されたことが確認され、ピア証明書の指紋は指定した値の1つでなければなりません。デフォルトでは、node.js信頼された「ルート」CASが使用されます。
例えば。
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' ,
]
} )
twit
フォルダーのルートでconfig1.js
とconfig2.js
の2つのファイルを作成します。 Twitを使用するために、2つの異なるセットのOAuth資格情報を含める必要があります(相互作用のテストには2つのアカウントが必要です)。彼らは両方とも次のように見えるはずです:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
次に、テストを実行します。
npm test
例を実行することもできます。
node examples/rtd2.js
この例は、 twit
を使用して書かれたRTD2という名前のTwitterボットです。 RTD2はGitHubについてツイートし、そのソーシャルグラフをキュレーションします。
よくある質問
(MITライセンス)
Tolga Tezel [email protected]によるCopyright(c)
このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得している人に、これにより許可が無料で許可され、制限なしにソフトウェアを扱うことができます。 、ソフトウェアのコピーを公開、配布、サブライセンス、および/または販売し、次の条件を条件として、ソフトウェアが提供される人を許可します。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたは使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。ソフトウェア。
T.delete(...)
できます。error
イベントの代わりにparser-error
をエミットします。new
キーワードの省略を許可します。 var t = Twit(config)
works、 var t = new Twit(config)
も機能します。config.trusted_cert_fingerprints
を介して、信頼できる証明書指紋の配列を設定します。mime
を追加します。stringify_friend_ids=true
でユーザーストリームが要求されたときに受信したfriends_str
メッセージのfriends
イベントを排出します。error
イベントをエミットします。retweeted_retweet
とfavorited_retweet
ユーザーイベントを排出します。T.postMediaChunked()
を追加して簡単にします。account/update_profile_image
およびaccount/update_profile_background_image
パスのHTTP要求の構築にバグを修正します。quoted_tweet
イベントを追加しますmessage
イベントを追加します。connected
イベントをエミットしますstream.stop()
とstream.start()
start
イベントとstop
イベントを放出する代わりに使用しますdisconnect
メッセージを送信し、ストリームを閉じて、Twitterから受信した切断メッセージとdisconnect
される場合twit
を更新しました。twit.stream()
への変化を破る。もうコールバックを受けません。聞くことができるEventEmitter
ですぐに戻ります。 readme.mdのUsage
セクションが更新されました。それを読んでください。twit.stream()
には署名function (path, params, callback)