ไคลเอนต์ 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) สร้างอินสแตนซ์ Twit ที่สามารถใช้เพื่อขอ API ของ Twitter
หากตรวจสอบความถูกต้องด้วยบริบทของผู้ใช้ 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' ในตอนท้าย (เช่นใช้ 'การค้นหา/ทวีต' แทน 'search/tweets.json' )
พารามิเตอร์
(ไม่บังคับ) พารามิเตอร์สำหรับคำขอ
การโทรกลับ
function (err, data, response)
data คือข้อมูลที่แยกวิเคราะห์ได้จาก Twitterresponse คือ [http.incomingMessage] (http://nodejs.org/api/http.html# http_http_incomingMessage) ที่ได้รับจาก Twitter T.post(path, [params], callback) โพสต์จุดสิ้นสุดของ REST API การใช้งานเดียวกับ T.get()
T.postMediaChunked(params, callback) ฟังก์ชั่นผู้ช่วยในการโพสต์สื่อผ่านสื่อโพสต์/อัปโหลด (chunked) 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 )
} )นอกจากนี้คุณยังสามารถใช้โพสต์สื่อ/อัพโหลด API ผ่านการโทร t.post () หากคุณต้องการควบคุมการสตรีมอย่างละเอียดมากขึ้น [ดูตัวอย่างที่นี่] (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 ) {
//...
} ) ปล่อยออกมาเมื่อข้อความตัดการเชื่อมต่อมาจาก Twitter สิ่งนี้เกิดขึ้นหากคุณมีสตรีมหลายสายที่เชื่อมต่อกับ API ของ Twitter เมื่อได้รับข้อความตัดการเชื่อมต่อจาก Twitter Twit จะปิดการเชื่อมต่อและปล่อยกิจกรรมนี้ด้วยรายละเอียดข้อความที่ได้รับจาก Twitter
stream . on ( 'disconnect' , function ( disconnectMessage ) {
//...
} ) ปล่อยออกมาเมื่อพยายามเชื่อมต่อกับ Twitter วัตถุ request HTTP ถูกปล่อยออกมา
stream . on ( 'connect' , function ( request ) {
//...
} ) ปล่อยออกมาเมื่อได้รับการตอบกลับจาก Twitter วัตถุ response HTTP ถูกปล่อยออกมา
stream . on ( 'connected' , function ( response ) {
//...
} ) ปล่อยออกมาเมื่อความพยายามในการเชื่อมต่อใหม่ใน Twitter ถูกกำหนดไว้ หาก Twitter มีปัญหาหรือเราได้รับอัตรา จำกัด เราจะกำหนดเวลาการเชื่อมต่อใหม่ตามแนวทางการเชื่อมต่อของ Twitter request และ response HTTP ครั้งสุดท้ายจะถูกปล่อยออกมาพร้อมกับเวลา (เป็นมิลลิวินาที) ที่เหลือก่อนที่จะมีการเชื่อมต่ออีกครั้ง
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 ส่งคำนำ ["" เพื่อน "(https://dev.twitter.com/streaming/overview/messages-types# user_stream_messsages) เมื่อเชื่อมต่อกับสตรีมผู้ใช้ ข้อความนี้มีรายการเพื่อนของผู้ใช้ซึ่งแสดงเป็นอาร์เรย์ของรหัสผู้ใช้ หากตั้งค่าพารามิเตอร์ 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 ) {
//...
} )นอกจากนี้กิจกรรมสตรีมของผู้ใช้ต่อไปนี้มีให้คุณฟัง:
blockedunblockedfavoriteunfavoritefollowunfollowmuteunmuteuser_updatelist_createdlist_destroyedlist_updatedlist_member_addedlist_member_removedlist_user_subscribedlist_user_unsubscribedquoted_tweetretweeted_retweetfavorited_retweetunknown_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 โทร .start() สำหรับคุณ
อะไรก็ได้ใน Twitter API:
ไปที่นี่เพื่อสร้างแอพและรับข้อมูลรับรอง OAuth (ถ้าคุณยังไม่ได้): https://apps.twitter.com/app/new
คุณสามารถระบุอาร์เรย์ของลายนิ้วมือใบรับรองที่เชื่อถือได้หากคุณต้องการเชื่อถือชุดใบรับรองเฉพาะเท่านั้น เมื่อได้รับการตอบกลับ HTTP จะมีการตรวจสอบว่าใบรับรองได้รับการลงนามและลายนิ้วมือของใบรับรองเพื่อนจะต้องเป็นหนึ่งในค่าที่คุณระบุ โดยค่าเริ่มต้นจะใช้ cas "root" ที่เชื่อถือได้
เช่น
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' ,
]
} ) สร้างสองไฟล์: config1.js และ config2.js ที่รูทของโฟลเดอร์ twit พวกเขาควรมีชุดข้อมูลรับรอง OAuth สองชุดที่แตกต่างกันเพื่อให้ TWIT ใช้ (จำเป็นต้องใช้สองบัญชีสำหรับการทดสอบการโต้ตอบ) พวกเขาควรดูอะไรแบบนี้:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
จากนั้นเรียกใช้การทดสอบ:
npm test
คุณสามารถเรียกใช้ตัวอย่าง:
node examples/rtd2.js
ตัวอย่างคือบอท Twitter ชื่อ RTD2 เขียนโดยใช้ twit ทวีต RTD2 เกี่ยวกับ GitHub และดูแลกราฟโซเชียล
คำถามที่พบบ่อย
(ใบอนุญาต MIT)
ลิขสิทธิ์ (c) โดย tolga tezel [email protected]
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.
T.delete(...)parser-error แทนที่จะเป็นเหตุการณ์ error หาก Twitter ส่งการตอบสนอง HTTP ที่ไม่บีบอัดกลับมาnew var t = Twit(config) ใช้งานได้และ var t = new Twit(config) ก็ใช้งานได้เช่นกันconfig.trusted_cert_fingerprintsmime เป็นการพึ่งพาfriends สำหรับข้อความ friends_str ที่ได้รับเมื่อมีการร้องขอสตรีมของผู้ใช้ด้วย stringify_friend_ids=trueerror ที่ปล่อยออกมาสำหรับกรณีนี้retweeted_retweet และเหตุการณ์ผู้ใช้ favorited_retweetT.postMediaChunked() เพื่อให้ง่ายaccount/update_profile_image และ account/update_profile_background_imagequoted_tweetmessageconnected เมื่อได้รับการตอบกลับจาก Twitterstream.stop() และ stream.start() แทนที่จะปล่อยเหตุการณ์ start และ stopdisconnect ให้ปิดสตรีมและปล่อย disconnect กับข้อความปลดการเชื่อมต่อที่ได้รับจาก Twittertwit สำหรับการใช้งานด้วย v1.1 ของ Twitter APItwit.stream() ไม่ต้องโทรกลับอีกต่อไป มันจะกลับมาทันทีด้วย EventEmitter ที่คุณสามารถฟังได้ ส่วน Usage ใน ReadMe.MD ได้รับการอัปเดตแล้ว อ่านมันtwit.stream() มี function (path, params, callback)