После того как 30 июня 2010 года в Twitter запретили механизм базовой аутентификации, все действия по работе с Twitter API (требующие аутентификации) нужно выполнять с помощью нового механизма OAuth. На первый взгляд новый API ужасно сложный... но на самом деле всё гораздо проще, чем кажется.
В этой статье я покажу, как с помощью PHP, используя Twitter API, можно изменить статус в Twitter (послать сообщение).
Предварительная настройка для использования Twitter API
Раньше при использовании механизма базовой аутентификации все, что было нужно для работы с Twitter — это логин и пароль. Новый механизм OAuth более сложен, но в то же время значительнее безопаснее — даже если ваши данные перехватят при обращении к Twitter API, ваш логин и пароль от Twitter останутся в тайне.
Для использования Twitter API необходимо зарегистрировать свое приложение:
- Зайдите на dev.twitter.com под своим логином и паролем, затем нажмите на ссылку "Register an app".
- Заполните форму — скорее всего введенные данные никто не проверяет со стороны Twitter, но лучше все заполнить по уму. Главное нужно выбрать в пункте "Default Access type" опцию "Read and Write". Нажмите кнопку "Register Application".
- Теперь вам нужно 4 ключа для работы вашего приложения. Перейдите по ссылке "View Your Applications", а потом нажмите на название вновь созданного приложения. Прокрутите страницу вниз и скопируйте "Consumer Key" и "Consumer Secret".
- Дальше нужно нажать в правом меню ссылку "My access token" и скопировать: "Access Token (oauth_token)" и "Access Token Secret (oauth_token_secret)".
Нервничаете? Расслабьтесь, мы почти закончили — последнее, что нужно сделать: скачать библиотеку Abraham Twitter OAuth. В архиве библиотеки несколько файлов, но нам нужны только два: twitteroauth/twitteroauth.php и twitteroauth/OAuth.php.
Интеграция Twitter и PHP OAuth
Теперь напишем исходный код для опубликования сообщения в Twitter. Для этого достаточно нескольких строчек: нужно просто подключить библиотеку TwitterOAuth и использовать ключи для доступа к Twitter.
<?php
require_once 'TwitterOAuth.php';
define("CONSUMER_KEY", "<Вставить Consumer Key>");
define("CONSUMER_SECRET", "<Вставить Consumer Secret>");
define("OAUTH_TOKEN", "<Вставить Access Token (oauth_token)>");
define("OAUTH_SECRET", "<Вставить Access Token Secret (oauth_token_secret)>");
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
$content = $connection->get('account/verify_credentials');
$connection->post('statuses/update', array('status' => 'Сообщение в Twitter автоматом из PHP :) .'));
?>
Вот и все.
| Вложение | Размер |
|---|---|
| Пример и нужные файлы библиотеки Abraham Twitter OAuth | 9.72 КБ |
Категории этой статьи
Дата опубликования
- 2011 » 01/2011 » 01/17/2011
Нашли ошибку?

Комментарии
Спасибо большое за простую и понятную статью! Реально помогла!!
Интересует второй вопрос :) количество постов приложения на один аккаунт.
или ограничение постов накладывается вообще на аккаунт?
Вот, что знаю из технических ограничений:
Количество апдейтов (сообщений) – не боле 1000 в сутки.
Количество прямых сообщений другим пользователям – не более 1000 в сутки.
Ограничение на операции с акаунтом (ограничение API Twitter) – не более 100 в час.
Текущие технические ограничения для аккаунтов Twitter:
Источник: http://support.twitter.com/entries/15364-about-twitter-limits-update-api-dm-and-following
Fatal error: Call to undefined function curl_init() in Z:\home\0.0.0.0\www\Twi\twitteroauth\twitteroauth.php on line 199
Скорее всего на вашем хостинге не установлена библиотека curl.
Не совсем понял, а как постить сообщения из текстового файла с помощью этого скрипта?
Да как угодно
. Ну если хотите, то можно так:
<? $text = file_get_contents("text-file.txt"); $connection->post('statuses/update', array('status' => $text)); // или так $text_array = file("text-file.txt"); // будет создан массив, каждый элемент которого будет строкой файла foreach($text_array as $text) { $connection->post('statuses/update', array('status' => $text)); } ?>Это уже на усмотрение программиста.
КААААПЕЦ, я пол дня искал облазил все буржуйские сайты
единственный нормальный пост в сети, спасибо :)
Статья то что надо, добавил функционал на сайт www.vezu-nesu.ru при добавлении точки идёт автоматический постинг в твиттер пользователю @vezu_nesu спасибо за статью!
Спасибо за статью!
подскажите как сделать таймаут в 2 - 3 мин. публикации постов с текстовго файла
<?php
require_once 'TwitterOAuth.php';
define("CONSUMER_KEY", "<mJBlxUEllYSYlLen1OQ>");
define("CONSUMER_SECRET", "<Вставить Consumer Secret>");
define("OAUTH_TOKEN", "<Вставить Access Token (oauth_token)>");
define("OAUTH_SECRET", "<Вставить Access Token Secret (oauth_token_secret)>");
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
$content = $connection->get('account/verify_credentials');
$text = file_get_contents("text-file.txt");
$connection->post('statuses/update', array('status' => $text));
?>
Можно просто использовать sleep(), но тогда время выполнения скрипта может превысить разрешенный лимит.
Самым идеальным вариантом является использование cron.
Или же можно вызывать функцию публикации нового поста из файла при загрузке страницы пользователями сайта, при этом проверяя время последней публикации (можно изменять время последнего изменения файла с постами и сверяться с ним), выбирая нужный пост для публикации и не выполнять опубликование, если все посты опубликованы.
Вариантов много, нужно точнее знать, в каком виде храняться посты.
Почему то отправил только тестовое сообщение.
После из файла вообще не отправляет ?
Какие то есть ограничения ?
Все, что я знаю про ограничения — написано выше в комментарии от 01/02/2011 - 17:07
А в библиотеке с этим ничего не нужно менять ?
А то в твиттере предыдущее сообщение висит уже час, а остальных нет.
Хотя и cron настроен и скрипт выполняется.
Нет, я все делал как описано выше в статье, все работало и отправлялось. Возможно, при отправке одного из сообщений Twitter завис.
Спасибо, хорошая библиотека.
Возникла сдледующая проблема: автопоcтинг идет нормально, но через некоторое время (примерно через месяц) авторизация пропадает, скрипт возвращает 401 'status' => string '401 Unauthorized', после заведения новой регистрации и замены ключей начинает снова работать нормально. Однако и это прератилось, теперь после обновления сайта dev.tvitter.com аворизоваться не удается. Не получается также удалить старые приложения.
Не знаете в чем может быть проблема?
Только что попробовал опубликовать - все нормально работает. Получал ключи полгода назад.
Причина оказалась в следующем: в настройках приложения на dev.twitter (вкладка settings) указан Application type - Read and Write, но во вкладке Details Access level - Read-only по этому не идет автопостинг. Не знаете как изменить Access level на Read & Write ?
столкнулся с той же проблемой - самое смешное что настройка поменялась после нажатия кнопки "Recreate my access token" на странице редактирования приложения, не знаю почему изменилось - скорее всего какой-то глюк у самого твиттера...
Спасибо, отличная статья !
Спасибо большое! Работает! Ставлю + и страницу в закладки.
Сначало я прочитал наблы Котерова. Притопывание, прихлопывания, самолюбование и...в целом мало, что практически ценного (хотя для общего развития полезно)
Тут предельно ясно и конктретно, большое спасибо!
Хочу отметить: есть проблема с кодировкой. Твиттер понимает только UTF8.
клевая статейка, оч. помогла. Вот только я не разберусь никак водной вещи, каким образом постить картинки и ссылки?
Картинки можно публиковать только ссылками на них, а ссылки прямым текстом в сообщении - то есть с http://
Возникла проблема, решение которой в комментах не нашел... Отправил тестовое сообщение! Запостилось моментально.. Следом отправил второе, не запостилось! Следом отправил третье, не запостилось! И так сообщений 10.. Но после 1-го ничего так и небыло.. В чем проблема?
Возможно, вы отправляете сообщения с одинаковым текстом - твиттер не позволяет постить одинаковые сообщения.
Большое спасибо за маленькую, но ёмкую статью!
Была проблема с ошибкой "Fatal error: Call to undefined function hash_hmac", решил заменой страндартной функции hash_hmac() на функцию custom_hmac(), взятую с http://www.php.net/manual/en/function.hash-hmac.php
А эти ограничения действуют для аккаунта или для написанного приложения (API) ?
Эти ограничения касаются и API в том числе.
Добавить комментарий