SSブログ

PHP PEARを使って、ブログ更新通知を送る [Web開発]

ずいぶん前のねたですが「シェルスクリプトで更新通知を送ってみる」で、シェルスクリプトでCURLを使って、かなり無理やり更新通知を送る方法を書いたのですが…。

諸般の事情によりorz、Windowsから更新通知を送ることししました。CURLを入れて、バッチファイルで呼び出してでも作れないことはないのですが、もうちょっと賢い方法で作ってみようということで、PEARにXML_RPCがあるのでそれを使ってみようということにしました。

まず、PEARの導入についてはPEARのサイトにいって、Documentationを参照してください(丸投げw)。日本語のドキュメントもありますから。
XML_PRCは、デフォルトで入りますので、特にパッケージを入れる作業はいりません。"pear list"を実行してリストにあればよいです。とりあえずは、updateしておいたほうがよいかもしれません。

それで、とりあえずは動いたコードです。一部、PEARのドキュメントのサンプルコードのまんまのところもあります。実装するときにはもうちょっとお行儀よく書き換えたほうがよいと思います。

function sendUpdatePing($url,$blogName,$blogUrl){
/*
$url: 通知の送り先URL
$blogName: ブログの名称
$blogUrl: ブログのURL
*/
    $urlInfo=parse_url($url);
    $host=$urlInfo['host'];
    $path=$urlInfo['path'];
    if(array_key_exists('query',$urlInfo))
        $path.="&{$urlInfo['query']}";
    $port=array_key_exists('port',$urlInfo) ? $urlInfo['port'] : NULL;
    $params=array(
        new XML_RPC_Value($blogName),
        new XML_RPC_Value($blogUrl),
    );
    $msg=new XML_RPC_Message('weblogUpdates.ping',$params);
    $cli=new XML_RPC_Client($path,$host,$port);
    $resp = $cli->send($msg);
    if (!$resp) {
        echo 'サーバーの接続に失敗しました。: ' . $cli->errstr."\n";
        exit;
    }
    if (!$resp->faultCode()) {
        $val = $resp->value();
        $data = XML_RPC_decode($val);
        echo 'flerror:'.$data['flerror'] .' message:'.$data['message']."\n";
    }
    else {
        echo 'Fault Code: '.$resp->faultCode()."\n";
        echo 'Fault Reason: '.$resp->faultString()."\n";
    }
}

ソース上にコメントはございませんが、何をやっているのかはPEARのドキュメントのXML_RPCの項を参照してみてください。
あと、1つ気をつけていただきたいこととしては、ブログの名称がマルチバイトの場合コード系をUTF-8になるようにしたほうがよいと思われます。
この関数をPHPのコマンドから呼び出すようにしているのですが、ソースはWindowsネイティブ(すなわち"SHIFT_JIS")で書いてますので、iconv を使って"UTF-8"へ変換して渡しています。Windowsのいうところの"Unicode"で書いてもいいんですが、いわゆる一般的な"UTF-8"との関係がよくわからないので、そうしました。
もしかしたら、うまいこと環境を設定すれば、コード系は気にしなくてもよいかもしれません。


タグ:PHP PEAR
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Copyright © 2005-2009, Finky All Rights Reserved.

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。