Думаю многим знакомо такое монотонное и скучное занятие как постинг,а так как самому этого делать не хочется, то давайте попробуем автоматизировать этот процесс с помощью A-Parser.
Теперь определимся какой движок для эксперимента мы выберем.
На сайте http://www.ratingruneta.ru/cms/ есть раздел с рейтингом cms.
Как видим лидером рейтинга open-source cms является Wordpress. Ну что же, кандидата для испытаний мы выбрали .
В Wordpress имеются API, которые мы будем использовать для автоматизации постинга. С документацией по этой технологиии вы можете ознакомиться по ссылке .
Как видно из документации метод wp.newpost отправляет XML по адресу: https://site.com/xmlrpc.php.
Теперь стоит определиться кто падет "жертвой" наших испытаний. Дабы не вызывать праведного гнева модераторов ресурсов, было принято решения создать свой блог на сайте wordpress.com
Учитывая то, что некоторые владельцы ресурсов отключают возможность работать с xmlrpc, либо попросту переименовывают этот файл, давайте напишем метод который проверяет существование xmlrpc.php.
Мы отлавливаем ответ на 405 код потому как это значит, что файл есть и принимает он запросы другим методом. Как видно из кода мы отправляли GET запрос.Код://Метод класса который проверяет существует ли xmlrpc.php * XmlrpcExist(set) { let responce = yield this.request('GET', set.query + 'xmlrpc.php', {}, { parsecodes: { 405: 1, 404: 1, } }); //Если получаем успешный ответ, значит файл есть if (responce.headers.Status == 405){ this.logger.put(responce.data); return true; } return false; }
Теперь давайте определим какой структуры должен быть XML, который мы будем отправлять на сервер. После нескольких часов поиска был найден такой вот пример
Нам нужно чтобы пользователь мог ввести идентификатор блога, логин и пароль, а также название поста и сам пост. Давайте реализуем такую возможность.<?xml version="1.0"?>
<methodCall>
<methodName>wp.newPost</methodName>
<params>
<param>
<value>
<string>Blog id</string>
</value>
</param>
<param>
<value>
<string>login</string>
</value>
</param>
<param>
<value>
<string>password</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>post_content</name>
<value>
<string><a href="http://securereader.guardianproject...-B656-A4635C0F530D-56160-0000990E96BAC672.jpg">Enclosure Link</a></string>
</value>
</member>
<member>
<name>enclosure</name>
<value>
<struct>
<member>
<name>url</name>
<value>
<string>http://securereader.guardianproject...-B656-A4635C0F530D-56160-0000990E96BAC672.jpg</string>
</value>
</member>
<member>
<name>type</name>
<value>
<string>image/jpeg</string>
</value>
</member>
<member>
<name>length</name>
<value>
<i4>1584</i4>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>post_title</name>
<value>
<string>Test Enclosure</string>
</value>
</member>
<member>
<name>post_status</name>
<value>
<string>publish</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
Выглядеть это будет такКод:this.editableConf = [ ['TitlePost', ['textfield', 'Post title']], ['TextPost', ['textfield', 'Text Post']], ['IdBlog', ['textfield', 'Id blog']], ['login', ['textfield', 'Login']], ['password', ['textfield', 'Password']], ];
Теперь когда мы получили все данные давайте приступим к формированию XML и отправке его на сервер
Проверяем результат.Код:* parse(set, results) { this.logger.put("Start scraping query: " + set.query); let res = yield* this.XmlrpcExist(set); if (res) { if (this.conf.IdBlog != 1 || this.conf.login != 'none' || this.conf.password != '') { //Формируем xml с параметрами let xml = '<?xml version="1.0"?><methodCall><methodName>wp.newPost</methodName><params><param><value><string>' + this.conf.IdBlog + '</string></value></param><param><value><string>'; xml += this.conf.login + '</string></value></param><param><value><string>' + this.conf.password + '</string>'; xml += '</value></param><param><value><struct><member><name>post_content</name><value>' + this.conf.TextPost + '</value></member> '; xml += ' <member><name>post_title</name><value><string>' + this.conf.TitlePost + '</string></value></member><member> <name>post_status</name> <value> <string>publish</string> </value> </member> </struct> </value> </param> </params></methodCall>'; //Делаем запрос используя Net::HTTP let response = yield this.parser.request('Net::HTTP', 'default', { 'body': xml, 'method': 'POST' }, set.query + 'xmlrpc.php'); if (response.info.success) { //Если пришел ответ с ошибкой let matches = response.data.match(/faultCode<\/name>\s+<value><int>(\d+)[\s\S]+?faultString<\/name>\s+<value><string>([^<]+)/); if (matches) { //То выводим её в результат results.error = matches[1] + ' ' + matches[2]; } else { results.error = 'Succesfull'; } } } else { this.logger.put('Empty fields'); } } else { results.error = 'xmlrpc.php not found'; } results.success = res.success; return results; }
Пост есть.
Удачного постинга ! )
Скачать парсер вы можете в нашем каталоге по этой ссылке
-
Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!Скрыть объявление
Постинг сообщений в Wordpress блоги
Автоматизация постинга в Wordpress блоги