PHP MetaWeblog API сервер - PullRequest
       29

PHP MetaWeblog API сервер

1 голос
/ 05 августа 2011

Существует ли какой-либо класс PHP или ресурс для использования API Metaweblog? Я хочу добавить этот API к моей собственной CMS (например, WP), чтобы другие приложения могли легко отправить (или ...) бросить его

1 Ответ

3 голосов
/ 03 мая 2012

Реализация API MetaWeblog http://www.xmlrpc.com/metaWeblogApi в PHP.

Я посмотрел на этот скрипт, на который я ссылался для вдохновения, чтобы разработать реализацию, которую я сейчас использую. Не стесняйтесь использовать приведенный ниже пример кода в качестве примера реализации API metaweblog, но, пожалуйста, рассмотрите возможность использования современной библиотеки XMLRPC. Я включил ссылку на измененную версию исходного файла "xmlrpc.php", который требуется в примере кода.

Вот библиотека xmlrpc, используемая в примере кода: Библиотека XMLRPC, модифицированная для работы с PHP 5.4 - изначально написана Китом Девенсом .

Выполнение быстрого поиска пакетов в packagist также предоставляет множество замечательных опций, которые намного более дальновидны с точки зрения стандартов PHP. ZendFramework2 даже включает в себя компонент , который вы можете использовать в своем проекте с минимальными зависимостями (10 пакетов - не вся структура). Я настоятельно рекомендую, чтобы этот пример кода использовался как таковой, и любая новая разработка выполнялась с использованием современной библиотеки XMLRPC.

Добавление примера кода здесь в случае, если первая ссылка умирает:

<?php
/**
 * Skeleton file for MetaWeblog API http://www.xmlrpc.com/metaWeblogApi in PHP
 * Requires Keith Devens' XML-RPC Library http://keithdevens.com/software/xmlrpc and store it as xmlrpc.php in the same folder
 * Written by Daniel Lorch, based heavily on Keith Deven's examples on the Blogger API.
 */

require_once dirname(__FILE__) . '/xmlrpc.php';

function metaWeblog_newPost($params) {
  list($blogid, $username, $password, $struct, $publish) = $params;
  $title = $struct['title'];
  $description = $struct['description'];


  // YOUR CODE:
  $post_id = 0; // id of the post you just created


  XMLRPC_response(XMLRPC_prepare((string)$post_id), WEBLOG_XMLRPC_USERAGENT);
}

function metaWeblog_editPost($params) {
  list($postid, $username, $password, $struct, $publish) = $params;


  // YOUR CODE:
  $result = false; // whether or not the action succeeded


  XMLRPC_response(XMLRPC_prepare((boolean)$result), WEBLOG_XMLRPC_USERAGENT);
}

function metaWeblog_getPost($params) {
  list($postid, $username, $password) = $params;
  $post = array();


  // YOUR CODE:
  $post['userId'] = '1';
  $post['dateCreated'] = XMLRPC_convert_timestamp_to_iso8601(time());
  $post['title'] = 'Replace me';
  $post['content'] = 'Replace me, too';
  $post['postid'] = '1';


  XMLRPC_response(XMLRPC_prepare($post), WEBLOG_XMLRPC_USERAGENT);
}

function XMLRPC_method_not_found($methodName) {
  XMLRPC_error("2", "The method you requested, '$methodName', was not found.", WEBLOG_XMLRPC_USERAGENT);
}

$xmlrpc_methods = array(
    'metaWeblog.newPost'  => 'metaWeblog_newPost',
    'metaWeblog.editPost' => 'metaWeblog_editPost',
    'metaWeblog.getPost'  => 'metaWeblog_getPost'
    );

$xmlrpc_request = XMLRPC_parse($HTTP_RAW_POST_DATA);
$methodName = XMLRPC_getMethodName($xmlrpc_request);
$params = XMLRPC_getParams($xmlrpc_request);

if(!isset($xmlrpc_methods[$methodName])) {
  XMLRPC_method_not_found($methodName);
} else {
  $xmlrpc_methods[$methodName]($params);
}
...