24 сентября 2013

О доступе к Twitter API



Больше года назад я писал об использовании возможностей R-пакетов twitteR и tm для анализа текста Twitter-сообщений. Такой анализ возможен благодаря тому, что Twitter предоставляет бесплатный доступ к своему API. Однако в последнее время схема, по которой предоставляется этот доступ, изменилась, став, к сожалению, гораздо сложнее (подробнее см. сообщение в официальном блоге сервиса). В основе нового подхода лежит авторизация по протоколу OAuth. Поскольку новая схема доступа к Twitter API отличается от той, которая была описана мною ранее, ниже я приведу пошаговую инструкцию доступа с учетом новых требований.



1. Регистрация пользователя на сайте для разработчиков приложений Twitter

Сайт для разработчиков Twitter-приложений находится по адресу https://dev.twitter.com. Если у вас уже имеется учетная запись для входа в Twitter, воспользуйтесь ею (см. рисунок ниже - Sign in). Иначе придется зарегистрироваться (опция Sign up станет доступной после перехода по ссылке Sign in).



2. Регистрация нового приложения

После входа в систему в верхнем правом углу страницы (возле иконки с вашей фотографией или какой-либо другой выбранной вами картинкой) станет доступным выпадающее меню, в котором необходимо выбрать My applications (Мои приложения):



На открывшейся после этого странице нажимаем на кнопку Create a new application (Создать новое приложение) и попадаем на другую страницу, где необходимо будет внести определенные данные касательно создаваемого нами нового приложения (см. рисунок ниже). В частности, требуется обязательно указать название приложения (Name), дать краткое описание приложения (Description) и указать адрес сайта, на котором это приложение планируется размещать (Website). Какой именно сайт вы укажете - не имеет значения. Главное, чтобы это был адрес реально существующего сайта.













Кроме того, необходимо будет согласиться с условиями предоставления доступа к API (поставить галочку возле Yes, I agree в разделе Developer Rules Of The Road), подтвердить, что вы - не робот (ввести значения с капчи) и, наконец, создать новое приложение, нажав на кнопку Create your Twitter application.



В результате откроется страница с параметрами созданного приложения. Наибольший интерес на этой странице для нас представляют т.н. "ключ" и "секрет" пользователя (Consumer key и Consumer secret), которые являются идентификаторами нового приложения. Эти идентификаторы стоит скопировать и сохранить в виде, например, текстового файле - они потребуются нам в дальнейшем:




3. Получение доступа к API из среды R

Для работы с текстами Twitter-сообщений вам, как минимум, потребуются пакеты twitteR, ROAuth и tm. Все их можно одновременно установить при помощи команды

install.packages(c("twitteR", "ROAuth", "tm"))

Загрузите все эти пакеты:

library(twitteR)
library(ROAuth)
library(tm)

Далее нам необходимо выполнить собственно подключение к серверам Twitter. При работе на компьютере с ОС Windows важным предварительным шагом является загрузка в рабочую среду R файла cacert.pem. Этот файл содержит набор сертификатов, которые используются для проверки подлинности сайта, с которым будет "общаться" ваш компьютер (т.е. сайт Twitter; подробнее о т.н. открытых ключах (public keys) см. здесь). При условии, что ваш компьютер подключен к сети Internet, загрузить этот файл можно при помощи следующей команды:

download.file(url = "http://curl.haxx.se/ca/cacert.pem", destfile = "cacert.pem")

Кроме того, в зависимости от свойств вашего Интернет-соединения (в частности, работаете ли вы через прокси или нет), может потребоваться дополнительная настройка свойств программы cURL (R-интерфейс для этой программы устанавливается незаметно для пользователя в виде пакета RCurl одновременно с установкой пакета ROAuth; подробнее о сURL см. здесь). Необходимые настройки задаются при помощи следующих команд:

curl = getCurlHandle()
options(RCurlOptions = list(capath = system.file("CurlSSL",
                            "cacert.pem", package = "RCurl"),
                       ssl.verifypeer = FALSE) )
curlSetOpt(.opts = list(proxy = "proxyserver:port"), curl = curl)


На предыдущем шаге были упомянуты "ключ" и "секрет пользователя". Для удобства их стоит сохранить в R виде двух самостоятельных символьных векторов (в приведенном ниже примере приведены вымышленные идентификаторы; вместо них необходимо вставить ваши собственные значения!):

consumerKey <- "12345pqrst6789ABCD" 
consumerSecret <- "abcd1234EFGH5678ijkl0987MNOP6543qrst21"

Используя эти идентификаторы, мы можем, наконец, связаться с Twitter следующим образом:

reqURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "https://api.twitter.com/oauth/access_token"
authURL <- "https://api.twitter.com/oauth/authorize"
twitCred <- OAuthFactory$new(consumerKey=consumerKey,
                             consumerSecret=consumerSecret,
                             requestURL=reqURL,
                             accessURL=accessURL,
                             authURL=authURL)

twitCred$handshake()

В результате выполнения этой команды в консоли R появится сообщение вроде этого:

To enable the connection, please direct your web browser to:
http://api.twitter.com/oauth/authorize?oauth_token=XXXXXXXXXXXXXXXXXXXXX
when complete, record the PIN given to you and provide it here: 

Здесь нас просят направить браузер по указанному адресу. К сожалению, этот адрес невозможно скопировать из консоли - придется ввести его в браузере целиком "вручную" (обратите внимание: символы XXXXXXXXXXXXXXXX в приведенном примере будут выглядеть на вашем компьютере иначе!). В результате вы попадете на страницу, где необходимо будет авторизовать ваше Twitter-приложение и далее получить PIN для доступа к API:





Полученный вами PIN код (он, конечно, будет отличаться от приведенного в примере выше) необходимо скопировать и вставить в консоль R после фразы

when complete, record the PIN given to you and provide it here: 

и нажать клавишу "Ввод" на клавиатуре.

Для проверки того, что соединение было установлено успешно, можно выполнить команду registerTwitterOAuth(twitCred) - она должна вернуть значение TRUE.

После этого можно приступать к сбору Twitter-сообщений так, как это было описано ранее.

9 комментариев :

Alexey Kuzmrnkov комментирует...

Здравствуйте, Сергей. Воспользовался алгоритмом по твиту. Выдает ошибку после того как вставляю пин
getTwitterOAuth(consumerKey, consumerSecret)
To enable the connection, please direct your web browser to:
http://api.twitter.com/oauth/authorize?oauth_token=Imm84YZGGvoPPZKNapiKGSdwtPMQx41sxv9CuUiHgNM
When complete, record the PIN given to you and provide it here: 3159613
Ошибка: Forbidden

Sergey Mastitsky комментирует...

Alexey, я обновил пост, добавив команды, которые должны решить Вашу проблему. См., начиная с фразы "Используя эти идентификаторы, мы можем, наконец, связаться с Twitter..."
Дайте знать, сработало ли это на Вашем компьютере.

Alexey Kuzmrnkov комментирует...

Sergey, спасибо огромное. Все работает. Что нужно сделать чтобы кириллица читалась в добытых сообщениях русскими буквами, а не иероглифами. Заранее благодарен.

Sergey Mastitsky комментирует...

Alexey, сложно сказать, не зная конфигурации вашей системы. Попробуйте для начала Sys.setlocale(category = "LC_ALL", locale = "Russian")

Alexey Kuzmrnkov комментирует...

Система- W7 x64. Sys.setlocale(category = "LC_ALL", locale = "Russian") Не помог.

boddhi комментирует...

А как получить сертификат и ключ?

Sergey Mastitsky комментирует...

Завести Twitter-акаунт и перечитать статью :)

rahat-lukumich комментирует...

После команды создания twitCred пишет "Ошибка: объект 'OAuthFactory' не найден"

Sergey Mastitsky комментирует...

См. http://r-analytics.blogspot.co.uk/2015/02/twitter-api.html

Отправить комментарий