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

18 мая 2010

Не знаю, многих ли интересует этот вопрос, но даже если и нет, едва ли это должно удержать меня от написания поста. Существует по крайней мере три способа автоматизировать создание новых записей в WordPress.

Способы эти следующие:

  • Создание отложенных записей. Во время редактирования поста можно точно задать дату и время его публикации. На некоторых хостингах эта фишка может не сработать, но это легко лечится с помощью плагина Missed Scheduled. Удобно, например, если вы уезжаете в отпуск и за время своего отсутствия хотите опубликовать пару постов, но не более того.
  • Импорт новых записей из RSS-лент. Сам по себе WordPress этого не умеет, но его можно «обучить», установив плагин FeedWordPress. Плагин можно использовать не только для создания сплогов, но и для вполне порядочных целей. Например, можно написать скрипт, генерирующий RSS-ленту с новыми записями и импортировать их. Можно также импортировать последние материалы с lenta.ru или блогов своих друзей и отображать где-нибудь ссылки — типа «события в мире» или «мои друзья пишут…». Хотя того же результата можно достичь с помощью виджета RSS и Yahoo Pipes.
  • И последний вариант — использовать XMLRPC.

По-моему сегодня только ленивый не писал свой модуль для работы с XMLRPC, по крайней мере, судя по CPAN (кое-что о Perl и CPAN можно прочитать в моих уроках). Мне почему-то больше всего понравился модуль WordPress::XMLRPC. Наверное из-за наличия слова WordPress в названии и потому что он есть в портах FreeBSD. Как любая программа, которая есть в портах, WordPress::XMLRPC устанавливается очень просто:

portmaster -d /usr/ports/www/p5-WordPress-XMLRPC/

Но есть нюанс ©. Скрипт, использующий WordPress::XMLRPC, может завершится с такой ошибкой:

Can't locate LEOCHARRE/Debug.pm in @INC (@INC contains: ...

Я, честно говоря, не знаю что это за модуль LEOCHARRE::Debug и почему он не был установлен. Может быть, имела место ошибка в портах или perl нужно обновить, но если вы столкнулись с такой же проблемой, то решить ее можно просто закомментировав 5-ю строку в файле /usr/local/lib/perl5/site_perl/5.8.9/WordPress/XMLRPC.pm

package WordPress::XMLRPC;
use warnings;
use strict;
use Carp;
# use LEOCHARRE::Debug;
use vars qw($VERSION $DEBUG);
$VERSION = sprintf "%d.%02d", q$Revision: 1.23 $ =~ /(\d+)/g;

А вот собственно и пример скрипта, создающего новую запись в блоге с поддержкой XMLRPC. В WordPress эта поддержка активируется на странице Параметры → Написание → Удалённая публикация.

#!/usr/bin/perl

use WordPress::XMLRPC;

my $rpc = WordPress::XMLRPC->new(
{
  username => 'admin',
  password => 'qwerty',
  proxy => 'http://example.ru/xmlrpc.php',
}) or die "Error (1) - $!\n";

# если рубрики еще нет, ее нужно создать с помощью
# $rpc->newCategory({name => $category_name})
# а вот метки создаются автоматически

my $hpost = {
  title => 'Тестовая статья',
#  wp_slug => 'testovaya-statya',
# ^^^ не обязательно, особенно когда установлен Rus2Lat
  categories => [ 'Рубрика' ],
  description => 'Привет, мир!<!--more--> Как твои дела сегодня?',
  mt_keywords => 'Метка 1, Метка 2, Метка 3',
};

$rpc->newPost($hpost) or die "Error (2) - $!\n";

Как видите, все просто и понятно. Дополнительную информацию можно почерпнуть из «man WordPress::XMLRPC». А теперь давайте подумаем, какие возможности открывает перед нами автоматический постинг.

  • Самое банальное — можно написать клиент для WordPress. Я правда такими никогда не пользовался, меня веб-интерфейс WP более чем устраивает.
  • Можно настроить кросспостинг из ЖЖ или написать какой-нибудь мешап.
  • Допустим, мы хотим перенести блог из какого-нибудь diary.ru на свой домен или сменить движок сайта на WordPress. С помощью автоматического постинга можно сделать и то и другое без необходимости изучать схему базы данных или какие-то форматы файлов.
  • Можно написать бота для Блогуна или GoGetLinks. Главное — придумать, откуда брать уникальный контент (написать бота для Advego.ru?).
  • Список ограничен лишь вашей фантазией.

Как видите, автопостинг — штука довольно занятная. Это все, что я хотел рассказать сегодня. Есть вопросы — буду рад ответить на них в комментариях. Чтобы не пропустить ничего интересного, не забудьте подписаться на RSS. Удачи!

Дополнение: Нагуглил аналогичный пример использования XMLRPC в Drupal.

Метки: , , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.