【问题标题】:PHP MetaWeblog API serverPHP MetaWeblog API 服务器
【发布时间】:2011-08-05 14:36:38
【问题描述】:

是否有使用 Metaweblog api 的 PHP 类或资源? 我想将此api添加到我自己的cms(如wp)中,以便其他应用程序可以轻松发布(或...)抛出它

【问题讨论】:

  • 我自己刚刚开始研究这个问题。没有多少(所以不只是你),但这是我要开始的地方:ryanhemelaar.blogsome.com/2009/01/29/… - 只是看看他使用的文件,没有解释,但有评论.

标签: php meta metaweblog


【解决方案1】:

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

我查看了我链接的这个脚本以获得开发我当前使用的实现的灵感。随意使用下面的示例代码作为实现 metaweblog API 的示例 - 但请考虑使用现代 XMLRPC 库。我已经包含了示例代码所需的原始“xmlrpc.php”文件的修改版本的链接。

这是示例代码使用的 xmlrpc 库:XMLRPC library modified to work with PHP 5.4 - originally written by Keith Devens

packagist 上进行快速包搜索还提供了许多很棒的选项,这些选项在 PHP 标准方面更具前瞻性。 ZendFramework2 even includes a component 您可以在项目中使用最少的依赖项(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);
}

【讨论】:

  • 谁有 Keith Deven 的图书馆的副本?该网站现已关闭。
  • @emd 有 this,但此时如果我有时间,我将针对 gggeek.github.io/phpxmlrpc 重新编写此内容
  • 谢谢@andrewpk,我发现了这个:scripts.incutio.com/xmlrpc,它超级好用,所以我就用了。
  • 它可能没有更新,但在 Mavericks 上运行良好!
  • @emd 它在 Mavericks 中可能工作得很好,但这并不意味着使用类似的东西是一个好习惯。我已经用更好的例子更新了我的答案 - 现在 Packagist 中有很多比第一次提出这个问题时更好的库。我强烈建议针对具有前瞻性的现代实施进行任何新的开发。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2012-02-13
  • 2018-04-29
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多