/コンピュータ/blogn/blogger APIに対応させる
blogpetにblogを書いてもらうために、api.phpというのを作りました。
blognのディレクトリに置くことで対応できます。
必要最低限の実装のため
のみになります(要望があれば追加します)。
api.php
<?php
require_once("XML/RPC.php");
require_once("XML/RPC/Server.php");
require_once("./common.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
function blogentry ($params) {
//値の取得
$param_blogid=$params->getParam(0)->scalarval();
$param_id=$params->getParam(1)->scalarval();
$param_pass=$params->getParam(2)->scalarval();
$param_title=$params->getParam(3)->structmem("title")->scalarval();
$param_description=$params->getParam(3)->structmem("description")->scalarval();
$now = time()+TIMEZONE;
//ID,Passのチェック
if (!logincheck($param_id, md5($param_pass))) {
//認証エラー
$value = new XML_RPC_Value(
array(
"faultCode" => new XML_RPC_Value(999, "int"),
"faultString" => new XML_RPC_Value("Login Error."),
),"struct");
return new XML_RPC_Response($value);
}
//eid取得
$old_eid = file(LOGDIR."id.dat");
$old_eid[0] = preg_replace("/\n$/", "", $old_eid[0]);
$old_eid[0] = preg_replace("/\r$/", "", $old_eid[0]);
$d_eid = $old_eid[0] + 1;
//logデータ作成
$d_date = gmdate("Ymd",$now);
$d_time = gmdate("His",$now);
$log = $d_eid."<>".$d_date."<>".$d_time."<>-1<>0<>".mb_convert_encoding($param_title,"EUC-JP","UTF-8")."<>".mb_convert_encoding($param_description,"EUC-JP","UTF-8")."<><>0<>0\r\n";
//logデータ書き込み
//ログファイル書き込み
$logname = "log".substr($d_date, 0, 6).".dat";
$err = FileSearch($logname);
if ($err == -1 || $err == 0) {
$value = new XML_RPC_Value(
array(
"faultCode" => new XML_RPC_Value(998, "int"),
"faultString" => new XML_RPC_Value("Log Error"),
),"struct");
return new XML_RPC_Response($value);
}else{
$newlog = @file(LOGDIR.substr($d_date, 0, 4)."/".$logname);
$datetime = $d_date.$d_time;
$newkey = DateSearch($datetime, $newlog);
if ($newkey == -1) {
$fp = fopen(LOGDIR.substr($d_date, 0, 4)."/".$logname, "w");
flock($fp, LOCK_EX);
fputs($fp, $log);
fclose($fp);
}else{
array_splice($newlog, $newkey, 0, $log);
$fp = fopen(LOGDIR.substr($d_date, 0, 4)."/".$logname, "w");
flock($fp, LOCK_EX);
fputs($fp, implode('',$newlog));
fclose($fp);
}
}
$fp = fopen(LOGDIR."id.dat", "w");
flock($fp, LOCK_EX);
fputs($fp, $d_eid);
fclose($fp);
//戻り値(eid)セット
$value = new XML_RPC_Value($d_eid,"string");
return new XML_RPC_Response($value);
}
function getUsersBlogs ($params) {
$value = new XML_RPC_Value(
array(
new XML_RPC_Value(
array(
"url"=>new XML_RPC_Value(HOMELINK),
"blogid"=>new XML_RPC_Value("0"),
"blogName"=>new XML_RPC_Value(mb_convert_encoding(SITENAME,"UTF-8","EUC-JP")),
),"struct"),
)
,"array");
return new XML_RPC_Response($value);
}
function getPost ($params) {
$eid=$params->getParam(0)->scalarval();
$param_id=$params->getParam(1)->scalarval();
$param_pass=$params->getParam(2)->scalarval();
if (!logincheck($param_id, md5($param_pass))) {
//認証エラー
$value = new XML_RPC_Value(
array(
"faultCode" => new XML_RPC_Value(999, "int"),
"faultString" => new XML_RPC_Value("Login Error."),
),"struct");
return new XML_RPC_Response($value);
}
//記事取得
if ($loglist = IDCheck($eid,0)) {
$log = file(LOGDIR.substr($loglist[0],3,4)."/".$loglist[0]);
$key = IDSearch($eid, $log);
$log[$key] = preg_replace( "/\n$/", "", $log[$key] );
$log[$key] = preg_replace( "/\r$/", "", $log[$key] );
list($eid, $d_date, $d_time, $cid, $pid, $d_title, $d_mes, $d_more, $d_cok, $d_tok) = explode("<>", $log[$key]);
}else{
$value = new XML_RPC_Value(
array(
"faultCode" => new XML_RPC_Value(997, "int"),
"faultString" => new XML_RPC_Value("No such log."),
),
"struct");
return new XML_RPC_Response($value);
}
$value = new XML_RPC_Value(
array(
"userid" => new XML_RPC_Value($param_id, "string"),
"dateCreated" => new XML_RPC_Value($d_date."T".substr($d_time,0,2).":".substr($d_time,2,2).":".substr($d_time,4,2),"dateTime.iso8601"),
"postid" => new XML_RPC_Value($eid,"string"),
"description" => new XML_RPC_Value(mb_convert_encoding($d_mes,"UTF-8","EUC-JP"),"string"),
"title" => new XML_RPC_Value(mb_convert_encoding($d_title,"UTF-8","EUC-JP"),"string"),
"link" => new XML_RPC_Value(HOMELINK."?eid=".$eid,"string"),
"permalink" => new XML_RPC_Value(HOMELINK."?eid=".$eid,"string"),
),"struct");
return new XML_RPC_Response($value);
}
function logincheck($loginid, $loginpw){
if (file_exists(LOGDIR."init.dat")){
$init = file(LOGDIR."init.dat");
//$initから改行コード削除
$init[0] = ereg_replace( "\n$", "", $init[0]);
$init[0] = ereg_replace( "\r$", "", $init[0]);
list($id,$pw) = explode("<>", $init[0]);
if ($loginid == $id && $loginpw == $pw) {
// $_SESSION['blogni'] = $loginid;
// $_SESSION['blognp'] = $loginpw;
return true;
}else{
return false;
}
}else{
return false;
}
}
//RPCの実行
$s = new XML_RPC_Server(array(
"metaWeblog.newPost" => array("function" => "blogentry"),
"blogger.getUsersBlogs" => array("function" => "getUsersBlogs"),
"metaWeblog.getPost"=> array("function" => "getPost"),
));
?>