PHP → Twitter отправка сообщений и работа с Twitter API

Стала задача написать приложение на стороне сервера (PHP), которое должно  периодически отправлять сообщение в twitter ленту (скажем при появлении новости на сайте), а также отсылать Direct Message некоему пользователю при наступлении определенных событий.

Грубо говоря необходимо реализовать взаимодействие PHP с Twitter API.

С недавних пор сервис twitter использует для авторизации вместо Basic Authentication более безопасный метод Open Authorization (OAuth).

Этот метод позволяет аутентифицировать пользователя не передавая непосредственно имя пользователя и пароль, а используя так называемые «токены» (tokens), что в свою очередь позволяет снять с разработчиков ответственность за хранение паролей пользователей.

Первое, что необходимо сделать – это зарегистрировать будущее приложение (если можно так выразиться) на странице Twitter для разработчиков – http://dev.twitter.com/apps/new

В предложенных полях необходимо заполнить информацию о приложении, включая описание, название, обратные ссылки и т.д.

Важными являются два пункта:

Application Type (тип приложения). Нас интересует клиенский тип приложений (Client, пользователю будет выдан уникальный PIN-код, который необходимо будет ввести). Тип приложения Browser – соответствует веб-скриптам. Разница в том, что после авторизации приложения типа Browser идет автоматический редирект на URL скрипта.

Default Access Type (тип доступа по умолчанию). Рекомендую выставить в Read & Write, чтобы позволить не только читать пользовательские данные, но и изменять их (отправлять сообщения к примеру).

Остальные параметры не критичны и заполнить их можете на свое усмотрение. Далее вводим проверочный код и попадаем на страницу настроек приложения, где получаем первые два ключа CONSUMER_KEY и CONSUMER_SECRET.

Далее необходимо скачать TwitterOAuth PHP библиотеку (автор Abraham Williams, на момент написания статьи последняя версия 0.2.0-beta3).

Затем необходимо внести некоторые изменения в код библиотеки, описанные в материале Twitter API: PIN-based OAuth Using PHP (автор Konstantin Kovshenin). Изменения направлены на то чтоб переделать веб-ориентированную аутентификацию (когда пользователь должен кликнуть на кнопку авторизации) на аутентификацию с PIN-кодом, предназначенную для пользовательских приложений.

Далее следуют ряд действий по регистрации необходимые для получения request_token, request_token_secret а затем и access_token, access_token_secret ключей.

Что, как и в какой последовательности делать очень хорошо расписано в данной статье: OAuth for PHP Twitter Apps, Part 1 (автор Raj Deut).

Не вижу смысла повторяться, статья на английском но изложена в доступной форме. Все описанные выше действия выполняются лишь один раз для конкретного аккаунта и, при следовании приведенным по ссылке выше инструкциям, не отнимут у вас много времени.

В заключение, вот как будет выглядеть скрипт отправки личного сообщения в twitter, а также отправки текста «hello world» в статус:

#twitter.php

// Ключи CONSUMER_KEY и CONSUMER_SECRET полученные при регистрации приложения
// на странице http://dev.twitter.com/apps/new
$consumer_key = '***';
$consumer_secret = '***';

// Полученные токены/ключи, читаем из файла
$accessToken = file_get_contents("access_token");
$accessTokenSecret = file_get_contents("access_token_secret");

// Создаем twitter API объект
require_once("twitteroauth.php");
$oauth = new TwitterOAuth($consumer_key, $consumer_secret, $accessToken, $accessTokenSecret);

// Отсылаем API запрос для проверки полномочий
$credentials = $oauth->get("account/verify_credentials");
echo "Успешно подключены как пользователь @" . $credentials->screen_name;

// Печатаем "hello world" в статус
$oauth->post('statuses/update', array('status' => "hello world"));

// Отправляем direct message (приватное сообщение) другому пользователю
$send_str = 'Hi, friend! Test direct message';
$parameters = array('screen_name' => 'Sauron918', 'text' => $send_str);
$method = 'direct_messages/new';
$oauth->post($method, $parameters);