У самизнаетекакогосайта есть акккаунт в Твиттере ([ссылка] – фоллоу, плиз). У Твиттера есть API, поэтому статьи и новости туда попадают автоматически. Как сделать автоматический постинг в Twitter я и расскажу в этом посте.
Т.к. в Twitter длина сообщения ограничена 140 символами, в которые надо вместить заголовок, частичку анонса и ссылку, то весь этот текст надо заранее подготовить.
Дальше я попытаюсь из кусоков кода своей CMS собрать надеюсь-что-работающий вариант кода. В общем главное – передать смысл, а не написать оптимизированный, готовый к употреблению код.
Подготовка
function twitThis($caption, $text, $url) {
// :)
}
И так. У нас есть: заголовок, анонс, ссылка.
С заголовком мы ничего поделать не можем. Он важный и его никак не обрежешь (лучше обрезать анонс). Поэтому просто пропускаем.
Анонс. Нам надо вырезать теги. Рекомендую использовать функцию strip_tags_smart от Рината Нассибулина.
$text = strip_tags_smart($text);
Ссылка. На бегиннере она выглядит как-то так: http://www.avtobeginner.ru/news/2009/08/21/356/porsche-obnovlyaet-legendarnuyu-model-911.html. Естественно такую простыню мы постить в Твиттер не будем. Ее надо укоротить.
Не мудрствуя лукаво, я написал по-простому:
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlenpred' . PHP_EOL,
'content' => 'link[url]=' . urlencode($url),
),
));
$url = trim(file_get_contents('http://tweetburner.com/links', false, $context));
И получим что-то типа http://twurl.nl/6mv7lm, что намного компактнее.
Дальше все просто: склеиваем заголовок, частичку анонса и ссылку:
$maxTextLength = 160 - strlen($url) - 4;
$twText = substr_plain($caption . ': ' . $text, $maxTextLength) . '... ' . $arItem['detail_url'];
Функция substr_plain – это такая волшебная штука, которая обрезает строку не по крайнему символу, а по ближайшему пробелу в меньшую сторону. Для красоты :)
function substr_plain($str, $length = null) {
if (mb_strlen($str) <= $length) {
return $str;
}
$strPos = mb_strpos($str, ' ', $length);
if ($strPos > 0) {
return mb_substr($str, 0, $strPos);
}
else {
return mb_substr($str, 0, $length);
}
}
Постинг
Задача простая – отправить подготовленный текст в Твиттер. Для этого я использую вот этот класс.
Примерно так:
// На самом деле константы определяются не тут, а в файле конфигурации
define(CONFIG_TWITTER_USERNAME, 'имя в твиттере');
define(CONFIG_TWITTER_PASSWORD, 'пароль от твиттера');
$TwitterClient = new Twitter(CONFIG_TWITTER_USERNAME, CONFIG_TWITTER_PASSWORD);
// Посылаем запрос
if ($result = $TwitterClient->updateStatus($twText)) {
/* помечаем запись как отправленную в твиттер */
return true;
}
else {
return false;
}
Ну вот и все, ребята :) Чтобы не потерять код, сохраните его в каталоге исходников.



Не работает код.
Нет в классе такого метода
Call to undefined method twitter::updateStatus()
Возможно обновили класс. Читайте документацию, чтоб понять как сейчас статус обновить.
я прочитал и поменял название метода, но мне выдает
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in
safe_mode – выключен
open_url тоже
Значит хостер ограничил открытие файлов директивой open_basedir.
умоляю, отправьте мне этот класс (ссылка не открывается) на почту. или выложите к себе на сайт… нашёл гдето старую версию класса – не пашет
Ловите: [ссылка]