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

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

Раздел: PHP, Twitter, 22 августа 2009 4 комментария
Автоматический постинг в Twitter

У самизнаетекакогосайта есть акккаунт в Твиттере ([ссылка] – фоллоу, плиз). У Твиттера есть API, поэтому статьи и новости туда попадают автоматически. Как сделать автоматический постинг в Twitter я и расскажу в этом посте.

Т.к. в Twitter длина сообщения ограничена 140 символами, в которые надо вместить заголовок, частичку анонса и ссылку, то весь этот текст надо заранее подготовить.

Дальше я попытаюсь из кусоков кода своей CMS собрать надеюсь-что-работающий вариант кода. В общем главное – передать смысл, а не написать оптимизированный, готовый к употреблению код.

Подготовка

1.
2.
3.
function twitThis($caption, $text, $url) {
    // :)
}

И так. У нас есть: заголовок, анонс, ссылка.

С заголовком мы ничего поделать не можем. Он важный и его никак не обрежешь (лучше обрезать анонс). Поэтому просто пропускаем.

Анонс. Нам надо вырезать теги. Рекомендую использовать функцию strip_tags_smart от Рината Нассибулина.

1.
$text = strip_tags_smart($text);

Ссылка. На бегиннере она выглядит как-то так: http://www.avtobeginner.ru/news/2009/08/21/356/porsche-obnovlyaet-legendarnuyu-model-911.html. Естественно такую простыню мы постить в Твиттер не будем. Ее надо укоротить.

Не мудрствуя лукаво, я написал по-простому:

1.
2.
3.
4.
5.
6.
7.
8.
9.
$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, что намного компактнее.

Дальше все просто: склеиваем заголовок, частичку анонса и ссылку:

1.
2.
3.
$maxTextLength = 160 - strlen($url) - 4;
 
$twText = substr_plain($caption . ': ' . $text, $maxTextLength) . '... ' . $arItem['detail_url'];

Функция substr_plain – это такая волшебная штука, которая обрезает строку не по крайнему символу, а по ближайшему пробелу в меньшую сторону. Для красоты :)

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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);
    }
}

Постинг

Задача простая – отправить подготовленный текст в Твиттер. Для этого я использую вот этот класс.

Примерно так:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// На самом деле константы определяются не тут, а в файле конфигурации
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;
}

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

Смотрите также:

4 комментария

  1. Undercovers пишет:

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

  2. Knave пишет:

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

  3. Undercovers пишет:

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

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

Оставить комментарий


© 2008–2010 Копилефт и все такое...