XMLRPC интерфейс WordPress

Решил сделать из блога доску объявлений для этого надо чтобы пользователь без регистрации мог добавлять объявления. Создал пользователя «anonymous» теперь все записи будут от его имени идти. Писать напрямую скрипт, чтоб добавлял объявы некрасиво как-то и не безопасно.
Вспомнил про XMLRPC получается очень даже красиво : создаем скрипт ads.php, жестко прописываем нужные нам поля, ненужно выкидываем, через тот же xmlrpc получаем списочек категорий, обрабатываем их ну и если юзверь все ввел правильно отправляем пост под именем анонимуса в блог.

Долго искал интерфес xmlrpc для WP, ничего толкового не нашел только вот статеку http://phpclub.ru/detail/article/xmlrpc .
Потом просто открыл фай xmlrpc.php все оказалась на месте список интерфейсов в самом начале:

 // WordPress API
 'wp.getPage' => 'this:wp_getPage',
 'wp.getPages' => 'this:wp_getPages',
 'wp.newPage' => 'this:wp_newPage',
 'wp.deletePage' => 'this:wp_deletePage',
 'wp.editPage' => 'this:wp_editPage',
 'wp.getPageList' => 'this:wp_getPageList',
 'wp.getAuthors' => 'this:wp_getAuthors',
....
....

Теперь рассказываю как написать простенького клиента и запустить.
http://www.keithdevens.com/software/xmlrpc/source.php качаем отсюда библиотеку.
И простенький клиент

 include_once 'keitXmlRpc.php';
 $site = "domen.com";
 $location = "/xmlrpc.php";
 list($success, $response) = XMLRPC_request( $site, $location,'wp.getCategories',
    array(0,'anonymous', 'pasword') );
 echo '
'; print_r($success); echo '

';
echo '

'; print_r($response); echo '

';

Методом XMLRPC_request можно получить любые данные из вашего блога, или написать что-то в блог. Одна тонкость состоит в том чтобы знать порядок аргументов в массиве все методы разные и практически все требуют лоигин и пароль. Поэтому для каждого метода придется открывать xmlrpc.php что лежит в корне вашего блога и смотреть порядок аргументов. Например, чтобы получить список категорий находим метод mw_getCategories вы увидите нечто такое

function mw_getCategories($args) {
 global $wpdb;
 $this->escape($args);
 $blog_ID = (int) $args[0];
 $user_login = $args[1];
 $user_pass = $args[2];


Ну думаю все понятно.
Далее по ходу работы обнаружился серьезный косяк в работе библиотеки Keith Devens это которая у нас include_once ‘keitXmlRpc.php’; если если отправлять в качестве данных типа string html текст, в функции XML_serialize, когда происходит ее рекурсивный вызов, происходит многократное кодирование строки данных функцией htmlspecialchars($value) в результате < кодируется сначала < и потом повторно кодируется &lt; ну в общем подправил немного это дело таким вот образом

$xml_serialized_string = str_replace(array('&amp;','&lt;','&gt;','&quot;'),
array('&','<','>','"'),$xml_serialized_string);


Привожу пример нескольких функции.

function editAds($id, $title, $content, $text_more, $mt_keywords,
$mt_allow_comments,$categorie,$adsPassword) {
	 global $site, $location, $login, $password;
	 $content_struct = array(
       'title'=>$title,
       'description'=>$content,
        'mt_text_more'=>$text_more,
       'categories' =>  array($categorie),
       'mt_keywords'=>$mt_keywords,
       'mt_allow_comments'=>$mt_allow_comments,
       'mt_allow_pings'=>'closed',
       'wp_slug' => $adsPassword
	);

	$arg = array((int)$id , $login, $password, XMLRPC_prepare($content_struct), 1);
	return XMLRPC_request($site,  $location , 'metaWeblog.editPost', $arg);
}

function delete($id) {
	 global $site, $location, $login, $password;
	$arg = array(0=>'null',1=>(int)$id , 2=>$login,  3=>$password,  4=>0);
	return XMLRPC_request($site,  $location , 'metaWeblog.deletePost', $arg);
}
function uploadFile($fileName){
	global $site, $location, $login, $password;
	if(preg_match('~\.(jpe|jpeg|jpg)$~si',$fileName)) $mimeType = 'image/jpeg';
	//elseif(preg_match('~\.gif$~',$fileName)) $mimeType = 'image/gif';
	//elseif(preg_match('~\.png$~',$fileName)) $mimeType = 'image/png';
	else return false;
	if (is_file($fileName)) {
		$fd = fopen ($fileName, "r");
		$bits = fread ($fd, filesize ($fileName));
	}
	$content_struct = array(
       'name'=>$fileName,
       'type'=>$mimeType,
       'bits' =>  base64_encode ($bits),
       'bits type'=>'base64',
       'overwrite' => 0
	);
	$arg = array(0,$login,$password, XMLRPC_prepare($content_struct));
	$result = XMLRPC_request($site,  $location , 'wp.uploadFile', $arg);
	return $result;
}

Обсуждение на сайте:

Рубрика:  апреля 3, 2008.
/ » » »


Похожие записи:

One Response to XMLRPC интерфейс WordPress

  1. says:

    ! Мы предлагаем вам большое количество частных бесплатных он лайн видео сюжетов! Заходи на

Новости

  • Бюджет Украины в глубоком пике
  • Киев выступает за свободную торговлю
  • В Украине предложили ввести новые штрафы для курильщиков
  • Новый тренажер харьковских курсантов
  • Украина будет поддерживать решение ООН
  • Объяснения от Олега Тягнибока
  • Некоторые интересные факты про суши
  • Комментарии


    Расширеный поиск +

    Другие статьи

    тут стратегия

    Объявления

    Мои проекты на WordPress

    , - специализированная доска объявлений по недвижимости на стоимость сборки $300 с установкой.
    городская доска объявлений, основные разделы: недвижимость, транспорт, услуги, работа, куплю-продам. Стоимость сборки $300 с установкой.
    - разработка, поддержка.

    Счетчики

    our blog