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 секунда - на всякий случай :) }
Вот так можно создавать блоги на год вперёд :)
Клёво, однозначно.
А как насчет формирования файла импорта, в котором сразу есть все записи, но с отложенной публикацией (тоже через определённые промежутки времени)? В принципе, варианты одинаковые по задумке, но разные по реализации. Просто файл импорта например можно просто продать, а вот публиковать скриптом кому-то на сервер не так удобно. имхо
[Ответить]
leksus Reply:
сентября 2, 2010 at 19:58
Частично согласен — результат одинаков, да, но цели немного разные. Во1, я никому не собираюсь продавать контент для говноблогов :) во2, и это главное, — мой метод имеет большой плюс — можно из одного, постоянно пополняемого места, брать записи для всех своих говноблогов. То есть, есть скрипт, который постоянно кидает в БД новые посты. И есть скрипт, в котором мы пишем параметры блога и периодичность публикаций. И все, дальше все идет на автомате. Можно в любой момент прервать любой из этих процессов, или поменять их параметры.
[Ответить]
А где взять sql_drv.php? И, сдаётся мне не хватает коннекта к базе с данными. Или я чего-то не понимаю?
[Ответить]
Да это самописный класс моего друга, который не захотел его распространять :) Работа с БД тут не отражена полностью, т.к. подразумевается, что вы знакомы с mysql.
[Ответить]
Так подожди, я не понял, с этой штукой можно постить или нет?
И ещё. Я вот всё хочу в кастом филдс постить. Будет об этом когда-нибудь? Ну плииииз!
[Ответить]
Кастомные поля:
$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 — значения.
[Ответить]
Подскажи, а как переделать скрипт если надо постить в блоги на wordpress.com
Заранее благодарен
[Ответить]
leksus Reply:
июня 19, 2011 at 19:37
100% точно не скажу, но если wordpress.com позволяет постить через XML-RPC, то скрипт вообще не надо переделывать. Если не позволяет, то данный скрипт бесполезен.
[Ответить]
а если я не знаком как работать с мускулом, что тогда? как тогда быть с библиотекой?
[Ответить]
leksus Reply:
июня 20, 2011 at 0:10
Тогда не работайте с мускулом. Там mysql указана лишь как способ хранения информации, которую оттуда вытаскиваем для дальнейшей публикации. Возьмите текстовый файл, туда запишите инфу, и оттуда вытаскивайте.
[Ответить]
есть еще такая приблудаhttp://multiposter.ru/ я не пользовался но знаю чела который это дела, хотя какой смысл в постинге наперед ??? время тратится одинаковое или в один «присесд» на 4 часа или в 8 подходов по пол часа
или я не понимаю чего то ??
[Ответить]
2 форекс трейдер
задача изначально другая стоит, не просто постинг а постинг из уже существующей таблицы
[Ответить]
диета на 3 дня У тебя не крылья а рога
[Ответить]
Только здесь вы можете скачать бесплатно школьницы
[Ответить]
Всем привет… Всем привет…
[Ответить]
Добрый день!
[Ответить]
leksus Reply:
ноября 28, 2012 at 18:12
Здравствуйте!
[Ответить]
Привет! А вот нужно постить из текстового файла в котором заголовки выделены ## . Как это реализовать?
[Ответить]
leksus Reply:
февраля 23, 2013 at 18:53
Надо прочитать файл скриптом, регулярным выражением найти заголовки, затем разбить на массив, получится что-то типа: первый элемент массива — первый заголовок, второй элемент массива — текст после заголовка, третий элемент — второй заголовок, четвертый элемент — текст под второым заголовком, и т.д. Сгруппировав их, можно подставлять значения в моем скрипте вместо запроса к БД для получения данных.
[Ответить]
Где взять? Может тут кто знает??? подскажите
[Ответить]
По-ходу проще изучить Друпал… ))
там такие вещи из коробки реализуемы
[Ответить]