Всем привет. Пишу на конкурс впервые.
Не так давно мне понадобилось наполнять свой сайт на вордпресс, по 500-1000 записей в сутки. Пробовал сначала наполнять с помощью Zennoposter браузером. (через админку) Все нормально работало, но уходило несколько часов на такое задание. А нужно было сделать наполнение хотябы за 10 минут.
Я стал искать различные способы наполнения без браузера. Пробовал сделать просто на запросах, но из-за недостаточных знаний у меня не получилось (программировать я совсем не умею и принципы работы программ тоже не совсем понимаю). Хорошо что у меня есть зеннопостер.
Я начал гуглить и узнал что у wordpress есть api xmlrpc.php. Я не нашел готовое решение на зеннопостер, а те что нашел не хотели работать у меня, либо переставали работать, когда я внедрял в них свои "костыли". Видел что везде пишут что с xmlrpc сложно работать напрямую и нужно работать через библиотеки.
Мне стало интересно, что же там такого сложного (думал может трафик шифруется или формат специфический) и стал снифать запросы. И каково же было мое удивление - все очень просто на самом деле.
Побыстрому я накидал простой шаблон на кубиках, почти без использования C# сниппетов.
Для создания записи на вордпресс с изображениями нам нужно сделать следующее:
Сначала изображение конвертируем в base64 с помощью C# сниппета.
Далее изображение загружаем на вордпресс таким запросом:
XML:
<?xml version="1.0"?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><int>1</int></value></param>
<param><value><string>{-Variable.wp_login-}</string></value></param>
<param><value><string>{-Variable.wp_password-}</string></value></param>
<param><value><struct>
<member><name>name</name><value><string>{-Variable.img_name-}.jpg</string></value></member>
<member><name>type</name><value><string>image/jpg</string></value></member>
<member><name>bits</name><value><base64>
{-Variable.img_base_64-}
</base64></value></member>
<member><name>overwrite</name><value><boolean>1</boolean></value></member>
</struct></value></param>
</params></methodCall>
Как видно из кода, мы используем метод wp.uploadFile, передаем ему логин и пароль, название изображения и его base64 код.
И если мы все правильно сделали, то в ответ мы получаем id нашего изображения и прямые ссылки на него (в оригинальном размере и миниатюры). Парсим их регулярками.
Далее создадим пост на нашем сайте.
Для создания поста, нам нужно получить дату текущее время в формате 20180515T15:10:01. Время получаем стандартными средствами Zennoposter, а дату с помощью кода:
C#:
return DateTime.Now.ToString("yyyyMMddT");
Используем следующий код:
C#:
var content = project.Variables["description"].Value.Trim();
content = content.Replace("&","&").Replace("\"",""").Replace("\'","'").Replace("<","<").Replace(">",">");
return content;
XML:
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param><value><array><data>
<value><int>0</int></value>
<value><string>{-Variable.wp_login-}</string></value>
<value><string>{-Variable.wp_password-}</string></value>
<value><struct>
<member><name>title</name><value><string>{-Variable.topic_name-}</string></value></member>
<member><name>description</name><value><string>
{-Variable.description-}</string></value></member>
<member><name>mt_allow_comments</name><value><int>0</int></value></member>
<member><name>mt_allow_pings</name><value><int>0</int></value></member>
<member><name>post_type</name><value><string>post</string></value></member>
<member><name>mt_keywords</name><value><string></string></value></member>
<member><name>custom_fields</name><value><array><data>
<value><string></string></value>
</data></array></value></member>
<member><name>wp_post_thumbnail</name><value><string>{-Variable.img_id-}</string></value></member>
<member><name>dateCreated</name><value><dateTime.iso8601>{-Variable.date-}{-Variable.time-}</dateTime.iso8601></value></member>
</struct></value>
<value><boolean>1</boolean></value>
</data></array></value></param>
</params></methodCall>
Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы.
Пример шаблона прилагается.
- Тема статьи
- Другое
- Номер конкурса статей
- Девятый конкурс статей
Вложения
-
149,3 КБ Просмотры: 718
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.