perl-wordpress-xmlrpc/

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

EnglishRussianUkrainian