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

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

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

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

1
2
3
4
5
6
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. Тут лучше на примере, без лишних слов. Было:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?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();

Стало:

 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;

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

$twitter = new Zend_Service_Twitter($config);

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

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

Комментарии

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

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

1. Читали ли вы предыдущую запись? Эта базируется на ней и лишь дополняет её.
2. Какая версия Zend Framework используется? Данный код работает с ZF 1.12.3, а для более старых версий с твиттером можно уже попрощаться, по моему, так как они работали с API, который уже не поддерживается.
3. Совпадают ли все настройки из twitter applications с теми, что прописаны в конфиге?
ответить
avatar
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 вариант выбрать.. не пробовал ещё
ответить
avatar
morontt
avatar
У меня установлен доступ Read and Write - достаточно, чтобы выбирать свои записи и писать туда же. К каждой новой записи этого блога сделан автоматический твит от моего лица :)
ответить
avatar
bayanruby
avatar
Классно, удобно и круто )
ответить
avatar
morontt
avatar
Конечно круто :)
ответить
avatar
bayanruby
avatar
Ещё заметил. В зенд 12.3 теперь так

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

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

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

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

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

Тут у меня всё практически, включая твиты, кешируется на 8 часов, поэтому всё равно. Не мог заметить.
ответить
avatar
crow
avatar
Hello world!
ответить
avatar
Cron
avatar
Cron test
ответить
13 комментариев Написать что-нибудь
Или войдите, чтобы не заполнять форму:
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Напрограммировано на Go 1.23.3, версия движка 2a6f89b