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;
}

Обсуждение на сайте: wp.od.ua

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


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

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

  1. RedmaE45165 says:

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

Новости

  • У экс-омбудсмена СБУ и ГПУ на офисе никаких проверок не проводила
  • Из-за наводнения в Непале в число пропавших попало и трое украинцев
  • В Косово арестовали гражданок Украины за проституцию
  • Уменьшился выпуск стали у украинского «Метинвест»
  • По причине поломки самолета украинцам пришлось остаться в Нью-Йорке
  • Экс-замминистра по промышленной политике обвиняют в превышении должностных обязанностей
  • Coca-Cola снижает объемы производства
  • Комментарии


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

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

    Объявления

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

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

    Счетчики