Пишем бота на PHP для Twitter или как пользоваться Twitter API (oAuth)
На днях столкнулся с необходимость написания небольшого бота для Twitter, который бы отправлял новости в мой аккаунт. Сразу отправился на изучение Twitter API. В принципе, там нет ничего сложного. Всего около 50 запросов.
Небольшую сложность представляет собой только oAuth аутентификация, которая на первый взгляд кажется какой-то абсурдной. Раньше, что бы обновить статус в своем аккаунте, можно было воспользоваться простой HTTP аутентификации, но с 31 августа 2010 года она была заменена полностью на oAuth.
Поэтому прежде чем отправить новый Твит надо пройти всю процедуру авторизации и получение ключей доступа.
Регистрация приложения
Первое, что нам необходимо сделать, это зарегистрировать наше новое приложения. Регистрация доступна по адресу https://dev.twitter.com/apps.
На данном этапе нам необходимо будет ввести стандартные необходимые поля: название нашего приложения (Application Name), его описание (Application Name), сайт нашего приложения (Application Website) , организацию (Organization – если есть).
Ниже необходимо выбрать какой тип приложения мы будем использовать Client или Browser. Так как взаимодействия с браузером и пользователем у нас не будет, то мы выбираем Client (Desktop Client).
Дальше выбираем уровень доступа (Default Access type) Чтение-Запись твиттов (Read & Write) или просто чтение (Read-only).
При необходимости можно загрузить иконку для своего приложения.
Callback URL не указываем, так как нет взаимодействия с веб интерфейсом.
После успешной регистрации вашего приложения вам будут предоставлены 2 ключа доступа – это OAuth Consumer key и Consumer secret.
TwitterOAuth PHP Class
Что бы не писать свой велосипед мы воспользуемся готовым классом TwitterOAuth
для доступа к Twitter API разработанным Abraham Williams. Данный класс как раз реализует протокол oAuth и необходимые методы. Данный класс выложен в открытом доступе на GitHub и доступен по адресу https://github.com/abraham/twitteroauth. Или прямая ссылка на скачивание https://github.com/abraham/twitteroauth/zipball/0.2.0-beta3 .
Из этого архива нам понадобятся только 2 файла, которые находятся в папке «twitteroauth».
oAuth авторизация и получение PIN
Обычно, авторизация приложений происходит через нажатие кнопки «Аторизация через Twitter» на сайте, но в Desktop приложениях такого нет, поэтому авторизация происходит через PIN доступ.
Шаг 1
Для начала нам необходимо получить ссылку для доступа нашего приложения к определенному аккаунту и Request коды для получения токенов аутентификации. Для этого воспользуемся следующим кодом:
define('TWITTER_KEY', 'Ваш Consumer key');
define('TWITTER_SECRET', 'Ваш Consumer secret');
include_once 'twitteroauth.php';
/**
* Шаг 1
* Получаем ссылку для регистрации нашего приложения к нужному аккаунту
*
* @return void
*/
function generateAuthLink()
{
$oauth = new TwitterOAuth(TWITTER_KEY, TWITTER_SECRET);
$request = $oauth->getRequestToken();
$requestToken = $request['oauth_token'];
$requestTokenSecret = $request['oauth_token_secret'];
$requestStr = 'request_token=' . $requestToken . "\n";
$requestStr .= 'request_token_secret=' . $requestTokenSecret . "\n";
file_put_contents('request.txt', $requestStr);
// Создаем ссылку
$registerURL = $oauth->getAuthorizeURL($request);
// Показываем ссылку
echo '<a href="' . $registerURL . '">Register with Twitter</a>';
}
Получаем ссылку вида https://twitter.com/oauth/authenticate?oauth_token=<Токен авторизации>. Теперь идем в браузер и авторизуемся на твиттере под аккаунтом, от которого мы будем отправлять сообщения. Теперь в адресную строку вставляем выше сгенерированную ссылку и жмем Enter. Открывается следующая страница:

После этого мы разрешаем приложению доступ к нашему аккаунту , который будет ботом и отправлять сообщения в Twitter. На следующей странице вам будет показан ваш PIN код доступа. В файл «request.txt» были записаны Request коды для получения токенов аутентификации (доступа).
Шаг 2
Далее получим наш oAuth токен уже для непосредственной отправки сообщений. Воспользуемся следующим кодом
/**
* Шаг 2
* Получаем коды доступа
*
* @param $requestToken Токен для запроса кодов дсотупа
* @param $requestTokenSecret Секретный токен для запроса кодов доступа
* @param $pin PIN доступа
* @return void
*/
function generateOauthToken($requestToken, $requestTokenSecret, $pin)
{
$oauth = new TwitterOAuth(TWITTER_KEY, TWITTER_SECRET, $requestToken, $requestTokenSecret);
// Создаем коды доступа по PIN коду
$request = $oauth->getAccessToken($pin);
$accessToken = $request['oauth_token'];
$accessTokenSecret = $request['oauth_token_secret'];
$requestStr = 'accessToken=' . $accessToken . "\n";
$requestStr .= 'accessTokenSecret=' . $accessTokenSecret . "\n";
file_put_contents('access.txt', $requestStr);
echo "ok";
}
Теперь в файле «access.txt» будут необходимые коды, которые вам надо куда-то сохранить и впоследствии использовать.
ВНИМАНИЕ! Если по каким-то причинам не удалось получить access токены, то попробуйте выполнить все с первого шага ещё раз.
Шаг 3
Теперь попробуем отправить наше первое сообщение используя oauth_token и oauth_token_secret.
/**
* Шаг 3
* Отправляем сообщение в Twitter
*
* @param $accessToken Токен доступа
* @param $accessSecret Секретный токен доступа
* @return void
*/
function sendMessage($accessToken, $accessSecret)
{
$oauth = new TwitterOAuth(TWITTER_KEY, TWITTER_SECRET, $accessToken, $accessSecret);
// Проверяем от кого будут идти сообщение
$credentials = $oauth->get("account/verify_credentials");
echo "Connected as @" . $credentials->screen_name;
// Отправляем сообщение
$oauth->post('statuses/update', array('status' => "VeXell robot: hello world"));
}
В результате в моём аккаунте появилась вот такая запись:

В дальнейшем вы можете написать отдельный класс для отправки необходимых вам сообщений в твиттер, автоматически фолловить за кем то или ретвитить нужные вам сообщения с поиском по тегам.
На этом пока что все, хороших вам Твитов. И фолловте меня на Twitter`е http://twitter.com/#!/vexell
Вот мой архив с примером использования бота, который можно скачать тут.
p.s. Только не забудьте изменять необходимые параметры на свои.