← На главную

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

Не знаю, многих ли интересует этот вопрос, но даже если и нет, едва ли это должно удержать меня от написания поста. Существует по крайней мере три способа автоматизировать создание новых записей в 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?).
  • Список ограничен лишь вашей фантазией.

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

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