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

D1AVOL

Client
Регистрация
26.09.2015
Сообщения
89
Реакции
82
Баллы
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 нашего поста.
Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы. :-)
Пример шаблона прилагается.
 
Номер конкурса статей
  1. Девятый конкурс статей
Тема статьи
  1. Другое

Вложения

А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
 
А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
если вы о html тегах, то в них нужно лишь заменить некоторые спецсимволы (<,> и т.п.) и все нормально постится.
 
С Wordpress я не работал, но к популярным движкам обычно есть модуль импорта из csv. Можно загружать статьи/товары тысячами за считанные секунды. Или такой вариант не подходит?
 
  • Спасибо
Реакции: Шива
С Wordpress я не работал, но к популярным движкам обычно есть модуль импорта из csv. Можно загружать статьи/товары тысячами за считанные секунды. Или такой вариант не подходит?
+1
Для WP есть WP All Import Pro - импортирует CSV, XML, делает очень быстро и практически все настраивается (что импортировать, куда импортировать и т.п.) А тот же CSV в чем угодно можно сформировать.
 
+1
Для WP есть WP All Import Pro - импортирует CSV, XML, делает очень быстро и практически все настраивается (что импортировать, куда импортировать и т.п.) А тот же CSV в чем угодно можно сформировать.

Это вроде платный плагин ?
 
Ну так-то да... но мы же все понимаем...) А для белого проекта, приносящего деньги - можно и купить.
 
Где-то я это уже видел
он у меня не заработал (либо создавал по 2 одинаковых поста за запрос) и я запилил свои костыли без библиотек. в этом и была вся "фишка" =)
 
У кого есть идеи как импортировать не создавая большую нагрузку на сервер.
Например на прямую через базу данных.
Было бы очень полезно...
 
У кого есть идеи как импортировать не создавая большую нагрузку на сервер.
Например на прямую через базу данных.
Генерируй дамп базы и заливай его
 
  • Спасибо
Реакции: sergej_g
Следующим запросом создаем пост:
день добрый, классная статья и хороший способ наполнять WP!!! все классно работает но есть одно но, не могу понять как новость заносить в нужную мне категорию. помогите пожалуйста с этим вопросом
 
А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
<member><name>mt_keywords</name><value><string></string></value></member
тэги прописываются сдесь через запятую, вот где прописать рубрику в которую постим новость????
 
itserviceinс, спосибо огромное за помощь!!! но у меня проблемма в следующем! есть код
я его применил и все суппер. но что и где мне надо туда прописать чтобы у меня запись публиковалась в нужную мне категорию.
<member><name>mt_keywords</name><value><string></string></value></member>
вот сдесь я например пишу ключивики записи
<member><name>title</name><value><string>{-Variable.topic_name-}</string></value></member>
сдесь название новости.
а где код который прописывает категорию??
 
если вы о html тегах, то в них нужно лишь заменить некоторые спецсимволы (<,> и т.п.) и все нормально постится.
Не понимаю как отправить статью с html тегами, а не текстом. Шаблон отличный.
 
Я так понимаю нужно отдельно кубик создания категории делать? в кубике создания поста возможно добавить создание категории?
 
я полагаю создавать через шарп не получиться только указывать ID категории?
поделитесь кусочком кода пожалуйста
 
я полагаю создавать через шарп не получиться только указывать ID категории?
поделитесь кусочком кода пожалуйста
<member>
<name>categories</name>
<value>
<array>
<data>
<value>
<string>{-Variable.rybrika-}</string>
</value>
</data>
</array>
</value>
</member>
 
  • Спасибо
Реакции: GreenWay и seomiks
Посмотреть вложение 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 запросе во время публикации. Помогите разобраться в чем может быть дело? до этого все отлично работало.
 

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