Pull to refresh

Разработка приложения на основе протокола oAuth для Twitter API на PHP

Reading time5 min
Views11K

В этой статье расскажу про работу с Twitter API по протоколу OAuth на PHP.
Протокол OAuth предоставляет приложению доступ к данным пользователя без передачи ему логина и пароля пользователя. Новые правила авторизации приложений требуют использование технологии “OAuth” для работы с Twitter начиная с 31 августа.
Тестовое приложение, которое получится в итоге, будет уметь выводить ленту сообщений пользователя, ленту последних статусов его фолловеров и по нажатию на кнопку рядом с каждым статусом фолловера или друга можно будет читать всю ленту этого пользователя.

Итак, для начала создадим новое приложение по этой ссылке.

Теперь у нас есть необходимые данные, которые следует сохранить в config.php

define('CONSUMER_KEY', 'Your consumer key');
define('CONSUMER_SECRET', 'You consumer secret');
define('OAUTH_CALLBACK', 'http://yousite.ru/callback.php');


На странице соединения с Твиттером connect.php подключаем вышеуказанные данные и проверяем их наличие:

if (CONSUMER_KEY === '' || CONSUMER_SECRET === '') {
echo 'You need a consumer key and secret to test the sample code. Get one from https://twitter.com/apps'; exit;}


Начинаем процесс подключения (переход на страницу redirect.php):

$content = 'Sign in with Twitter';
<?php print_r($content); ?>


Подключаем библиотеку для работы с Twitter API и данные учетной записи приложения на redirect.php

require_once('twitteroauth/twitteroauth.php');
require_once('config.php');


Создаем TwitterOAuth объект на основе учетной записи нашего приложения:

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

Далее мы получаем временные токены от Твиттера и сохраняем их:

$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];


На основе временного токена отправляем пользователя на авторизацию в Твиттер:

$url = $connection->getAuthorizeURL($token);

Если полученный токен старый, то чистим сессию и отправляем пользователя на страницу для соединения с Твиттером:

if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
$_SESSION['oauth_status'] = 'oldtoken';
header('Location: ./clearsessions.php');


На странице clearsessions.php вызываем:

session_start();
session_destroy();
header('Location: ./connect.php');


Если все прошло успешно, то создаем TwitterOAuth объект на основе учетной записи нашего приложения и временных токенов:

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);


Теперь получаем ключ доступа от Твиттера, который должен быть сохранен для дальнейшего использования:

$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
$_SESSION['access_token'] = $access_token;


Временные токены больше не нужны:

unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);


Далее переходим на страницу нашего прилоежния:

header('Location: ./index.php');

На странице index.php сохраняем токен пользователя в переменную:

$access_token = $_SESSION['access_token'];

Создаем TwitterOAuth объект на основе учетной записи нашего приложения и токенов пользователя:

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

Теперь мы можем использовать различные методы для получения данных пользователя.
Например, получить данные учетной записи пользователя.

$content_user = $connection->get('account/verify_credentials');
$array_user = (array)$content_user;
$user_id=$array_user["id"];


На основе id пользователя можно получить сообщения из его ленты, указав id в массиве параметров (в массиве параметров можно также указывать количество выводимых записей):

$content_friends=$connection->get('statuses/friends_timeline',array('id' => $user_id));

Последние сообщения всех фолловеров пользователя:

$content_followers=$connection->get('statuses/followers', array('id' => $user_id));

Собственная лента сообщений пользователя ( по умолчанию выводится только 20 записей, максимальное количество выводимых — 200).

$content_userline=$connection->get('statuses/user_timeline', array('id' => $user_id,'count'=>200));

По такому же принципу можно вызывать и другие методы.

Общая лента Твиттера: api.twitter.com/1/statuses/public_timeline.xml
Публичные сообщения которые писали вам: api.twitter.com/1/statuses/mentions.xml?count=5&page=1
Мои ретвиты: api.twitter.com/1/statuses/retweeted_by_me.xml?count=5&page=3
Ретвиты мне: api.twitter.com/1/statuses/retweeted_to_me.xml?count=5&page=3
И другие методы.

echo print_r($content_friends); // выводим результат запроса

Результат при получении ленты сообщений будет представлять собой массив из элементов stdClass Object:
[0] => stdClass Object
(
[created_at] => Sat Sep 04 11:01:48 +0000 2010
[in_reply_to_screen_name] =>
[source] => IncredebleTB
[retweeted] =>
[truncated] =>
[in_reply_to_status_id] =>
[in_reply_to_user_id] =>
[contributors] =>
[place] =>
[coordinates] =>
[user] => stdClass Object
(
[show_all_inline_media] =>
[profile_background_image_url] => s.twimg.com/a/1283555538/images/themes/theme16/bg.gif
[favourites_count] => 0
[profile_image_url] => a0.twimg.com/profile_images/1105647496/robot_normal.jpg
[description] => Веб дизайн, разработка веб приложений, создание сайтов
[contributors_enabled] =>
[profile_sidebar_fill_color] => f2f2f2
[url] => dandreev.com
[geo_enabled] =>
[profile_background_tile] =>
[screen_name] => incredibleTB
[lang] => en
[created_at] => Mon Apr 26 20:32:14 +0000 2010
[profile_sidebar_border_color] => a8a8a8
[location] => Москва
[verified] =>
[follow_request_sent] =>
[following] => 1
[profile_background_color] => 9AE4E8
[followers_count] => 99
[protected] =>
[profile_text_color] => 141414
[name] => Дмитрий Андреев
[listed_count] => 0
[profile_use_background_image] => 1
[time_zone] => Quito
[friends_count] => 48
[id] => 137459247
[statuses_count] => 900
[notifications] =>
[utc_offset] => -18000
[profile_link_color] => 0084B4
)

[geo] =>
[retweet_count] =>
[id] => 22967688386
[favorited] =>
[text] => Craigslist Censored: Adult Section Comes Down bit.ly/9evRKN via (@techcrunch)
)

Для доступа к ним можно обратиться например так:

$array_friends = (array)$content_friends;
foreach ($array_friends as $friends_sets)
{
$friends_sets=(array)$friends_sets; // преобразуем stdClass Object в массив
$friend_name=$friends_sets["user"]->name; // доступ к полям stdClass Object
}


Библиотеку для oAuth на php можно скачать здесь.
Приложение, которое получилось в итоге, здесь. Приложение содержит 3 ленты с пагинацией (фолловеры, друзья и персональная лента какого-либо пользователя). Дополнительно подключена библиотека jTweetsAnywhere, позволяющая выводить информацию о каждом пользователе (кнопка Connect with Twitter вверху).
Tags:
Hubs:
+35
Comments22

Articles