节点的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
}
请注意,仅使用应用程序的auth将不允许您对需要用户上下文的API端点执行请求,例如发布推文。但是,可用的端点可以具有更高的速率限制。
T.get(path, [params], callback)
获取任何REST API端点。
小路
登点的终点。指定path
值时,在末尾省略'.json' (即使用'search/Tweets'而不是'search/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一起使用。
小路
流端点要击中。之一:
有关每个流端点的描述,请参见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 ) {
//...
} )
每次状态(Tweet)进入流时发出。
stream . on ( 'tweet' , function ( tweet ) {
//...
} )
每当状态(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发送连接到用户流时,Twitter发送[https://dev.twitter.com/streaming/messages-types-types-types-types-promes_messssages)时发出。此消息包含用户朋友的列表,该列表表示为用户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
call .start()
为您。
Twitter API中的任何内容:
转到这里创建一个应用并获得OAuth凭据(如果您还没有):https://apps.twitter.com/app/new
如果您只想相信一组特定的证书,则可以指定一系列受信任的证书指纹。当收到HTTP响应时,可以验证证书已签署,并且同行证书的指纹必须是您指定的值之一。默认情况下,将使用Node.js信任的“ 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' ,
]
} )
创建两个文件: config1.js
和config2.js
在twit
文件夹的根部。它们应包含两套不同的OAuth凭据,以便使用TWIT(测试交互需要两个帐户)。他们俩都应该看起来像这样:
module.exports = {
consumer_key: '...'
, consumer_secret: '...'
, access_token: '...'
, access_token_secret: '...'
}
然后运行测试:
npm test
您还可以举办以下示例:
node examples/rtd2.js
该示例是使用twit
编写的名为RTD2的Twitter机器人。 RTD2发推文有关GitHub并策划其社交图。
常问问题
(麻省理工学院许可证)
版权(c)由tolga tezel [email protected]
特此免费授予任何获得此软件副本和相关文档文件(“软件”)的人,以无限制处理该软件,包括无限制,使用,复制,修改,合并的权利,发布,分发,分布和/或出售该软件的副本,并允许提供该软件的人,但要遵守以下条件:
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权或其他方面的诉讼中,与软件或与软件或使用或其他交易有关的诉讼或其他责任软件。
T.delete(...)
。parser-error
而不是error
事件。new
关键字; var t = Twit(config)
有效, var t = new Twit(config)
也有效。config.trusted_cert_fingerprints
设置信任证书指纹的数组。mime
添加为依赖性。stringify_friend_ids=true
用户流时收到的friends_str
消息的Emit 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)