iKnow & Twitter APIТимур Сафин
Twitter в числах
активных
пользователей
в месяц
320
млн
«уников»
на сайте
в месяц
1
млрд
мобильных
пользователей
80%
языков
>35
https://about.twitter.com/ru/company
• REST API
–Поиск по критериям по твитам из прошлого (1 неделя)
• Streaming API
–Подписка на публикацию постов в реальном времени
(сэмплинг или фильтрация)
• Firehose API
–Весь поток твитов в реальном времени
Twitter API
• OAuth аутентификация
• GET/POST запросы через https
• JSON ответы
Twitter REST API
REST API – api.twitter.com
• search/tweets.json
• Список твитов по запросу
• 180 запросов/15 минут
• trends/closest.json
• Ближайший город с трендами по заданным координатам
• 15 запросов/15 минут
• geo/reverse_geocode.json
• Обратная трансляция координат в гео объект
• 15 запросов/15 минут
• application/rate_limit_status.json
• Текущий лимит точек входа в REST API
• 180 запросов/15 минут
REST API – search/tweetsGET https://api.twitter.com/1.1/search/tweets.json?q=%23freebandnames&since_id=24012619984051000&max_id=250126199840518145&result_type=mixed&count=4
https://dev.twitter.com/rest/reference/get/search/tweets
REST API – отладка в Caché
• Только ~1% твитов с геотэгами
–Используя гео привязку из профилей пользователя
получаем ~50-60%
Проблема географической привязки
VKFB>>select count(*) from TWReader_Data.Tweet
36. select count(*) from TWReader_Data.Tweet
Aggregate_1
795
…
VKFB>>select count(*) from TWReader_Data.Tweet where Place<>""
37. select count(*) from TWReader_Data.Tweet where Place<>""
Aggregate_1
5
…
VKFB>>select count(*) FROM TWReader_Data.Tweet T, TWReader_Data."User" U where T."User" = U.Screenname and U.location<>""
38. select count(*) FROM TWReader_Data.Tweet T, TWReader_Data."User" U where T."User" = U.Screenname and U.location<>""
Aggregate_1
458
Проблема гео привязки
REST API – пример приложения
• Простой способ – на базе смайликов и эмоджи
• Сложнее способ – с применением онтологий и iknow
Эмоциональная окраска (sentiment analysis)
Emoji Sentiment Ranking 1.0 About
Char
Image Unicode OccurrencesPositionNeg Neut Pos
Sentiment
score
Sentiment
bar
Unicode name[twemoji] codepoint [5...max] [0...1] [0...1] [0...1] [0...1] [-1...+1] (c.i. 95%)
😂 0x1f602 146220.805 0.247 0.285 0.468 0.221 FACE WITH TEARS OF
JOY
❤ 0x2764 80500.747 0.044 0.166 0.790 0.746 HEAVY BLACK HEART
♥ 0x2665 71440.754 0.035 0.272 0.693 0.657 BLACK HEART SUIT
😍 0x1f60d 63590.765 0.052 0.219 0.729 0.678 SMILING FACE WITH
HEART-SHAPED EYES
😭 0x1f62d 55260.803 0.436 0.220 0.343 -0.093 LOUDLY CRYING FACE
😘 0x1f618 36480.854 0.053 0.193 0.754 0.701 FACE THROWING A
KISS
😊 0x1f60a 31860.813 0.060 0.237 0.704 0.644 SMILING FACE WITH
SMILING EYES
http://kt.ijs.si/data/Emoji_sentiment_ranking/
• Firehose (дорого) получает все твиты
–~500 миллионов в день (осень 2014)
• Публичное streaming API может отдать не более 1% всего
мирового трафика
– (5 миллионов в день)
• Весь архив твитов из России за пару месяцев:
–61 день – 6 миллионов твитов – 3К$
•Т.е. ~2000 tweet/$
•Т.е. ~100 тысяч твитов в день
Streaming API
• status/filter
•5000 user ids
•400 keywords
•25 location boxes
• rate limited (1%)
• status/sample
• rate limited – 1% всех
– message.id mod 100
•Два одновременных status/sample потока вернут одинаковые
данные
Streaming API
iKnowSocial – поддержка твитера
https://github.com/intersystems-ru/iknowSocial/tree/tsafin-twitter-devel
iKnowSocial – поддержка твитераРежим регионального мониторинга Сделано
UI
Выбор региона 1
Улучшение визуализации 1
Эмоциональная окраска
Визуализация окраса постов 1
Посредством iknow 1
Посредством эмоджи и смайлов 0
Визуализация постов на карте 0
Тренды
Тренды твитера 1
Тренды iknow 0
Поточный API
Выборка и хранение через streaming API 0
Фоновый анализ и индексирование в iknow 0
Динамическая карта 0