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

Discussion in 'Девятый конкурс статей' started by D1AVOL, May 15, 2018.

  1. D1AVOL

    D1AVOL Client

    Joined:
    Sep 26, 2015
    Messages:
    64
    Likes Received:
    48
    Untitled-1.png




    Всем привет. Пишу на конкурс впервые.
    Не так давно мне понадобилось наполнять свой сайт на вордпресс, по 500-1000 записей в сутки. Пробовал сначала наполнять с помощью Zennoposter браузером. (через админку) Все нормально работало, но уходило несколько часов на такое задание. А нужно было сделать наполнение хотябы за 10 минут.
    Я стал искать различные способы наполнения без браузера. Пробовал сделать просто на запросах, но из-за недостаточных знаний у меня не получилось (программировать я совсем не умею и принципы работы программ тоже не совсем понимаю). Хорошо что у меня есть зеннопостер. :-)
    Я начал гуглить и узнал что у wordpress есть api xmlrpc.php. Я не нашел готовое решение на зеннопостер, а те что нашел не хотели работать у меня, либо переставали работать, когда я внедрял в них свои "костыли". Видел что везде пишут что с xmlrpc сложно работать напрямую и нужно работать через библиотеки.
    Мне стало интересно, что же там такого сложного (думал может трафик шифруется или формат специфический) и стал снифать запросы. И каково же было мое удивление - все очень просто на самом деле.
    Побыстрому я накидал простой шаблон на кубиках, почти без использования C# сниппетов.

    Для создания записи на вордпресс с изображениями нам нужно сделать следующее:
    Сначала изображение конвертируем в base64 с помощью C# сниппета.
    Далее изображение загружаем на вордпресс таким запросом:

    Code (xml):
    1.  
    2.         <?xml version="1.0"?>
    3.         <methodCall>
    4.         <methodName>wp.uploadFile</methodName>
    5.         <params>
    6.         <param><value><int>1</int></value></param>
    7.         <param><value><string>{-Variable.wp_login-}</string></value></param>
    8.         <param><value><string>{-Variable.wp_password-}</string></value></param>
    9.         <param><value><struct>
    10.           <member><name>name</name><value><string>{-Variable.img_name-}.jpg</string></value></member>
    11.           <member><name>type</name><value><string>image/jpg</string></value></member>
    12.           <member><name>bits</name><value><base64>
    13.         {-Variable.img_base_64-}
    14.         </base64></value></member>
    15.           <member><name>overwrite</name><value><boolean>1</boolean></value></member>
    16.         </struct></value></param>
    17.         </params></methodCall>
    18.  
    Отправляем POST запрос к файлу /xmlrpc.php
    Как видно из кода, мы используем метод wp.uploadFile, передаем ему логин и пароль, название изображения и его base64 код.
    И если мы все правильно сделали, то в ответ мы получаем id нашего изображения и прямые ссылки на него (в оригинальном размере и миниатюры). Парсим их регулярками.


    Далее создадим пост на нашем сайте.
    Для создания поста, нам нужно получить дату текущее время в формате 20180515T15:10:01. Время получаем стандартными средствами Zennoposter, а дату с помощью кода:
    Code (csharp):
    1.  
    2. return DateTime.Now.ToString("yyyyMMddT");
    3.  
    В тексте поста нам нужно заменить все "спецсимволы"
    Используем следующий код:
    Code (csharp):
    1.  
    2. var content = project.Variables["description"].Value.Trim();
    3. content = content.Replace("&","&amp;").Replace("\"","&quot;").Replace("\'","&apos;").Replace("<","&lt;").Replace(">","&gt;");
    4.     return content;
    5.  
    Следующим запросом создаем пост:
    Code (xml):
    1.  
    2. <?xml version="1.0"?>
    3. <methodCall>
    4. <methodName>metaWeblog.newPost</methodName>
    5. <params>
    6. <param><value><array><data>
    7.   <value><int>0</int></value>
    8.   <value><string>{-Variable.wp_login-}</string></value>
    9.   <value><string>{-Variable.wp_password-}</string></value>
    10.   <value><struct>
    11.   <member><name>title</name><value><string>{-Variable.topic_name-}</string></value></member>
    12.   <member><name>description</name><value><string>
    13.   {-Variable.description-}</string></value></member>
    14.   <member><name>mt_allow_comments</name><value><int>0</int></value></member>
    15.   <member><name>mt_allow_pings</name><value><int>0</int></value></member>
    16.   <member><name>post_type</name><value><string>post</string></value></member>
    17.   <member><name>mt_keywords</name><value><string></string></value></member>
    18.   <member><name>custom_fields</name><value><array><data>
    19.   <value><string></string></value>
    20. </data></array></value></member>
    21.   <member><name>wp_post_thumbnail</name><value><string>{-Variable.img_id-}</string></value></member>
    22.   <member><name>dateCreated</name><value><dateTime.iso8601>{-Variable.date-}{-Variable.time-}</dateTime.iso8601></value></member>
    23. </struct></value>
    24.   <value><boolean>1</boolean></value>
    25. </data></array></value></param>
    26. </params></methodCall>
    27.  
    В ответе получаем ID нашего поста.
    Как получить прямую ссылку на пост я не нашел, поэтому просто парсил ссылку на него с главной страницы. :-)
    Пример шаблона прилагается.
     

    Attached Files:

    GreenWay, vadim4ukr, sydoow and 8 others like this.
  2. etyipin

    etyipin Client

    Joined:
    Dec 15, 2017
    Messages:
    92
    Likes Received:
    33
    А как вы добавляете статью с тегами? Я думаю было бы уместным упамянуть о CDATA.
     
  3. D1AVOL

    D1AVOL Client

    Joined:
    Sep 26, 2015
    Messages:
    64
    Likes Received:
    48
    если вы о html тегах, то в них нужно лишь заменить некоторые спецсимволы (<,> и т.п.) и все нормально постится.
     
  4. smotrimail

    smotrimail Client

    Joined:
    Feb 6, 2017
    Messages:
    21
    Likes Received:
    5
    С Wordpress я не работал, но к популярным движкам обычно есть модуль импорта из csv. Можно загружать статьи/товары тысячами за считанные секунды. Или такой вариант не подходит?
     
    Шива likes this.
  5. Tomcat32

    Tomcat32 Client

    Joined:
    Mar 4, 2016
    Messages:
    4
    Likes Received:
    0
    +1
    Для WP есть WP All Import Pro - импортирует CSV, XML, делает очень быстро и практически все настраивается (что импортировать, куда импортировать и т.п.) А тот же CSV в чем угодно можно сформировать.
     
  6. sergej_g

    sergej_g Client

    Joined:
    Nov 29, 2011
    Messages:
    98
    Likes Received:
    56
    Это вроде платный плагин ?
     
  7. Tomcat32

    Tomcat32 Client

    Joined:
    Mar 4, 2016
    Messages:
    4
    Likes Received:
    0
    Ну так-то да... но мы же все понимаем...) А для белого проекта, приносящего деньги - можно и купить.
     
  8. Radzhab

    Radzhab Client

    Joined:
    May 23, 2014
    Messages:
    1,435
    Likes Received:
    1,102
    Где-то я это уже видел
     
    Petr_G and D1AVOL like this.
  9. kapelan28

    kapelan28 Client

    Joined:
    Sep 22, 2015
    Messages:
    415
    Likes Received:
    144
    :D я тоже.... даже под твоим авторством, если память не изменяет.
     
  10. D1AVOL

    D1AVOL Client

    Joined:
    Sep 26, 2015
    Messages:
    64
    Likes Received:
    48
    он у меня не заработал (либо создавал по 2 одинаковых поста за запрос) и я запилил свои костыли без библиотек. в этом и была вся "фишка" =)
     
  11. sergej_g

    sergej_g Client

    Joined:
    Nov 29, 2011
    Messages:
    98
    Likes Received:
    56
    Можно наполнять вордпресс и через импорт xml.
     
  12. Folt

    Folt Client

    Joined:
    Dec 16, 2016
    Messages:
    59
    Likes Received:
    3
    У кого есть идеи как импортировать не создавая большую нагрузку на сервер.
    Например на прямую через базу данных.
    Было бы очень полезно...
     
  13. Lord_Alfred

    Lord_Alfred Client

    Joined:
    Oct 9, 2015
    Messages:
    2,822
    Likes Received:
    2,420
    Генерируй дамп базы и заливай его
     
    sergej_g likes this.
  14. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    день добрый, классная статья и хороший способ наполнять WP!!! все классно работает но есть одно но, не могу понять как новость заносить в нужную мне категорию. помогите пожалуйста с этим вопросом
     
  15. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    тэги прописываются сдесь через запятую, вот где прописать рубрику в которую постим новость????
     
  16. itserviceinс

    itserviceinс Пользователь

    Joined:
    Nov 12, 2017
    Messages:
    95
    Likes Received:
    23
    метод wp.newCategory
     
  17. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    A как именно прописывается код? Можете пожалуйста показать пример!! Заранее спасибо
     
  18. itserviceinс

    itserviceinс Пользователь

    Joined:
    Nov 12, 2017
    Messages:
    95
    Likes Received:
    23
  19. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    А сюда возможно прописать???
     
  20. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    Как именно в этом коде прописать категорию???
     
  21. itserviceinс

    itserviceinс Пользователь

    Joined:
    Nov 12, 2017
    Messages:
    95
    Likes Received:
    23
  22. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    itserviceinс, спосибо огромное за помощь!!! но у меня проблемма в следующем! есть код
    я его применил и все суппер. но что и где мне надо туда прописать чтобы у меня запись публиковалась в нужную мне категорию.
    вот сдесь я например пишу ключивики записи
    сдесь название новости.
    а где код который прописывает категорию??
     
  23. Nikitosik

    Nikitosik Client

    Joined:
    May 27, 2016
    Messages:
    5
    Likes Received:
    0
    Не понимаю как отправить статью с html тегами, а не текстом. Шаблон отличный.
     
  24. etyipin

    etyipin Client

    Joined:
    Dec 15, 2017
    Messages:
    92
    Likes Received:
    33
    используйте CDATA
     
    Astraport likes this.
  25. Nikitosik

    Nikitosik Client

    Joined:
    May 27, 2016
    Messages:
    5
    Likes Received:
    0
    Да, помогло! Спасибо
     
  26. seomiks

    seomiks Client

    Joined:
    Sep 13, 2014
    Messages:
    368
    Likes Received:
    119
    Я так понимаю нужно отдельно кубик создания категории делать? в кубике создания поста возможно добавить создание категории?
     
  27. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    кубик дополнительный не надо, на до в коде сишарп просто дописать категорию куда будит поститься новость.
     
  28. seomiks

    seomiks Client

    Joined:
    Sep 13, 2014
    Messages:
    368
    Likes Received:
    119
    я полагаю создавать через шарп не получиться только указывать ID категории?
    поделитесь кусочком кода пожалуйста
     
  29. anderson

    anderson Client

    Joined:
    Nov 30, 2017
    Messages:
    12
    Likes Received:
    2
    <member>
    <name>categories</name>
    <value>
    <array>
    <data>
    <value>
    <string>{-Variable.rybrika-}</string>
    </value>
    </data>
    </array>
    </value>
    </member>
     
    GreenWay and seomiks like this.
  30. Nikitosik

    Nikitosik Client

    Joined:
    May 27, 2016
    Messages:
    5
    Likes Received:
    0
    Почему то перестал постить статьи. Выдает ошибку 413 при post запросе во время публикации. Помогите разобраться в чем может быть дело? до этого все отлично работало.
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)