PHP скрипт автоматического постинга в WordPress через XMLRPC

Пишу скорее для себя, чтоб не забывать :)

Вообщем-то подобных постов (про автопостинг в WP) в инете достаточно много, но у меня почему-то ни одна из step-by-step инструкций сходу не заработала. Ну, кроме одной :) Правда, напильник всё-же понадобился.

А задача была такая: в некой таблице БД забиты строки - текст, заголовок, рубрика, ключевые слова. Нужно всё это импортнуть в WP с периодичностью публикаций раз в три дня.

Есть замечательный класс (клиент) для работы с xml-rpc - ixr library. Я честно пытался поковыряться в нём, но потом нашёл оснастку к нему, где всё было легко и просто, поэтому я забил на очередное изобретение велосипеда.

Вот сама оснастка: http://www.charnad.com/wp-poster/.

А вот и сам скрипт постинга:

require ("sql_drv.php"); //класс работы с БД
require ('xmlrpc/ixr_client.php'); // библиотека работы с XMLRPC
require ('xmlrpc/wp_poster.php'); // оснастка для ixr client

//данные авторизации на блог
$blog_login = 'root';
$blog_pass = 'password';
$blog_xmlrpc = 'http://my-wordpress-blog.ru/xmlrpc.php';

//инициализация процесса :)
$poster = wp_poster::getInstance();
$blog = new wp_blog($blog_xmlrpc, $blog_login, $blog_pass, 0);

//запоминаем текущее время в формате timestamp
$time = time();

$r = $DB->query('select * from texts'); //тащим всё, что в таблице
while ($text = $DB->fetch_row($r)) { // для каждой вытащенной записи
	$blog->wp_createCategories(array($text['category'])); //создаём новую категорию в блоге (даже если она уже есть, ничё страшного)
	$post = new wp_post(); //новый пост
	$post->setTitle(iconv('cp1251', 'UTF-8', $text['title'])); //задаём заголовок в UTF8-кодировке
	$post->setDescription(iconv('cp1251', 'UTF-8', $text['descr'])); //задаём контент в UTF8
	$post->setPostStatus('publish');//статус поста
	$post->setPostType('post');//тип поста
	$post->setDate($time); //время публикации поста
	$post->setCategories(array($text['category'])); //указываем категорию поста
	$post->setKeywords(array(explode (', ', $text['keywords']))); // если в БД тэги хранятся через запятую, переделываем в массив и указываем его
	$res = $poster->post($blog, $post); //отправляем все данные блогу
	echo $res[0]."<br> опубликован"; //можно посмотреть результат
	$time = $time + (3600*72) + rand(-21600,21600); //смещаем метку времени на трое суток плюс-минус шесть часов (для более правдивого вида).
	sleep(1); //таймаут между постингом 1 секунда - на всякий случай :)
}

Вот так можно создавать блоги на год вперёд :)

Архив обсуждения

Исторические комментарии сохранены из старого блога. Это архив, новые комментарии не добавляются. Всего: 21.

  1. seo-zero

    Клёво, однозначно.
    А как насчет формирования файла импорта, в котором сразу есть все записи, но с отложенной публикацией (тоже через определённые промежутки времени)? В принципе, варианты одинаковые по задумке, но разные по реализации. Просто файл импорта например можно просто продать, а вот публиковать скриптом кому-то на сервер не так удобно. имхо

    1. leksus

      Частично согласен - результат одинаков, да, но цели немного разные. Во1, я никому не собираюсь продавать контент для говноблогов :) во2, и это главное, - мой метод имеет большой плюс - можно из одного, постоянно пополняемого места, брать записи для всех своих говноблогов. То есть, есть скрипт, который постоянно кидает в БД новые посты. И есть скрипт, в котором мы пишем параметры блога и периодичность публикаций. И все, дальше все идет на автомате. Можно в любой момент прервать любой из этих процессов, или поменять их параметры.

  2. Serg

    А где взять sql_drv.php? И, сдаётся мне не хватает коннекта к базе с данными. Или я чего-то не понимаю?

  3. leksus

    Да это самописный класс моего друга, который не захотел его распространять :) Работа с БД тут не отражена полностью, т.к. подразумевается, что вы знакомы с mysql.

  4. Стосег

    Так подожди, я не понял, с этой штукой можно постить или нет?
    И ещё. Я вот всё хочу в кастом филдс постить. Будет об этом когда-нибудь? Ну плииииз!

  5. leksus

    Кастомные поля:
    $post->setCustomFields(
    array(
    array(
    'key'=>'embed',
    'value'=>$out_embed_for_post
    ),
    array(
    'key'=>'embed2',
    'value'=>$out_embed2_for_post
    ),
    array(
    'key'=>'thumbnail',
    'value'=>$thumb
    )
    )
    );

    embed, embed2 и thumbnail - это ключи кастомных полей,
    $out_embed_for_post, $out_embed2_for_post, $thumb - значения.

  6. Maxim

    Подскажи, а как переделать скрипт если надо постить в блоги на wordpress.com
    Заранее благодарен

    1. leksus

      100% точно не скажу, но если wordpress.com позволяет постить через XML-RPC, то скрипт вообще не надо переделывать. Если не позволяет, то данный скрипт бесполезен.

  7. Maxim

    а если я не знаком как работать с мускулом, что тогда? как тогда быть с библиотекой?

    1. leksus

      Тогда не работайте с мускулом. Там mysql указана лишь как способ хранения информации, которую оттуда вытаскиваем для дальнейшей публикации. Возьмите текстовый файл, туда запишите инфу, и оттуда вытаскивайте.

  8. форекс трейдер

    есть еще такая приблуда http://multiposter.ru/ я не пользовался но знаю чела который это дела, хотя какой смысл в постинге наперед ??? время тратится одинаковое или в один "присесд" на 4 часа или в 8 подходов по пол часа
    или я не понимаю чего то ??

  9. блек джек

    2 форекс трейдер
    задача изначально другая стоит, не просто постинг а постинг из уже существующей таблицы

  10. FrierneJeasia

    диета на 3 дня У тебя не крылья а рога

  11. Gegeunubbiz

    Только здесь вы можете скачать бесплатно школьницы

  12. cazzerr

    Всем привет... Всем привет...

  13. gennickkk

    Добрый день!

    1. leksus

      Здравствуйте!

  14. кот

    Привет! А вот нужно постить из текстового файла в котором заголовки выделены ## . Как это реализовать?

    1. leksus

      Надо прочитать файл скриптом, регулярным выражением найти заголовки, затем разбить на массив, получится что-то типа: первый элемент массива - первый заголовок, второй элемент массива - текст после заголовка, третий элемент - второй заголовок, четвертый элемент - текст под второым заголовком, и т.д. Сгруппировав их, можно подставлять значения в моем скрипте вместо запроса к БД для получения данных.

  15. Selektory

    Где взять? Может тут кто знает??? подскажите

  16. Pavel

    По-ходу проще изучить Друпал... ))
    там такие вещи из коробки реализуемы