Node 용 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)
트위터의 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)
나머지 API 엔드 포인트를 얻으십시오.
길
타격의 끝점. path
값을 지정할 때는 끝에서 '.json'을 생략합니다 (즉, 'search/ tweets.json'대신 '검색/트윗' ).
매개 변수
(선택 사항) 요청의 매개 변수.
콜백
function (err, data, response)
data
트위터에서받은 구문 분석 데이터입니다.response
트위터에서받은 [http.incomingMessage] (http://nodejs.org/api/http.html# http_http_incomingmessage)입니다. T.post(path, [params], callback)
나머지 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/Upload API를 사용할 수도 있습니다. [예를 들어 여기를 참조하십시오] (https://github.com/ttezel/twit/blob/master/tests/rest_chunked_upload.js# l20).
T.getAuth()
고객의 인증 토큰을 얻으십시오.
T.setAuth(tokens)
클라이언트의 인증 토큰을 업데이트하십시오.
T.stream(path, [params])
스트리밍 API와 함께 사용하십시오.
길
스트리밍 엔드 포인트가 적중합니다. 중 하나 :
각 스트리밍 엔드 포인트에 대한 설명은 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 ) {
//...
} )
트위터에서 분리 메시지가 오면 방출됩니다. 트위터의 API에 여러 개의 스트림이 연결된 경우 발생합니다. 트위터에서 연결을 끊는 메시지를 받으면 Twit
연결을 닫고 트위터에서받은 메시지 세부 정보 로이 이벤트를 방출합니다.
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} )
트위터에 연결 시도가 이루어질 때 방출됩니다. HTTP request
객체가 방출됩니다.
stream . on ( 'connect' , function ( request ) {
//...
} )
트위터에서 응답을받을 때 방출됩니다. HTTP response
객체가 방출됩니다.
stream . on ( 'connected' , function ( response ) {
//...
} )
트위터에 대한 재 연결 시도가 예정 될 때 방출됩니다. 트위터에 문제가 있거나 요금 제한이있는 경우 트위터의 재 연결 가이드 라인에 따라 재 연결을 예약합니다. 마지막 HTTP request
및 response
객체는 재 연결이 발생하기 전에 남은 시간 (밀리 초)과 함께 방출됩니다.
stream . on ( 'reconnect' , function ( request , response , connectInterval ) {
//...
} )
이 메시지는 Firehose와 같은 대역폭 연결을 사용하는 고객에게 적합합니다. 연결이 뒤 떨어지면 트위터가 큐가 채워질 때까지 트위터가 메시지를 줄이면이 시점에서 연결이 끊어집니다.
stream . on ( 'warning' , function ( warning ) {
//...
} )
트위터가 스트림에서 status_withheld
메시지를 다시 보낼 때 방출됩니다. 이것은 특정 국가에서 트윗이 보류되었음을 의미합니다.
stream . on ( 'status_withheld' , function ( withheldMsg ) {
//...
} )
트위터가 스트림에서 user_withheld
메시지를 다시 보낼 때 방출됩니다. 이는 트위터 사용자가 특정 국가에서 보류되었음을 의미합니다.
stream . on ( 'user_withheld' , function ( withheldMsg ) {
//...
} )
Twitter가 사용자 스트림에 연결할 때 [ "Friends"Preamble] (https://dev.twitter.com/streaming/messages-types# user_stream_messsages)를 보낼 때 방출됩니다. 이 메시지에는 사용자 ID 배열로 표시되는 사용자의 친구 목록이 포함되어 있습니다. stringify_friend_ids 매개 변수가 설정되면 Friends List Preamble은 숫자 대신 문자열로 반환됩니다.
var stream = T . stream ( 'user' , { stringify_friend_ids : true } )
stream . on ( 'friends' , function ( friendsMsg ) {
//...
} )
직접 메시지가 사용자에게 전송 될 때 방출됩니다. 불행히도 Twitter는 사용자 스트림을 위해이 이벤트를 문서화하지 않았습니다.
stream . on ( 'direct_message' , function ( directMsg ) {
//...
} )
트위터가 사용자 스트림 이벤트를 다시 보낼 때 방출됩니다. 각 이벤트 구조에 대한 자세한 내용은 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
}
스트림 에서이 함수를 호출하여 스트리밍을 중지합니다 (트위터와의 연결을 닫습니다).
이 함수를 호출하여 .stop()
호출 한 후 스트림을 다시 시작하십시오. 참고 : 스트리밍을 시작하기 위해 .start()
호출 할 필요가 없습니다. Twit.stream
호출 .start()
위해
트위터 API의 모든 것 :
앱을 만들고 Oauth 자격 증명을 얻으려면 여기로 이동 (아직하지 않은 경우) : https://apps.twitter.com/app/new
특정 인증서 세트 만 신뢰하려면 신뢰할 수있는 인증서 지문 배열을 지정할 수 있습니다. HTTP 응답이 접수되면 인증서에 서명되었는지 확인하고 피어 인증서의 지문은 지정한 값 중 하나 여야합니다. 기본적으로 Node.js Trusted "Root"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
의 두 파일을 만듭니다. TWIT 사용에 대한 두 가지 OAUTH 자격 증명 세트가 포함되어야합니다 (상호 작용 테스트에는 두 개의 계정이 필요합니다). 둘 다 다음과 같이 보일 것입니다.
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
그런 다음 테스트를 실행합니다.
npm test
예제를 실행할 수도 있습니다.
node examples/rtd2.js
이 예는 twit
사용하여 작성된 RTD2라는 트위터 봇입니다. RTD2는 GitHub 에 대해 트윗하고 소셜 그래프를 선별합니다.
FAQ
(MIT 라이센스)
Tolga Tezel [email protected]의 저작권 (C)
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가는 제한없이 소프트웨어를 처리 할 수있는 사람에게 무료로 제공됩니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.
T.delete(...)
할 수 있습니다.error
이벤트 대신 parser-error
방출하십시오.new
키워드를 생략 할 수 있습니다. var t = Twit(config)
가 작동하고 var t = new Twit(config)
도 작동합니다.config.trusted_cert_fingerprints
를 통해 신뢰할 수있는 인증서 지문 배열을 설정하십시오.mime
종속성으로 추가하십시오.friends_str
메시지에 대한 friends
이벤트를 방출하십시오 stringify_friend_ids=true
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
메시지를 보내고 스트림을 닫고 트위터에서받은 분리 메시지와 disconnect
끊는 경우twit
업데이트했습니다.twit.stream()
으로 의 변화를 깨뜨립니다 . 더 이상 콜백을받지 않습니다. 그것은 당신이들을 수있는 EventEmitter
로 즉시 돌아옵니다. readme.md의 Usage
섹션이 업데이트되었습니다. 읽으십시오.twit.stream()
서명 function (path, params, callback)
가 있습니다.