phpmetaweblog

PHP MetaWeblog API server


Is there any PHP class or resource for using Metaweblog api ? I want to add this api to my own cms (like wp) so that other application could easily post (or ...) throw it


Solution

  • Implementation of the MetaWeblog API http://www.xmlrpc.com/metaWeblogApi in PHP.

    I looked to this script I linked for inspiration to develop the implementation I'm currently using. Feel free to use the example code below as an example of implementing the metaweblog API - but please consider using a modern XMLRPC library. I've included a link to a modified version of the original "xmlrpc.php" file that the example code requires.

    Here's the xmlrpc library the example code utilizes: XMLRPC library modified to work with PHP 5.4 - originally written by Keith Devens.

    Doing a quick package search on packagist also provides many great options that are much more forward thinking in terms of PHP standards. ZendFramework2 even includes a component you can use in your project with minimal dependencies (10 packages - not the entire framework). I would strongly recommend that this example code, be used as such, and any new development be done with a modern XMLRPC library.

    Adding the example code here in case the first link dies:

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