Twitter – один из наиболее популярных и удобных сервисов, к сожалению, пока среди заграничных веб разработчиков. Но постепенно он проникает и в российские ряды. Я решил написать к нему пару приложений на PHP. Первое с чего я начал разбираться, это авторизация приложения для Twitter‘а.
Перед тем как начать создавать приложение для Twitter‘а, его необходимо зарегистрировать. Я не стану подробно на этом останавливаться. Для это необходимо зайти на twitter.com там в самом низу есть пункт меню – API. Там необходимо заполнить форму, описывающую ваше приложение. После регистрации Вы получите два необходимых ключа для авторизации: “Consumer key” и “Consumer secret”.
После этого уже можно начинать писать приложение для Twitter.
Для авторизации необходим класс TwitterOAuth. Он есть в примере к этой статье. Его можно скачать здесь.
Авторизация происходит в два этапа:
На первом этапе я создал объект 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");
На этом первая часть авторизации закончена.
На второй стадии авторизации я загрузил сохраненные временные ключи из базы данных.
Затем, я создал объект 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.
Полностью исходные файлы можете скачать здесь
Комментарии
07 Sep, 2010в09:50
Все делаю, так как написано, но $request – приходит пустым. Ключи згенерировал, pin ввел – не работает.
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
А можно этим способом автоматически обновлять статусы, допустим по крону, или по совершении каких либо действий?
09 Sep, 2010в16:52
Конечно можно. Собственно эта одна из основных причин, почему я решил взяться за твиттер. Это написать собственного робота, который будет искать интересные статьи по нужным темам и сенять статусы периодически.
Я его сделал, он работает на кроне, и честно говоря, я даже сам периодически читаю статьи, которые он твитит.
09 Sep, 2010в20:50
А можешь поделиться?) У меня был бот работающий на старом апи, а с этим я немогу разобраться(
17 Sep, 2010в21:33
Не молчи, ответь мне в аську)) Всегда можно договориться;)
22 Sep, 2010в19:59
Вот все некогда до блога было добраться.
Вот можешь разобрать этого бота.
Это Ковшенинский. Он намного проще. Я своего переделывал с этого. Мой сложнее. Но чтобы разобраться тебе этого вполне достаточно будет. http://letitbit.net/download/38223.38bbc968bb3e7c031f618139321c84224/twibot.rar.html
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
Ну я таким не занимался, но там по-моему на каждом аккаунте нужно будет доступ приложению.