TweetGT: пример использования Zend_Service_Twitter через OAuth

TweetGT это простое приложение умеющее общаться с Twitter. Я его создал потому что не мог найти приемлемого способа передачи гео данных из tweet.

Исходные файлы вы можете найти на github, так что у вас есть возможность протестировать проект. В этом уроке я хочу сконцентрироваться на Twitter OAuth интеграции, которая была добавлена через Zend_Service_Twitter в версии 1.10.6.

Для реализации функциональности я буду использовать модель Application_Model_Twitter, которая хранит защищённые данные для Zend_Service_Twitter.

Интеграция OAuth подразумевает, что у нас есть специальный ключ от twitter.

Вход: Перенаправление на Twitter

Действие loginAction выглядит следующим образом:

public function loginAction() { $twitter = $this->_helper->twitter(); $session = new Zend_Session_Namespace(); $session->requestToken = $twitter->getRequestToken(); // перенаправление $twitter->loginViaTwitterSite(); }

Тут важно сконцентрироваться на 3х вещах. Во-первых я использую специального помощника, который вернёт мне инстанцию модели. Нам незачем дублировать код, так что воспользуемся данной возможностью.

Как только мы подключаемся к Twitter, то сразу же передаём ему ключ. После этого мы используем сессию для того, чтобы иметь доступ к данным пользователя после авторизации на Twitter.

После этого мы просто перенаправляемся на сайт Twitter.

Инстанцируем модель

Модель инстанциируется в помощнике действия. Для того чтобы залогиниться через OAuth, нам необходимо передать ключ и секрет пользователя. Я решил размещать подобные данные в application.ini. Так же нам необходимо сконфигурировать Zend_Service_Twitter чтобы обозначить URL обратного действия:

class Application_Controller_Helper_Twitter extends Zend_Controller_Action_Helper_Abstract { /** * @var Application_Model_Twitter */ protected $_twitter; public function direct() { if (!$this->_twitter) { $controller = $this->getActionController(); $config = array(); $session = new Zend_Session_Namespace(); if ($session->accessToken) { $token = $session->accessToken; $config[‘username’] = $token->screen_name; $config[‘accessToken’] = $token; } $options = $controller->getInvokeArg(‘bootstrap’)->getOptions(); $config[‘consumerKey’] = $options[‘twitter’][‘consumerKey’]; $config[‘consumerSecret’] = $options[‘twitter’][‘consumerSecret’]; $request = $controller->getRequest(); $url = $request->getScheme() . ‘://’ . $request->getHttpHost() . $request->getBaseUrl(); $config[‘callbackUrl’] = $url . ‘/callback’; $this->_twitter = new Application_Model_Twitter($config); } return $this->_twitter; } }

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

Обратный вызов

В качестве функции обратного вызова мы используем класс aCallbackController.

Код:

class CallbackController extends Zend_Controller_Action { public function indexAction() { $session = new Zend_Session_Namespace(); if (!empty($this->getRequest()->getQuery()) && isset($session->requestToken)) { // Достаём модель $twitter = $this->_helper->twitter(); /* @var $twitter Application_Model_Twitter */ // передаём данные $accessToken = $twitter->getAccessToken($this->getRequest()->getQuery(), $session->requestToken); // записываем в сессию $session->accessToken = $accessToken; unset($session->requestToken); // редирект на главную $this->_helper->redirector(‘index’, ‘index’); } else { throw new Zend_Exception(‘Invalid callback request. Oops. Sorry.’); } } }

Вот и всё. Теперь мы авторизированы на Twitter и можем делать всё, что только в голову придёт 🙂

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/laLM0yI2ccc/lessons.php

Источник: lred.ru

Оцените статью
новости для мужчин