morontt.info

Zend Framework → Zend_Service_Twitter, небольшие изменения

Месяц назад обновил версию Zend Framework до 1.12.3 в движке этого блога, потестировал изменения локально, ничего страшного не обнаружил, залил на хостинг. Белый экран. Спустя пару минут вспомнил, что в девелоперском и тестовом окружениях у меня отключены последние сообщения из твиттера. А так же и то, что в последнем (первом) зенде были внесены изменения в Zend_Service_Twitter в связи с обновлением API до версии 1.1

Заметка, в принципе, и не стоит того, чтобы её писать, но по поисковым запросам вижу, что люди ищут, так что поделюсь решением, позволившим починить извлечение последних записей twitter-а.

Базироваться буду на этой записи, чтобы не повторяться, опишу только изменения. Для начала добавим пару строк в конфигурацию (подсвечены)

twitter.callbackUrl = "http://yourhost.com/twitter/callback"
twitter.siteUrl = "http://twitter.com/oauth"
twitter.requestTokenUrl = "https://api.twitter.com/oauth/request_token"
twitter.accessTokenUrl = "https://api.twitter.com/oauth/access_token"
twitter.consumerKey = "dadd58b24026011e2ce361"
twitter.consumerSecret = "ljsvb3fEM28e8c5a4fbb4f38bc378pNRzL5I1CrfV5B"

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

Далее внесём изменения в процесс создания объекта Zend_Service_Twitter. Тут лучше на примере, без лишних слов. Было:

$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();

Стало:

$options = Zend_Registry::get('options');

$config = $options['twitter'];
$config['username'] = $token->getParam('screen_name');
$config['accessToken'] = $token;

$config['oauthOptions']['consumerKey'] = $options['twitter']['consumerKey'];
$config['oauthOptions']['consumerSecret'] = $options['twitter']['consumerSecret'];

$twitter = new Zend_Service_Twitter($config);

$response = $twitter->account->verifyCredentials();

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

g-plus-icon
comments powered by Disqus
Учтите, что комментарии добавляются только при включённом JavaScript в браузере. В ином случае информация хоть и не пропадёт бесследно, но будет отправлена в спам и вряд ли хоть кто-нибудь её увидит.
Хуторная Елена
avatar
Да, надо делить с народом опытом - сама сейчас часто пользуюсь опытом других )))
Ответить
morontt
avatar
В голове много всяческих идей для деления :) Или делёжки. Но как подумаешь - да это же простейшие штуки, про которые уже тысячу раз писали. Или подробно описали в документации (пусть и на английском)
Ответить
bayanruby
avatar
не работает

Message: Could not retrieve a valid Token response from Token URL: Desktop applications only support the oauth_callback value 'oob'
Ответить
morontt
avatar
У меня такая же нога и ничего не болит :) Попробую вечером. Этот код приведен из этого же блога, тут функционирует.
Ответить
morontt
avatar
Поскольку здесь всё работает, то исходить буду из того, что у вас что-то неправильно настроено/сделано.

1. Читали ли вы предыдущую запись? Эта базируется на ней и лишь дополняет её.
2. Какая версия Zend Framework используется? Данный код работает с ZF 1.12.3, а для более старых версий с твиттером можно уже попрощаться, по моему, так как они работали с API, который уже не поддерживается.
3. Совпадают ли все настройки из twitter applications с теми, что прописаны в конфиге?
Ответить
bayanruby
avatar
Спасибо за помощь, вчера получилось самому разобраться:
1 - обновил Zend до 12.3
2 - у меня небыл прописан callback в настройках приложения на dev.twitter.com

и ещё походу надо доступ правильный приложению ставить, там есть:
1 - Read only
2 - Read and Write
3 - Read, Write and Access direct messages

чтобы можно было в твитер что-то писать надо походу 3 вариант выбрать.. не пробовал ещё
Ответить
morontt
avatar
У меня установлен доступ Read and Write - достаточно, чтобы выбирать свои записи и писать туда же. К каждой новой записи этого блога сделан автоматический твит от моего лица :)
Ответить
bayanruby
avatar
Классно, удобно и круто )
Ответить
morontt
avatar
Конечно круто :)
Ответить
bayanruby
avatar
Ещё заметил. В зенд 12.3 теперь так

$twitter-accountVerifyCredentials();
$twitter-statusesUserTimeline()

и у $twitter-accountVerifyCredentials(); лимит 15 запросов в 15 минут

а у $twitter-statusesUserTimeline() 180 запросов в 15 минут

получается из-за того, что до $twitter-statusesUserTimeline() стоит
$twitter-accountVerifyCredentials(); не получается воспользоваться всем лимитом $twitter-statusesUserTimeline();

вот так вот
Ответить
morontt
avatar
О, спасибо за информацию, не знал про такие суровые лимиты :)

Тут у меня всё практически, включая твиты, кешируется на 8 часов, поэтому всё равно. Не мог заметить.
Ответить
11 комментариев Написать что-нибудь
Поля, помеченные asterisk, обязательны для заполнения.
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Веб-сайт вводите в формате http://example.org, при желании, конечно.