Наполнение Wordpress через xmlrpc без библиотек

D1AVOL

Client
Регистрация
26.09.2015
Сообщения
86
Благодарностей
80
Баллы
18
Untitled-1.png





Всем привет. Пишу на конкурс впервые.
Не так давно мне понадобилось наполнять свой сайт на вордпресс, по 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>
Отправляем POST запрос к файлу /xmlrpc.php
Как видно из кода, мы используем метод 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("&","&amp;").Replace("\"","&quot;").Replace("\'","&apos;").Replace("<","&lt;").Replace(">","&gt;");
    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>
В ответе получаем ID нашего поста.
Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы. :-)
Пример шаблона прилагается.
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

etyipin

Client
Регистрация
15.12.2017
Сообщения
95
Благодарностей
34
Баллы
18
А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
 

D1AVOL

Client
Регистрация
26.09.2015
Сообщения
86
Благодарностей
80
Баллы
18
А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
если вы о html тегах, то в них нужно лишь заменить некоторые спецсимволы (<,> и т.п.) и все нормально постится.
 

smotrimail

Client
Регистрация
06.02.2017
Сообщения
31
Благодарностей
6
Баллы
8
С Wordpress я не работал, но к популярным движкам обычно есть модуль импорта из csv. Можно загружать статьи/товары тысячами за считанные секунды. Или такой вариант не подходит?
 
  • Спасибо
Реакции: Шива

Tomcat32

Client
Регистрация
04.03.2016
Сообщения
7
Благодарностей
0
Баллы
1
С Wordpress я не работал, но к популярным движкам обычно есть модуль импорта из csv. Можно загружать статьи/товары тысячами за считанные секунды. Или такой вариант не подходит?
+1
Для WP есть WP All Import Pro - импортирует CSV, XML, делает очень быстро и практически все настраивается (что импортировать, куда импортировать и т.п.) А тот же CSV в чем угодно можно сформировать.
 

sergej_g

Client
Регистрация
29.11.2011
Сообщения
145
Благодарностей
120
Баллы
43
+1
Для WP есть WP All Import Pro - импортирует CSV, XML, делает очень быстро и практически все настраивается (что импортировать, куда импортировать и т.п.) А тот же CSV в чем угодно можно сформировать.
Это вроде платный плагин ?
 

Tomcat32

Client
Регистрация
04.03.2016
Сообщения
7
Благодарностей
0
Баллы
1
Ну так-то да... но мы же все понимаем...) А для белого проекта, приносящего деньги - можно и купить.
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
467
Благодарностей
178
Баллы
43

D1AVOL

Client
Регистрация
26.09.2015
Сообщения
86
Благодарностей
80
Баллы
18
Где-то я это уже видел
он у меня не заработал (либо создавал по 2 одинаковых поста за запрос) и я запилил свои костыли без библиотек. в этом и была вся "фишка" =)
 

sergej_g

Client
Регистрация
29.11.2011
Сообщения
145
Благодарностей
120
Баллы
43

Folt

Client
Регистрация
16.12.2016
Сообщения
66
Благодарностей
4
Баллы
8
У кого есть идеи как импортировать не создавая большую нагрузку на сервер.
Например на прямую через базу данных.
Было бы очень полезно...
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 858
Благодарностей
3 601
Баллы
113
У кого есть идеи как импортировать не создавая большую нагрузку на сервер.
Например на прямую через базу данных.
Генерируй дамп базы и заливай его
 
  • Спасибо
Реакции: sergej_g

anderson

Client
Регистрация
30.11.2017
Сообщения
18
Благодарностей
2
Баллы
3
Следующим запросом создаем пост:
день добрый, классная статья и хороший способ наполнять WP!!! все классно работает но есть одно но, не могу понять как новость заносить в нужную мне категорию. помогите пожалуйста с этим вопросом
 

anderson

Client
Регистрация
30.11.2017
Сообщения
18
Благодарностей
2
Баллы
3
А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
<member><name>mt_keywords</name><value><string></string></value></member
тэги прописываются сдесь через запятую, вот где прописать рубрику в которую постим новость????
 

anderson

Client
Регистрация
30.11.2017
Сообщения
18
Благодарностей
2
Баллы
3
itserviceinс, спосибо огромное за помощь!!! но у меня проблемма в следующем! есть код
я его применил и все суппер. но что и где мне надо туда прописать чтобы у меня запись публиковалась в нужную мне категорию.
<member><name>mt_keywords</name><value><string></string></value></member>
вот сдесь я например пишу ключивики записи
<member><name>title</name><value><string>{-Variable.topic_name-}</string></value></member>
сдесь название новости.
а где код который прописывает категорию??
 

Nikitosik

Client
Регистрация
27.05.2016
Сообщения
5
Благодарностей
0
Баллы
1
если вы о html тегах, то в них нужно лишь заменить некоторые спецсимволы (<,> и т.п.) и все нормально постится.
Не понимаю как отправить статью с html тегами, а не текстом. Шаблон отличный.
 

seomiks

Client
Регистрация
13.09.2014
Сообщения
371
Благодарностей
123
Баллы
43
Я так понимаю нужно отдельно кубик создания категории делать? в кубике создания поста возможно добавить создание категории?
 

seomiks

Client
Регистрация
13.09.2014
Сообщения
371
Благодарностей
123
Баллы
43
я полагаю создавать через шарп не получиться только указывать ID категории?
поделитесь кусочком кода пожалуйста
 

anderson

Client
Регистрация
30.11.2017
Сообщения
18
Благодарностей
2
Баллы
3
я полагаю создавать через шарп не получиться только указывать ID категории?
поделитесь кусочком кода пожалуйста
<member>
<name>categories</name>
<value>
<array>
<data>
<value>
<string>{-Variable.rybrika-}</string>
</value>
</data>
</array>
</value>
</member>
 
  • Спасибо
Реакции: GreenWay и seomiks

Nikitosik

Client
Регистрация
27.05.2016
Сообщения
5
Благодарностей
0
Баллы
1
Посмотреть вложение 29730




Всем привет. Пишу на конкурс впервые.
Не так давно мне понадобилось наполнять свой сайт на вордпресс, по 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>
Отправляем POST запрос к файлу /xmlrpc.php
Как видно из кода, мы используем метод 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("&","&amp;").Replace("\"","&quot;").Replace("\'","&apos;").Replace("<","&lt;").Replace(">","&gt;");
    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>
В ответе получаем ID нашего поста.
Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы. :-)
Пример шаблона прилагается.
Посмотреть вложение 29730




Всем привет. Пишу на конкурс впервые.
Не так давно мне понадобилось наполнять свой сайт на вордпресс, по 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>
Отправляем POST запрос к файлу /xmlrpc.php
Как видно из кода, мы используем метод 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("&","&amp;").Replace("\"","&quot;").Replace("\'","&apos;").Replace("<","&lt;").Replace(">","&gt;");
    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>
В ответе получаем ID нашего поста.
Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы. :-)
Пример шаблона прилагается.
Почему то перестал постить статьи. Выдает ошибку 413 при post запросе во время публикации. Помогите разобраться в чем может быть дело? до этого все отлично работало.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)