Пост для тех разработчиков, кто собирается твиттовать автоматически по крону или по событию (не пользовательская аутентификация (browser auth)), сразу предупреждаю, довольно запутано. Сейчас использую на одном сайте, которые твиттует по крону статус станции для велосипедов.
Написал include чтобы твиттовать в Twitter с помощью PIN-based OAuth. Модуль twitter слишком "большой" для этого.
Использована статья http://articles.sitepoint.com/article/oauth-for-php-twitter-apps-part-1
Используется класс TwitterOAuth от Abraham Williams, смодифицироанный по статье, я его сразу включил в архив.
Использование:
1. Естественно регистриуем свой сайт в http://dev.twitter.com/apps/new , в Application Type выбираем Client, а Default Access type в Read & Write!. Остальные поля неважны, записываем выданные consumer и secret keys.
2. В файлах архива и в коде YOURMODULE меняем на название своего модуля всюду.
2. Теперь прописываем в своём модуле следующее, доступ по меню значит админский:
// меню настройки вашего модуля уже можеть быть!
$items['admin/settings/YOURMODULE'] = array(
'title' => 'YOURMODULE settings',
'page callback' => 'drupal_get_form',
'page arguments' => array('YOURMODULE_settings'),
'access arguments' => array('administer site configuration'),
);
//...
//а вот это обязательно:
$items['admin/settings/YOURMODULE/twitter/register'] = array(
'title' => 'Twitter register',
'description' => 'Call register for OAUTH in twitter.',
'page callback' => 'YOURMODULE_twitter_register',
'access arguments' => array('administer site configuration'),
'file' => 'YOURMODULE.twitter.inc',
'type' => MENU_CALLBACK,
);
$items['admin/settings/YOURMODULE/twitter/validate'] = array(
'title' => 'Twitter validate',
'description' => 'Call validate for OAUTH in twitter.',
'page callback' => 'YOURMODULE_twitter_validate',
'access arguments' => array('administer site configuration'),
'file' => 'YOURMODULE.twitter.inc',
'type' => MENU_CALLBACK,
);
//...
return $items;
}
...
/**
* Settings page of YOURMODULE module.
*/
function YOURMODULE_settings() {
$form = array();
// ....
module_load_include('inc', 'YOURMODULE', 'YOURMODULE.twitter');
$form += YOURMODULE_twitter_settings();
// ....
return system_settings_form($form);
}
4. Вылаживаем архив в модуль, как описано в hook_menu=>item=>file.
5. Заходим в настройки вашего сайта по адресу: http://вашсайт/admin/settings/YOURMODULE
6. Следуем инструкции, внизу будет ругаться что не сделано, кликаем и вводим.
7. Твиттуем в вашем модуле:
$status = 'bla-bla-bla';
$response = YOURMODULE_tweet($status);
if (is_object($response) && $response->error) {
watchdog('YOURMODULE', 'Error occured while twitting: %response', array('%response'=>print_r($response,1)), WATCHDOG_ALERT);
}
Следим за ватчдогом, говорят что PIN сбрасывается время от времени (если не использовать некоторое время, но черт его знает), или меняем ватчдог на другой вид алерта (почта, смс и тд).
Вложение | Размер |
---|---|
yourmodule.twitter.zip | 11.17 КБ |
Комментарии
Здорово. А почему Client, а не Web?
И не проще ли было загонять в твиттер RSS-ленту сторонним сервисом?
Я к тому, что PIN необходимо постоянно обновлять, а в случае с web-приложением вам дали два ключа, и они вечные.
Сторонний сервис - период обновления большой, а клиент потребовал 5 минутный, чтобы клиенты были уверены что на станции есть велосипеды или свободные док-станции.
Web это когда юзер приходит и региться в вашем сайте с помощью своего твиттер-аккаунта. А какой юзер в вашем модуле? Вот и взял PIN. Ну это моё имхо, может ошибаюсь.
Не обязательно. Просто по этим двум ключам вы получаете токен, по которому можно делать запросы на твит-аккаунт. Вам нужно запросить токен со своего аккаунта и хранить его в БД, обновлять его не нужно.
Ну значит надо и добавить эту возможность. А скорее всего и всех: http://dev.twitter.com/pages/auth_overview