/コンピュータ/blogn/自前のping一括送信
pingoo!も便利なのだが、登録数が増えてくると管理が面倒だし、一々ログインしないと結果が見れないのも不便だ。
なのでいっそ自分で一括配信の仕組みを作ることに。
参考にするのはここ。
とりあえず
ぐらいを目標にしつつ、最初はリストをベタ書きする(笑)
まず
#pear install XML_RPC
こんなかんじ。
さくさくとサンプルを元にいじっていきます。
<?php
require_once("XML/RPC.php");
require_once("XML/RPC/Server.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
$logfile="/****/log/pinglog.txt";
function pingproxy ($params) {
file_put_contents($logfile,"RPCSERVER_start\n",FILE_APPEND);
global $logfile;
$servers=array(
array(
'server' => 'http://ping.rss.drecom.jp',
'path' => '/', ),
array(
'server' => 'http://ping.bloggers.jp',
'path' => '/rpc/',
),
);
global $XML_RPC_erruser; // import user errcode value
$msg=new XML_RPC_Message('weblogUpdates.ping',$params);
//ここループ
foreach($servers as $k => $v){
$client=new XML_RPC_Client($v['path'],$v['server'],80);
$response=$client->send($msg);
if(!$response->faultCode()){
file_put_contents($logfile,$v['server'].":success\n",FILE_APPEND);
}else{
file_put_contents($logfile,$v['server'].":fail\n",FILE_APPEND);
}
//ここまでループ
}
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(0, "boolean"),
"message" => new XML_RPC_Value("Thanks for the ping."),
),"struct");
return new XML_RPC_Response($value);
}
file_put_contents($logfile,"---start---:".date("r")."\n",FILE_APPEND);
//RPCの実行
$s = new XML_RPC_Server(array("weblogUpdates.ping" => array("function" => "pingproxy")));
file_put_contents($logfile,"----end----:".date("r")."\n",FILE_APPEND);
?>
第一弾。とりあえずベタ書きバージョン。
さらにリスト読み込み&サーバ名とパス分割バージョン。
<?php
require_once("XML/RPC.php");
require_once("XML/RPC/Server.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
$logfile="/********/pingproxy/pinglog.txt";
$pinglist="/********/pingproxy/pinglist.txt";
function pingproxy ($params) {
file_put_contents($logfile,"RPCSERVER_start\n",FILE_APPEND);
global $logfile;
global $pinglist;
global $XML_RPC_erruser; // import user errcode value
$msg=new XML_RPC_Message('weblogUpdates.ping',$params);
//ここループ
$lines = file($pinglist);
foreach ($lines as $line_num => $line) {
preg_match ("/^[^\\/]+\\/\\/([^\\/]+)(\\/.+)$/", rtrim($line) ,$match);
if(($match[2]!="")and($match[1]!="")){
$client=new XML_RPC_Client($match[2],$match[1],80);
$response=$client->send($msg);
if(!$response->faultCode()){
file_put_contents($logfile,$match[1].":success\n",FILE_APPEND);
}else{
file_put_contents($logfile,$match[1].":fail\n",FILE_APPEND);
}
}
//ここまでループ
}
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(0, "boolean"),
"message" => new XML_RPC_Value("Thanks for the ping."),
),"struct");
return new XML_RPC_Response($value);
}
file_put_contents($logfile,"---start---:".date("r")."\n",FILE_APPEND);
//RPCの実行
$s = new XML_RPC_Server(array("weblogUpdates.ping" => array("function" => "pingproxy")));
file_put_contents($logfile,"----end----:".date("r")."\n",FILE_APPEND);
?>