2011年3月13日日曜日

PHPでブログ更新ping(weblogUpdates.ping)を送信する

PHPでメール送信してblogger自動投稿してみるの続き。

bloggerではping送信先を追加する機能はないので、どうせPHPでブログ自動投稿するならばping送信までやった方がいいでしょ、とのこと。アクセスアップ的にもping送信した方が良いと言われてるけど、どれほど効果があるものかわからないが、やらないよりはやっとけか。

PHPでのping送信はいくつか方法あるが、XML_RPC_Clientで簡単に送れそう。(いくつか方法があるというのはXML_RPC_Clientクラスを使うとか、使わないかとかいったレベルでのこと。通信にはPOSTでXML-RPC形式で送ってやるってことには変わらない。念のため。XML/RPC.phpを読めば何してるかわかる)
<?php
require_once('XML/RPC.php');

$hosts = array(
  'http://api.my.yahoo.co.jp' => '/RPC2',
  'http://blogsearch.google.co.jp' => '/ping/RPC2',
  'http://rpc.reader.livedoor.com' => '/ping',
  'http://ping.fc2.com .com' => '/',
  'http://ping.rss.drecom.jp' => '/',
  'http://ping.blogoon.net' => '/',
  'http://rpc.blogrolling.com' => '/pinger/',
  'http://ping.namaan.net' => '/rpc/',
  'http://hamo-search.com' => '/ping.php',
  'http://ping.dendou.jp' => '/',
  'http://ping.freeblogranking.com' => '/xmlrpc/',
);

$msg=new XML_RPC_Message('weblogUpdates.ping',
                         array(
                           new XML_RPC_Value("ブログ名", 'string'),
                           new XML_RPC_Value("ブログURL", 'string')
                             ));
foreach($hosts as $host => $path) {
  $c = new XML_RPC_Client($path, $host, 80);
  $c->send($msg);
}
この例だとping送りっぱなし。sendはresponseをreturnするので、きちんと返りを見て処理はすべき。失敗し続けるホストを検知できるようにして、送信先のリストから外すくらいはできるようにはしておけば良いかな。ちなみにこの送信先リストはPing送信先!!もっとも効果が高いベスト24 2010年8月更新より。

このスクリプトを前回のメールでのblogger自動投稿が完了後に呼んでやればping送信まで行える。