309 文字
2 分
PHPでXML-RPC
2010-03-12

doodle4 PHPでXML RPC

Blog記事の更新をサーチエンジンなどに通知するXML RPCをPHPで実装する方法を紹介します。

まず、weblogUpdates.pingの仕様。
http://www.xmlrpc.com/weblogsCom

weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname="none") returns struct

ちなみに、weblogUpdates.extendedPingというpingより多くの必須パラメータがあるインターフェイスも存在する。
pingで事足りるのでpingだけを実装。
http://weblogs.com/api.html#5

PHPでXML-RPCを扱うためには、PEARのXML_RPC2を使うのが便利。APIの設計は綺麗で使いやすい。

以下にコード書いておきます。

<?php
require_once('XML/RPC2/Client.php');
$blog_title = 'おれのブログ';
$blog_url = 'https://matsu.teraren.com/';
$url_array = array(
'http://www.google.com/webmasters/tools/ping'
,'http://search.yahooapis.com/SiteExplorerService/V1/ping'
,'http://www.bing.com/webmaster/ping.aspx'
,'http://submissions.ask.com/ping'
);
$options = array(
'prefix' => 'weblogUpdates.'
);
$call_option = array(
$blog_title
, $blog_url
);
foreach($url_array as $url){
try{
$client = XML_RPC2_Client::create($url, $options);
$result = $client->remoteCall___('ping', $call_option);
if($result['flerror']){
// goo returns error but message says success.
if(strpos($result['message'], 'Thanks for the ping.') === false){
throw new UnexpectedValueException($result['message']);
}
}
}catch(UnexpectedValueException $e){
trigger_error($url."\n\n".print_r($e, true), E_USER_NOTICE);
}catch(XML_RPC2_Exception $e){
trigger_error($url."\n\n".print_r($e, true), E_USER_NOTICE);
}
}

注意

  • pingサーバは使えなくなる場合が多いので、例外はしっかりハンドリングしておく。半年前の厳選20サーバ中、半分以上が存在していない状態でした。
  • レスポンスのフォーマットが仕様通りじゃない
  • ブログタイトルにマルチバイトを含むときはUTF-8に変換して送る処理を入れてね。または、UTF8で書く。
PHPでXML-RPC
https://blog.teraren.com/posts/phpでxml-rpc/
作者
Yuki Matsukura
公開日
2010-03-12
ライセンス
CC BY-NC-SA 4.0

コメント