Twitter API. Авторизация приложений | DAndreev.com

Twitter API. Авторизация приложений

twitter_api_thumbnail

Twitter – один из наиболее популярных и удобных сервисов, к сожалению, пока среди заграничных веб разработчиков. Но постепенно он проникает и в российские ряды. Я решил написать к нему пару приложений на PHP. Первое с чего я начал разбираться, это авторизация приложения для Twitter‘а.

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

Перед тем как начать создавать приложение для Twitter‘а, его необходимо зарегистрировать. Я не стану подробно на этом останавливаться. Для это необходимо зайти на twitter.com там в самом низу есть пункт меню – API. Там необходимо заполнить форму, описывающую ваше приложение. После регистрации Вы получите два необходимых ключа для авторизации: “Consumer key” и “Consumer secret”.

Ключи авторизации

После этого уже можно начинать писать приложение для Twitter.

Для авторизации необходим класс TwitterOAuth. Он есть в примере к этой статье. Его можно скачать здесь.

Авторизация происходит в два этапа:

  1. Создание временных ключей и генерация ссылки, по которой twitter выдаст PIN для приложения.
  2. С помощью временных ключей и PIN’a генерируются постоянные ключи.

1 Этап. Генерация временных ключей.

На первом этапе я создал объект TwitterOAuth, используя только те два ключа, которые выдал Twitter при регистрации приложения (“Consumer Key” и “Consumer Secret”).

Затем создал два временных ключа, которые нужны для получения PIN’a и постоянных ключей.

Поскольку временные ключи нужны на второй стадии авторизации, их нужно сохранить.
Я использовал для этого временную таблицу в базе данных. Хотя их можно и просто в файл записать.

После я сгенерировал ссылку, пройдя по которой, получил PIN для моего приложения.


$oauth = new TwitterOAuth($consumer_key, $consumer_secret);

// получаем временные ключи для получения PIN'а
$token = $oauth->getRequestToken();

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

// сохраняем их во временную таблицу базы данных
mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_BASE);		

mysql_query("DROP TABLE IF EXISTS `temp`;");
mysql_query("CREATE TABLE `temp`(id INT AUTO_INCREMENT PRIMARY KEY, request_token VARCHAR(255), request_token_secret VARCHAR(255));");

mysql_query("INSERT INTO `temp` VALUES (null, '{$request_token}', '{$request_token_secret}' )");

// а теперь создаем ссылку для получения PIN'а
$request_link = $oauth->getAuthorizeURL($token);

// и на этом этапе заканчиваем выполнение скрипта
// выведя необходимую ссылку
die("Request here: <a href=\"{$request_link}\" > {$request_link}</a> \n");	

На этом первая часть авторизации закончена.

2 Этап. Генерация постоянных ключей.

На второй стадии авторизации я загрузил сохраненные временные ключи из базы данных.

Затем, я создал объект TwitterOAuth, используя сохраненные ключи.

А теперь, я и получил постоянные ключи, введя полученный PIN.
Их тоже желательно сохранить, чтобы не повторять всю эту процедуру, при каждом случае, когда Вам нужно получить или отправить данные в Twitter.

Теперь можно авторизоваться уже с постоянными ключами на Твиттере и проверить, работает ли всё это.


// сначала получим сохраненные временные ключи
mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_BASE);

$result = mysql_query("SELECT * FROM `temp`");
$token = mysql_fetch_assoc($result);

$request_token = $token['request_token'];
$request_token_secret = $token['request_token_secret'];

// создаем объект авторизации, третим и четвертым параметром
// передаем временные ключи авторизации
$oauth = new TwitterOAuth($consumer_key, $consumer_secret,
				 $request_token, $request_token_secret);	

// получаем постоянные ключи авторизации
// используя PIN
$request = $oauth->getAccessToken($pin);

$access_token = $request['oauth_token'];
$access_token_secret = $request['oauth_token_secret'];

// А теперь можно проверить
$twitter = new TwitterOAuth($consumer_key, $consumer_secret,
						$access_token, $access_token_secret);

$credentials = $oauth->get("account/verify_credentials");	

echo "Вы аторизовались под ником: @". $credentials->screen_name ."\n";

Заключение

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

Также уже полученный PIN я тоже передаю скрипту посредством метода GET.

Полностью исходные файлы можете скачать здесь

Retweet

Похожие статьи

Комментарии

yAnTar
07 Sep, 2010в09:50

Все делаю, так как написано, но $request – приходит пустым. Ключи згенерировал, pin ввел – не работает. :(

Dmitriy
07 Sep, 2010в16:04

Ну не видя кода, трудно сказать в чем причина. Смотри, принцип такой, сначала генерируется пара временных ключей на основе CONSUMER_KEY и CONSUMER_SECRET, затем на этих временных ключайх генрируется ссылка для получения пина. Эти временные ключи и пин надо сохранить. Потом заново создается обект OAuth, только уже на основе CONSUMER_KEY, CONSUMER_SECRET и сохраненных временных ключей. И при помощи PIN’а получаются постоянные ключи.
И теперь обект OAuth создается с параметрами CONSUMER_KEY, CONSUMER_SECRET и постоянными ключами.

Олег
09 Sep, 2010в16:15

А можно этим способом автоматически обновлять статусы, допустим по крону, или по совершении каких либо действий?

Dmitriy
09 Sep, 2010в16:52

Конечно можно. Собственно эта одна из основных причин, почему я решил взяться за твиттер. Это написать собственного робота, который будет искать интересные статьи по нужным темам и сенять статусы периодически.
Я его сделал, он работает на кроне, и честно говоря, я даже сам периодически читаю статьи, которые он твитит.

Олег
09 Sep, 2010в20:50

А можешь поделиться?) У меня был бот работающий на старом апи, а с этим я немогу разобраться(

Олег
17 Sep, 2010в21:33

Не молчи, ответь мне в аську)) Всегда можно договориться;)

Dmitriy
22 Sep, 2010в19:59

Вот все некогда до блога было добраться.
Вот можешь разобрать этого бота.
Это Ковшенинский. Он намного проще. Я своего переделывал с этого. Мой сложнее. Но чтобы разобраться тебе этого вполне достаточно будет. http://letitbit.net/download/38223.38bbc968bb3e7c031f618139321c84224/twibot.rar.html

Alexander
22 Nov, 2010в15:18

Не совсем понимаю, как получить pin.
По ссылке из 1-го этапа я перехожу, twitter меня спрашивает “Allow UPost2Tw access?”, нажимаю “allow”, после этого меня редиректит на my_callback.php?oauth_token=ZZZ.

my_callback.php – это путь к моему скрипту, который я указываю в настройках аккаунта, ZZZ – это возвращается тот же самый токен, что приходит от твиттера на 1-м этапе ($token['oauth_token']).

Подскажите, как быть ?

Дмитрий Андреев
08 Apr, 2011в10:33

Александр, добрый день.
А вы попробуйте в настройка API вашего приложения в самом твиттере включить опцию “Application Type” в положение “Client”, а не “Browser”, тогда у Вас не должно никуда редиректить, а просто появится страничка, где большими буквами написан PIN.

Антон
12 Jun, 2011в10:23

Второй этап строка 18 вы передаете параметр $pin, а где он определяется не понятно? :(

Дмитрий Андреев
12 Jun, 2011в12:01

Добрый день, Антон. В конце первого этапа выводится ссылка. По ней необходимо пройти. Твиттер может запросить авторизацию. Её необходимо разрешить. И тогда загрузится страница, там большими буквами будет написан этот PIN.

луиза
05 Mar, 2013в04:03

Если допустим я хочу затвиртить по 10 разным аккаунтом скриптом множество постов, мне нужно для каждого аккаунта проходить регистрацию приложения?

Дмитрий Андреев
25 Apr, 2013в16:37

Ну я таким не занимался, но там по-моему на каждом аккаунте нужно будет доступ приложению.

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