31242134.JPG15 Кб, 204x259
Прошу помощи с XML 125885 В конец треда | Веб
Не получается разобраться самостоятельно.

Проблема:

Есть Wordpress(система управления контентом), в нем есть фишка удаленного наполнения которая называется XMLRPC, она работает при помощи XML-синтаксиса и несмотря на его простоту я не смог разобраться.

Вот код который отправляется post-запросом к движку Wordpress и он работает, он создает запись в блоге с указанными там данными, но тут отсуствует настройка, которая бы указывала ему в какую категорию ее нужно класть и найденные мной решения(они под кодом) либо неправильно мной применяются, либо вообще не работают.
<?xml version="1.0"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param><value><array><data>
<value><int>0</int></value>
<value><string>LOGIN аккаунта</string></value>
<value><string>PASSWORD аккаунта </string></value>
<value><struct>
<member><name>title</name><value><string>Заголовок публикуемой записи(новости)</string></value></member>
<member><name>description</name><value><string>Основной текст публикуемой записи(новости)</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>Id изображения публикуемой записи(новости)</string></value></member>
<member><name>dateCreated</name><value><dateTime.iso8601>время и дата публикуемой записи(новости)</dateTime.iso8601></value></member>
</struct></value>
<value><boolean>1</boolean></value>
</data></array></value></param>
</params></methodCall>[/sup]
Есть вот такие решения и я не знаю как их правильно применить.
Вот такой фрагмент кода:
<member>
<name>categories</name>
<value>
<array>
<data>
<value>
<string>рубрика</string>
</value>
</data>
</array>
</value>

И какая-то инфа на английском по теме добавления категорий(рубрик), но я ничего не понял https://core.trac.wordpress.org/ticket/14868

</member>
2 125887
Тебе нужно использовать api правильно, для этого внимательно прочитай инструкции к api вот тут: https://codex.wordpress.org/XML-RPC_WordPress_API

Не знаешь английский - Гугл транслэйт в помощь. А вообще английский таки выучить придется если хочешь в АйТи, ибо все документации в первую очередь публикуются на нем и не всегда переводятся на другие языки.
3 125890
>>5887

>А вообще английский таки выучить придется если хочешь в АйТи, ибо все документации в первую очередь публикуются на нем и не всегда переводятся на другие языки.


Это печально т.к гуглтранслит очень плохо переводит.
4 125893
PHP знаешь? Или похожий язык.

Вот простенький пример как првератить твой хмл в обьект ,чтоб легче читалось\работать с ним.
Можещь запихнуть в онлайн компилятор
<?php

$string = <<<xml
<?xml version="1.0"?>
<document>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param><value><array><data>
<value><int>0</int></value>
<value><string>LOGIN аккаунта</string></value>
<value><string>PASSWORD аккаунта </string></value>
<value><struct>
<member><name>title</name><value><string>Заголовок публикуемой записи(новости)</string></value></member>
<member><name>description</name><value><string>Основной текст публикуемой записи(новости)</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>Id изображения публикуемой записи(новости)</string></value></member>
<member><name>dateCreated</name><value><dateTime.iso8601>время и дата публикуемой записи(новости)</dateTime.iso8601></value></member>
</struct></value>
<value><boolean>1</boolean></value>
</data></array></value></param>
</params></methodCall>[/sup]
</document>
xml;

$xml = simplexml_load_string($string);

print_r($xml);
4 125893
PHP знаешь? Или похожий язык.

Вот простенький пример как првератить твой хмл в обьект ,чтоб легче читалось\работать с ним.
Можещь запихнуть в онлайн компилятор
<?php

$string = <<<xml
<?xml version="1.0"?>
<document>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param><value><array><data>
<value><int>0</int></value>
<value><string>LOGIN аккаунта</string></value>
<value><string>PASSWORD аккаунта </string></value>
<value><struct>
<member><name>title</name><value><string>Заголовок публикуемой записи(новости)</string></value></member>
<member><name>description</name><value><string>Основной текст публикуемой записи(новости)</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>Id изображения публикуемой записи(новости)</string></value></member>
<member><name>dateCreated</name><value><dateTime.iso8601>время и дата публикуемой записи(новости)</dateTime.iso8601></value></member>
</struct></value>
<value><boolean>1</boolean></value>
</data></array></value></param>
</params></methodCall>[/sup]
</document>
xml;

$xml = simplexml_load_string($string);

print_r($xml);
5 125902
>>5893
не, это не поможет
6 125922
<?php
require_once("ixr.php"); // https://github.com/lsmonki/php-ixr или ее форк

$client = new IXR_Client('http://2chwordpress.com/xmlrpc.php');

$username = "abu";
$password = "mailruadmin";

$content = array(
'title' => 'Hello 2ch',
'description' => 'ya tyan prufov ne budet',
'mt_allow_comments' => 0, // 1 to allow comments
'mt_allow_pings' => 0, // 1 to allow trackbacks
'post_type' => 'post',
'categories' => array('13', '22')
//'custom_fields' => array($customfields),
//'mt_keywords'=>$keywords,
//'dateCreated' => $date
);
$client = new IXR_Client('http://yourwp.com/xmlrpc.php');
$params = array(0, $username, $password, $content, true); // Last parameter is 'true' which means post immediately, to save as draft set it as 'false'
if (!$client - > query('metaWeblog.newPost', $params)) {
echo('Something went wrong - '.$client - > getErrorCode().
' : '.$client - > getErrorMessage());
} else {
echo "Article Posted Successfully\n";
}
6 125922
<?php
require_once("ixr.php"); // https://github.com/lsmonki/php-ixr или ее форк

$client = new IXR_Client('http://2chwordpress.com/xmlrpc.php');

$username = "abu";
$password = "mailruadmin";

$content = array(
'title' => 'Hello 2ch',
'description' => 'ya tyan prufov ne budet',
'mt_allow_comments' => 0, // 1 to allow comments
'mt_allow_pings' => 0, // 1 to allow trackbacks
'post_type' => 'post',
'categories' => array('13', '22')
//'custom_fields' => array($customfields),
//'mt_keywords'=>$keywords,
//'dateCreated' => $date
);
$client = new IXR_Client('http://yourwp.com/xmlrpc.php');
$params = array(0, $username, $password, $content, true); // Last parameter is 'true' which means post immediately, to save as draft set it as 'false'
if (!$client - > query('metaWeblog.newPost', $params)) {
echo('Something went wrong - '.$client - > getErrorCode().
' : '.$client - > getErrorMessage());
} else {
echo "Article Posted Successfully\n";
}
7 125923
>>5922

первый $client конечно же не нужен, удали эту строку.
8 125924
>>5922
и запостилось почему-то вместо "->" как "- >", удали пробелы.

Еще не будет работать с https, как пофиксить - читай тут https://stackoverflow.com/a/32726403
9 125931
>>5922
А в кактегорих ID отправляется или название?
10 125932
>>5922
О, ты чет реальную тему подогнал похоже
11 125933
>>5924
спасибо
12 125934
>>5931
конечно id категорий.
Если что, вот пример который будет работать и с https тоже (надо указать путь до распакованного, можно нерабочего вордпресса для инклудов).
also см. https://wp-kama.ru/function/wp_xmlrpc_server::mw_newPost

<?php

include '/var/www/wordpress/wp-load.php';
require_once ABSPATH . WPINC . '/class-IXR.php';
require_once ABSPATH . WPINC . '/class-wp-http-ixr-client.php';

$username = "admin";
$password = "porol";

$content = array(
'title' => 'Hello 2ch',
'description' => 'ya tyan prufov ne budet',
'mt_allow_comments' => 0, // 1 to allow comments
'mt_allow_pings' => 0, // 1 to allow trackbacks
'post_type' => 'post',
'categories' => array('13', '22')
//'custom_fields' => array($customfields),
//'mt_keywords'=>$keywords,
//'dateCreated' => $date
);
$client = new WP_HTTP_IXR_CLIENT('https://2ch.hk/xmlrpc.php'); (М)

$params = array(0, $username, $password, $content, true); // Last parameter is 'true' which means post immediately, to save as draft set it as 'false'
if (!$client -> query('metaWeblog.newPost', $params)) {
echo('Something went wrong - '.$client -> getErrorCode().
' : '.$client -> getErrorMessage());
} else {
echo "Article Posted Successfully\n";
}
12 125934
>>5931
конечно id категорий.
Если что, вот пример который будет работать и с https тоже (надо указать путь до распакованного, можно нерабочего вордпресса для инклудов).
also см. https://wp-kama.ru/function/wp_xmlrpc_server::mw_newPost

<?php

include '/var/www/wordpress/wp-load.php';
require_once ABSPATH . WPINC . '/class-IXR.php';
require_once ABSPATH . WPINC . '/class-wp-http-ixr-client.php';

$username = "admin";
$password = "porol";

$content = array(
'title' => 'Hello 2ch',
'description' => 'ya tyan prufov ne budet',
'mt_allow_comments' => 0, // 1 to allow comments
'mt_allow_pings' => 0, // 1 to allow trackbacks
'post_type' => 'post',
'categories' => array('13', '22')
//'custom_fields' => array($customfields),
//'mt_keywords'=>$keywords,
//'dateCreated' => $date
);
$client = new WP_HTTP_IXR_CLIENT('https://2ch.hk/xmlrpc.php'); (М)

$params = array(0, $username, $password, $content, true); // Last parameter is 'true' which means post immediately, to save as draft set it as 'false'
if (!$client -> query('metaWeblog.newPost', $params)) {
echo('Something went wrong - '.$client -> getErrorCode().
' : '.$client -> getErrorMessage());
} else {
echo "Article Posted Successfully\n";
}
Levi5.png783 Кб, 868x932
13 125938
Блять, двач такой двач. У русских есть такая черта - делать что-то, не задаваясь вопросом, а зачем это нужно. Прямой вопрос:

А ЗАЧЕМ ЗДЕСЬ ВООБЩЕ НУЖЕН XML?

Какой в этом смысл, почему не REST API? Почему не JSON? Время SOAP-ов прошло, если только ты настольный клиент на древних дельфях пишешь, тогда ладно. В противном случае не вижу смысла разводить цирк с XML'ями.
14 125984
>>5938
для XMLRPC- это фишка для удаленого постинга в вордперс. Просто берешь шаблон, отправляешь его Post-запросом и все.
EditorWindow.png191 Кб, 745x477
15 125988
>>5984
Я знаю, что это для удаленного постинга! Вопрос совсем в другом, какая конечная цель? Если удаленно публиковать статьи... так есть нормальные десктопные клиенты - MarsEdit, Open Live Writer, Blogo, Ulysses и т.д. Не надо жопу рвать, выдумывать XML-схемы.
16 126002
>>5988

>какая конечная цель?


есть плагин для майкрософт ворд, который позволяет из проги статьи писать и отправлять. Если человек привык в ворде работать, то ему проще будет так.
Обновить тред