Автоматический постинг в Twitter

Twitter_wallpaper_1440x900_by_rikulu

У самизнаетекакогосайта есть акккаунт в Твиттере ([ссылка] – фоллоу, плиз). У Твиттера есть 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;
}

Ну вот и все, ребята :) Чтобы не потерять код, сохраните его в каталоге исходников.

6 комментариев on "Автоматический постинг в Twitter"

  1. Не работает код.
    Нет в классе такого метода
    Call to undefined method twitter::updateStatus()

  2. Возможно обновили класс. Читайте документацию, чтоб понять как сейчас статус обновить.

  3. я прочитал и поменял название метода, но мне выдает
    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 тоже

  4. Значит хостер ограничил открытие файлов директивой open_basedir.

  5. stay:

    умоляю, отправьте мне этот класс (ссылка не открывается) на почту. или выложите к себе на сайт… нашёл гдето старую версию класса – не пашет

Got something to say? Go for it!