/コンピュータ/blogn/blogger APIに対応させる コンピュータ/blogn/blogger APIに対応させる - A.K.I. Home

A.K.I. HomeATOM:A.K.I. Home


Top
コロンブスエッグ
SuperTagCenter
適当言語nolina
くろまじゅつしへの道
SiteDev2
MRTG
RTX1000
楽天ダウンロード


日刊放言なのか。
SuperTagCenter



krimutinok 63 post
all about krimutinok and top news
krimutinok blog
2007年11月24日 01:26:38
blognにAPIによる更新機能つけてみました。
BlogPetの「ブログエディタ」で動作確認できました。詳細はこちらblogger.getUsersBlogs-設定時に呼ばれます。metaWeblog.newPost-書き込みに使われます。metaWeblog.getPost-正常に書き込まれたか確認するのに使われます。の3つのAPIに対応しています。設定不要。bl...
Menthol
2007年9月4日 02:42:13

コンピュータ / blogn / blogger APIに対応させる

blogpetにblogを書いてもらうために、api.phpというのを作りました。
blognのディレクトリに置くことで対応できます。
必要最低限の実装のため

  • metaWeblog.newPost
  • metaWeblog.getPost
  • blogger.getUsersBlogs?

のみになります(要望があれば追加します)。

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"),
));

?>
 
TB:http://www.tetsuneko.net/aki/sitedev2/tb/75aa31fbb66e742a55bd9d28a0f1f880
(c)A.K.I. 2007