Клиент API Twitter для узла
Поддерживает как остальное , так и потоковое 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
}
Обратите внимание, что AUTH только для приложения не позволит вам выполнять запросы в конечные точки API, требующие контекста пользователя, таких как публикация твитов. Тем не менее, доступные конечные точки могут иметь более высокий предел ставки.
T.get(path, [params], callback)
Получите любую из остальных конечных точек API.
путь
Конечная точка, чтобы ударить. При указании значений path
пропустите «.json» в конце (то есть используйте «Поиск/твиты» вместо «Поиск/твиты .
параметры
(Необязательно) Параметры для запроса.
перезвонить
function (err, data, response)
data
- это аналитические данные, полученные из Twitter.response
- это [http.incommingmessage] (http://nodejs.org/api/http.html# http_http_incomingmessage), полученное из Twitter. T.post(path, [params], callback)
Разместите любую из остальных конечных точек API. То же использование, что и T.get()
.
T.postMediaChunked(params, callback)
Вспомогательная функция для публикации медиа через API Post Media/upload (Chunked). 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 Post Media/загрузку с помощью вызовов 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 Docs.
параметры
(Необязательно) Параметры для запроса. Любые массивы, передаваемые в 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 ) {
//...
} )
Излучается, когда попытка подключения сделана в Твиттере. Объект HTTP request
испускается.
stream . on ( 'connect' , function ( request ) {
//...
} )
Испускается, когда ответ получен из Twitter. Объект response
HTTP испускается.
stream . on ( 'connected' , function ( response ) {
//...
} )
Испускается, когда запланирована попытка повторного соединения в 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 отправляет Preamble ["Друзья" (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 отправляет обратное событие пользователя. Смотрите документы в Твиттере для получения дополнительной информации о структуре каждого события.
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()
для вас.
Что -нибудь в API в Твиттере:
Перейдите сюда, чтобы создать приложение и получить учетные данные OAuth (если вы еще этого не сделали): https://apps.twitter.com/app/new
Вы можете указать массив надежных отпечатков пальцев сертификатов, если вы хотите доверять только определенному набору сертификатов. Когда получен ответ HTTP, подтверждается, что сертификат был подписан, и отпечаток пальца в сертификате сверстника должен быть одним из указанных вами значений. По умолчанию будет использоваться CAS Node.js, доверяющий «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)
Copyright (c) Tolga Tezel [email protected]
Настоящее разрешение предоставляется бесплатно любому лицу, получающему копию этого программного обеспечения и связанные с ними файлы документации («Программное обеспечение»), для работы в программном обеспечении без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение , публиковать, распространять, сублиценс и/или продавать копии программного обеспечения и разрешить лицам, которым предоставлено программное обеспечение, при условии следующих условий:
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть», без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и несоответствия. Ни в коем случае не будут нести ответственность авторов или владельцев авторских прав за любые претензии, ущерб или другую ответственность, будь то в действии контракта, деликте или иным образом, возникающим из или в связи с программным обеспечением или использования или других сделок в ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
T.delete(...)
.parser-error
вместо события error
, если Twitter отправляет несущественный корпус ответа HTTP.new
ключевого слова; var t = Twit(config)
работает, и var t = new Twit(config)
тоже работает.config.trusted_cert_fingerprints
.mime
в качестве зависимости.friends
Event для сообщения friends_str
, полученное, когда пользовательский поток запрошен с помощью stringify_friend_ids=true
.error
для этого случая.retweeted_retweet
и favorited_retweet
пользовательских событий.T.postMediaChunked()
, чтобы сделать это легко.account/update_profile_image
и account/update_profile_background_image
.quoted_tweet
message
.connected
события после получения ответа из Twitterstream.stop()
и stream.start()
вместо излучения событий start
и stop
disconnect
, закрывает поток и испускает disconnect
с сообщением о отключении, полученном из Twittertwit
для использования с v1.1 из API Twitter.twit.stream()
. Больше не принимает вызов. Он немедленно возвращается с EventEmitter
, который вы можете прослушать. Раздел Usage
в readme.md был обновлен. Прочитайте это.twit.stream()
имеет function (path, params, callback)