Zend Framework → Zend_Service_Twitter, последние записи twitter
Внимание, данная запись устарела. Описанное работоспособно для ZF 1.12.2 (и ниже) и twitter API 1.0, более актуальная запись находится тут → Zend_Service_Twitter, небольшие изменения
Обещался почти месяц назад описать внутренности кода, вытягивающего последние записи из твиттера, так что теперь придётся. Или забью и забуду.
Сложного ничего нет. Необходима лишь документация и гугл. Кроме того, нужно зарегистрировать своё веб-приложение на dev.twitter.com для того, чтобы получить consumer key и consumer secret. Там же вами для приложения будет указан callbackURL, который примет токен для авторизации.
Параметры для аутентификации поместим в application.ini
1 2 3 4 | twitter.callbackUrl = "http://yourhost.com/twitter/callback"
twitter.siteUrl = "http://twitter.com/oauth"
twitter.consumerKey = "dadd58b24026011e2ce361"
twitter.consumerSecret = "ljsvb3fEM28e8c5a4fbb4f38bc378pNRzL5I1CrfV5B"
|
Далее создаём контроллер для твиттера приблизительно такого вида.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php
class TwitterController extends Zend_Controller_Action
{
public function init()
{
}
public function indexAction()
{
}
public function authAction()
{
}
public function callbackAction()
{
}
public function testAction()
{
}
}
|
Ну а теперь по порядку. В методе init() извлекаем конфигурационные данные из бутстрапа и помещаем их реестр. В будущем они нам пригодятся.
1 2 3 4 5 6 7 | <?php
public function init()
{
$options = $this->getInvokeArg('bootstrap')->getOptions();
Zend_Registry::set('options', $options);
}
|
Далее authAction(). В нём будет произведено перенаправление в твиттер, где приложению вами будет разрешено (или не разрешено) взаимодействие с птичьим аккаунтом. В случае успеха произойдёт редирект на указанный ранее callbackURL (т.е. в callbackAction()), где сериализованный токен будет сохранён в БД для дальнейшего использования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php
public function authAction()
{
$options = Zend_Registry::get('options');
$consumer = new Zend_Oauth_Consumer($options['twitter']);
$session = new Zend_Session_Namespace('twitter');
$session->requestToken = serialize($consumer->getRequestToken());
$consumer->redirect();
}
public function callbackAction()
{
$options = Zend_Registry::get('options');
$consumer = new Zend_Oauth_Consumer($options['twitter']);
$session = new Zend_Session_Namespace('twitter');
$params = $this->_request->getParams();
if (!empty($params) && !empty($session->requestToken)) {
$token = $consumer->getAccessToken($this->_request->getParams(),
unserialize($session->requestToken)
);
$tokenString = serialize($token);
$sysParameters = new Application_Model_SysParameters();
$sysParameters->saveOption('twitter_token', $tokenString);
unset($session->requestToken);
return $this->_helper->redirector('index');
} else {
throw new Exception('Invalid access. No token provided.');
}
}
|
В testAction() будет произведена проверка проверка связи, а заодно и извлечены последние записи, ради которых всё и затевалось.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php
public function testAction()
{
$sysParameters = new Application_Model_SysParameters();
$accessToken = $sysParameters->getOption('twitter_token');
try {
if (empty($accessToken)) {
throw new Exception('You are not logged in. Please, try again.');
}
$token = unserialize($accessToken);
$options = Zend_Registry::get('options');
$config = $options['twitter'];
$config['username'] = $token->getParam('screen_name');
$config['accessToken'] = $token;
$twitter = new Zend_Service_Twitter($config);
$response = $twitter->account->verifyCredentials();
if (!$response || !empty($response->error)) {
throw new Exception('Wrong credentials. Please, try to login again.');
}
Zend_Debug::dump($twitter->status->userTimeLine());
} catch (Exception $e) {
echo $e->getMessage();
}
}
|
Подобным же образом можно и твитнуть из приложения. Приведу пример в сокращении.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php
$options = Zend_Registry::get('options');
$config = $options['twitter'];
$config['username'] = $token->getParam('screen_name');
$config['accessToken'] = $token;
$twitter = new Zend_Service_Twitter($config);
$response = $twitter->account->verifyCredentials();
if ($response && empty($response->error)) {
$twitter->status->update('Превед, Медвед!');
}
|
Вот, собственно, и всё. Надеюсь, что мысль не потерялась за нагромождением кода.
Комментарии