タグ:ライブドアブログ

▽この記事は「PC_パソコン用です
スマートフォンでは、記事が分割されるためこちらをクリックしてページを移動してください同じ内容です
概要
PHPプログラム
ライブドアブログの「File Manager APIを使って
ファイルアップロードするサンプルです。
動作の内容
ライブドアブログFile Manager APIを使って
 「/Library/WebServer/Documents/data/Export/HTML/Fileフォルダ
 「http://blog.livedoor.jp/livedoorID/data/Export/HTMLアップロードします
※※※先頭が「 _ 」のフォルダアップロードしない設定にしてあります)
ライブドアブログでは2018年1月31日で「FTPによる接続機能」が終了しました
File Manager API について - ライブドアブログのヘルプPC向け)から
http://help.blogpark.jp/archives/52491176.html
基本情報の設定
ライブドアブログログインしAPI Keyから2つのデータを取得して設定します44行目
①◎ルートエンドポイントAPI にアクセスするための固有のURIのことを指します
②◎File Manager用パスワード****
注意点は
ファイルアップロードする場合は
そのファイルがあるディレクトリまでカレントディレクトリ」を移動し chdir ( $Chdir_EX_Folder )
upload_data を付けてデータを送信することです。
  $data_m =array('dir_id' => $dir_id, 'upload_data' => "@ファイル名.拡張子");
  $API_data=File_Manager_API_ACCESS ("upload", $data_m, $Chdir_Folder);
このプログラム
下のリンク先のソフトウェアで「ファイルの更新使用しています
もしよかったらご覧ください!!
http://snowjobs.blog.jp/archives/mecab_outline.html
http://snowjobs.blog.jp/archives/sqlite_db_movie.html
内容
<?php
	header("Access-Control-Allow-Origin:*");
	header("Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept");
//①◎file_get_contents()で送信データを受信
	$json=file_get_contents("php://input");
//②◎JSON形式データをPHPの配列型に変換----△連想配列で結果を返します「true」***③☆☆☆
	$data=json_decode($json,true);
	$result_data_=array();
	$target_dir  =dirname(__FILE__);
//③◎入力データCHECK(サンプルのため入力データはありません)
	$FTP_type="TYPE_A";	

//(変更点①ー02月14日(水)---1000)
//----------------[ライブドアブログ_File_Manager_API_SETTING]---------
//①◎ブログのファイル管理にアクセスするための情報をを入力してください(アップロード先の接続情報)※※※必須※※※
	//Ⓐ◎ルートエンドポイントのベースURI
	//	例:   	  https://livedoor.blogcms.jp/blog/***MY_BLOG_NAME***/file_manager/
		$BASE_URI="https://livedoor.blogcms.jp/blog/***MY_BLOG_NAME***/file_manager/";
	//Ⓑ◎File Manager用パスワード
		$File_Manager_PASS="File Manager用パスワード****";
	//Ⓒ◎アップロード先のホームのURLアドレス(末尾は「/」にしないでください)
		$Ftp_URL="http://blog.livedoor.jp/livedoorID"; 		
	//Ⓓ◎ファイルサーバー内の基準フォルダ「/data/Export/HTML」△最初の文字は「/」
		$EX_BASE="/data/Export/HTML";	
		$result_data_["IMPORT_URL_PATH_"]=$Ftp_URL.$EX_BASE;
	//Ⓕ◎ファイルのアップロード方法を選択します(ライブドアブログの場合は「FTP」の行をコメントアウトします)
	//	$_File_Protocol="FTP";
		$_File_Protocol="ライブドアブログ_File_Manager_API";
//----------------[ライブドアブログ_File_Manager_API_END]----------------

//(変更点②ー02月14日(水)---1025)△ライブドアブログ_File_Manager_API
if ($_File_Protocol=="ライブドアブログ_File_Manager_API"){
//②◎ルートディレクトリにアクセスします
	$curl  =curl_init();
	$token =$File_Manager_PASS;
	$Header=[
		'X-LDBlog-Token: '.$token,
		'Expect:',
	];
	$data_m  =array();
	$API_data=File_Manager_API_ACCESS("list",$data_m,"");
//③◎接続確認
	if (!$API_data) {
		$result_data_["MODE_"]="ERR_File_Manager_API_ACCESS";	//(接続に失敗しました!!!)
		$result=json_encode($result_data_);
		echo 	$result;	
	//Ⓔ◎File_Manager_APIの接続を閉じる「curl_close($curl)」
		curl_close($curl);
		exit; //←Ⓔ◎処理を抜けます
	}//---if (array_key_exists("errors", $API_data )){

//①◎ファイルをアップロードする送信先のサーバー内に「基準フォルダ」と「開始フォルダ」を作成します→▢▢▢
//		$EX_BASE          	="/data/Export/HTML"; 
//		$LOCAL_File_Start	=$data["LOCAL_File_FOLDER"];  //←①◎※※※
		$LOCAL_File_Start	="/Library/WebServer/Documents/data/Export/HTML/File"; //←①◎初期値***③☆☆☆
	//(変更点①ー02月28日(水)---0952)$LOCAL_BASE
		$LOCAL_BASE=dirname( $LOCAL_File_Start );
			$EX_Folder=preg_replace("/^.*?".preg_quote($LOCAL_BASE,"/")."[\/]/i","",$LOCAL_File_Start);
			$FTP_dir  =$EX_BASE."/".$EX_Folder;	//←mkdir---/data/Export/HTML/File
		$File_lists=array();
		$dir_id =File_Manager_API_mkdir_recursive($EX_BASE,$FTP_dir); //←①◎$EX_BASEは使用しません
			$result_data_["EX_BASE"]	=$EX_BASE;
			$result_data_["FTP_dir"] 	=$FTP_dir;
			$result_data_["FTP_File_dir"]=$Ftp_URL.$EX_BASE."/".$EX_Folder; //※使用しません
	//Ⓒ◎アップロード先にファイルがあるか「CHECK」します
	//		$data_m  =array('dir_id' => $dir_id);
	//		$API_data=File_Manager_API_ACCESS("list", $data, "");
	//		$File_lists=$API_data["lists"];	//△File_Manager_API_mkdir_recursive で作成します→▢▢▢

//②◎FTPとLOCALのURLアイテムの配列を作成します(+リモート側のフォルダの作成)
//		$LOCAL_File_Start="/Library/WebServer/Documents/data/Export/HTML/File"; //←①◎第1引数の初期値
		$FTP_Items=File_Manager_API_getFiles($LOCAL_File_Start,$dir_id);  //→F2※※※
//③◎アップロードします→▢▢▢
		$ERR_i_=0;
		$UP_i_ =0;
	$result_data_["FTP_Items"]=array();
	$result_data_["ERR_Items"]=array();
	foreach($FTP_Items as $File_Items_) {
		$LOCAL_File 	=$File_Items_["LOCAL"];
		$dir_id     		=$File_Items_["API_dir_id"];
		$Filename		=$File_Items_["API_Filename"];
		$Upload_File 	=$File_Items_["API_Upload_data"];
		$Chdir_Folder	=$File_Items_["API_Chdir_Folder"];
		if (is_file($LOCAL_File)){
			$data_m=array('dir_id' => $dir_id, 'upload_data' => "@".$Upload_File);
//			$data_m=array('dir_id' => $dir_id, 'upload_data' => "@".$Upload_File.'; filename='.$Filename);
			$API_data=File_Manager_API_ACCESS("upload",$data_m,$Chdir_Folder);	//←①◎ファイルのアップロード
			if ($API_data){
				$UP_i_++;	
				$result_data_["FTP_Items"][]=$File_Items_["LOCAL"];	}
			else {
				$ERR_i_++; 	
				$result_data_["ERR_Items"][]=$File_Items_["LOCAL"];	
				$result_data_["ERR_Upload_File"]=$Upload_File;	
			}//---if ($API_data){
		}//---if (is_file($LOCAL_File)){
		else {$ERR_i_++; }
	}//---foreach($FTP_Items as $File_Items_) {
//④◎File_Manager_APIの接続を閉じる「curl_close($curl)」
	curl_close($curl);
//⑤◎データを送信します(共通項目)→▢▢▢
	$result_data_["MODE_"] ="FTP_File_FOLDER_COMPLETE";
	$result_data_["UP_i_"] =$UP_i_;
	$result_data_["ERR_i_"]=$ERR_i_;
	$result=json_encode($result_data_);
	echo 	$result;
}//---if ($_File_Protocol=="ライブドアブログ_File_Manager_API"){
?>
<?php
//(変更点④ー02月14日(水)---1016)File_Manager_API_ACCESS()
function File_Manager_API_ACCESS($API_mode, $data_, $Chdir_EX_Folder){
	if ($Chdir_EX_Folder){chdir($Chdir_EX_Folder);	}
	global $result_data_, $curl, $BASE_URI, $Header;
	curl_setopt($curl, CURLOPT_URL, $BASE_URI.$API_mode);
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 
	curl_setopt($curl, CURLOPT_HTTPHEADER, $Header); 
//	curl_setopt($curl, CURLOPT_HEADER, true);
	curl_setopt($curl, CURLOPT_POST, true);
//	curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data, '', '&amp;'));
//	curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data_)); 
	curl_setopt($curl, CURLOPT_POSTFIELDS, $data_); 
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//	curl_setopt($curl, CURLOPT_FAILONERROR, true);
	$response=curl_exec($curl);
	if ($Chdir_EX_Folder){chdir(__DIR__);	}
	if ($response){
		$API_data=json_decode($response,true);
		if (!$API_data || !is_array($API_data) || count($API_data)==0){return true;}
		else if (array_key_exists("errors", $API_data )){
				$result_data_["Errors_0_msg"]	  =$API_data["errors"][0]["msg"];
				$result_data_["Errors_API_mode"]=$API_mode;
				$result_data_["Errors_API_data"]=$data_["upload_data"];
				return false;		}
		else {return $API_data;	}
	}//---if ($response){
	else if ($response==NULL){return false; }
	else {return $response;	}
}//---function File_Manager_API_ACCESS($API_mode, $data_, $Chdir_EX_Folder){
//__END__4

//(変更点①ー02月14日(水)---1016)File_Manager_API_mkdir_recursive ()
//①◎ファイルをアップロードする送信先のサーバーに「基準フォルダ」と「開始フォルダ」を作成します
//		$EX_dir ="/data/Export/HTML";($EX_BASE)	//←①◎第1引数は使用しません
//		$dirname="/data/Export/HTML/File"; 		 	//←②◎第2引数の初期値
function File_Manager_API_mkdir_recursive($EX_dir, $dirname){
	global $result_data_, $curl, $BASE_URI, $Header, $File_lists;
	$parts=explode("/", $dirname); 	
	$dir_path="/";  //←Ⓐ◎FTPの場合は最初の文字は「/」***③☆☆☆
	$data_m=array();
	$dir_id="";
//	$data_m=array('dir_id' => "1601762");
	$API_data=File_Manager_API_ACCESS("list",$data_m,"");
	foreach($parts as $part){
		if ($part==""){continue; }
		$CHECK_id="";
		if (is_array($API_data) && array_key_exists("lists", $API_data)){
			for ($i=0; $i< count($API_data["lists"]); $i++){
				if ($API_data["lists"][$i]["name"]==$part && $API_data["lists"][$i]["is_dir"]==1){
					$CHECK_id=$API_data["lists"][$i]["id"];	
					break;	}
			}//---for ($i=0; $i< count($PRM_); $i++){
		}//---if (is_array($API_data) && array_key_exists("lists", $API_data)){
		if ($CHECK_id==""){
			$data_m=array('dir_id' => $dir_id, 'name' => $part);
			$API_data=File_Manager_API_ACCESS("create_dir",$data_m,"");	//←3レスポンスパラメータ「なし」
				$data_m=array('dir_id' => $dir_id);
				$API_data=File_Manager_API_ACCESS("list",$data_m,"");
		//	$CHECK_id="";
			if (is_array($API_data) && array_key_exists("lists", $API_data)){
				for ($i=0; $i< count($API_data["lists"]); $i++){
					if ($API_data["lists"][$i]["name"]==$part && $API_data["lists"][$i]["is_dir"]==1){
						$CHECK_id=$API_data["lists"][$i]["id"];
						break;	}
				}//---for ($i=0; $i< count($PRM_); $i++){
			}//---if (is_array($API_data) && array_key_exists("lists", $API_data)){
			if ($CHECK_id==""){
				$result_data_["part"] =$part;
				$result_data_["parts"]=json_encode($parts);
				return false; }
		}//---if ($CHECK_id !=""){
		$dir_id=$CHECK_id;
		$data_m=array('dir_id' => $dir_id);
		$API_data=File_Manager_API_ACCESS("list",$data_m,"");
	}//---foreach ($parts as $part){
	$File_lists =$API_data["lists"];
	$result_data_["dir_id*****"]=$dir_id;
	return $dir_id;
}//---function File_Manager_API_mkdir_recursive($EX_dir, $dirname){
//__END__1

//(変更点②ー02月14日(水)---1217)File_Manager_API_getFiles ()
//②◎アップロードに必要なファイル情報を「配列」に書き出します
// (送信先のサーバーにフォルダがない場合は「フォルダ」を作成します)
//		$path=$LOCAL_File_Start="/Library/WebServer/Documents/data/Export/HTML/File"; //←①◎第一引数の初期値
//		$EX_BASE="/data/Export/HTML";	
function File_Manager_API_getFiles($path, $dir_id_File) {
//(変更点②ー02月28日(水)---0952)$LOCAL_BASE
	global $result_data_, $curl, $BASE_URI, $Header;
	global $EX_BASE, $LOCAL_BASE, $FTP_type;
		$result=array();
		$LOCAL_FTP_Items=array();
		$EX_Folder_m=preg_replace("/^.*?".preg_quote($LOCAL_BASE, "/")."[\/]/i","",$path); //←①◎※※※
	foreach(glob($path."/*") as $File){
		$array=explode("/", $File);
		$File_base=$array[count($array) -1];
		$local_File =$EX_Folder_m."/" .$File_base;
		$remote_File=$EX_BASE."/".$EX_Folder_m."/".$File_base;
		if (preg_match("/^Html_store_Item.js$/",$File_base,$matches)){continue; }
		if (preg_match("/^[_\\.]/i",$File_base,$matches)){continue; }
		if (is_dir($File)){
		//①◎ディレクトリID を取得します→▢▢▢
			$new_dir_Flag="EXIST";
			$data_m =array('dir_id' => $dir_id_File);
			$API_data=File_Manager_API_ACCESS("list",$data_m,"");
			$CHECK_id="";
			if (is_array($API_data) && array_key_exists("lists", $API_data)){
				for ($i=0; $i< count($API_data["lists"]); $i++){
					if ($API_data["lists"][$i]["name"]==$File_base && $API_data["lists"][$i]["is_dir"]==1){
						$CHECK_id=$API_data["lists"][$i]["id"];	
						break;	}
				}//---for ($i=0; $i< count($PRM_); $i++){
			}//---if (is_array($API_data) && array_key_exists("lists", $API_data)){
		//②◎リモートにディレクトリを作成します→▢▢▢
			if ($CHECK_id==""){
				$data_m =array('dir_id' => $dir_id_File, 'name' => $File_base);
				$API_data=File_Manager_API_ACCESS("create_dir",$data_m,"");	//←3レスポンスパラメータ「なし」
				$data_m =array('dir_id' => $dir_id_File);
				$API_data=File_Manager_API_ACCESS("list",$data_m,"");
				if (is_array($API_data) && array_key_exists("lists", $API_data)){
					for ($i=0; $i < count($API_data["lists"]); $i++){
						if ($API_data["lists"][$i]["name"]==$File_base && $API_data["lists"][$i]["is_dir"]==1) {
							$CHECK_id=$API_data["lists"][$i]["id"];
							break;	}
					}//---for ($i=0; $i< count($PRM_); $i++){
				}//---if (is_array($API_data) && array_key_exists("lists", $API_data)){
				if ($CHECK_id==""){
					$result_data_["File_base"]=$File_base;
					$result_data_["parts"]=json_encode($array);
					return false;	}
				else {$new_dir_Flag="API_mkdir"; }
			}//---if ($CHECK_id==""){
			if ($FTP_type=="TYPE_B" && $new_dir_Flag=="EXIST"){
				if (preg_match("/^(button_Image|font)$/i",$File_base)){continue; }
			}//---if ($FTP_type=="TYPE_B"...){
			$dir_id_r=$CHECK_id;
			$result=array_merge($result, File_Manager_API_getFiles($File, $dir_id_r)  );
			continue;
		}//---if (is_dir($File)){
	//③◎ファイルの場合に転送アイテムに追加します→▢▢▢
	//		$local_File =				  $EX_Folder_m."/".$File_base;
	//		$remote_File=$EX_BASE."/".$EX_Folder_m."/".$File_base;
			$LOCAL_FTP_Items["LOCAL"]=$File;
			$LOCAL_FTP_Items["FTP"]  =$remote_File;
		$LOCAL_FTP_Items["API_Filename"]   =$File_base;
		$LOCAL_FTP_Items["API_Upload_data"]=$File_base;
//(変更点③ー02月28日(水)---1811)$LOCAL_FTP_Items["API_Chdir_Folder"]
//		$LOCAL_FTP_Items["API_Chdir_Folder"]=$EX_Folder_m;
		$LOCAL_FTP_Items["API_Chdir_Folder"]=$LOCAL_BASE."/".$EX_Folder_m;
		$LOCAL_FTP_Items["API_dir_id"]      =$dir_id_File;
		$result[]=$LOCAL_FTP_Items;
	}//---foreach(glob($path."/*") as $File) {
	return $result;
}//---function File_Manager_API_getFiles($path, $dir_id_File) {
//__END__2
?>
ZIPファイルのダウンロード

案の定
エンゲル係数

かい
句風
工夫
工夫(id=kufuu_je)
句風
工夫(id=koufu_j_1)
交付(id=koufu_j_2)
テスト
テスト-ケース(-ハイフンあり)
テストケース
test
test case
交付
テストケース           エンゲル係数

このプログラムは、
ヒラギノ丸ゴ ProN とSafari8.0.3(WebKit)に最適化されています***③☆☆☆

Windowsでは
①◎下記のフォントをインストールして表示して見てください。
  和田研中丸ゴシック2004絵文字P(2015/06/18)4.3.7.0

ライブドアブログでマウスオーバーポップアップを表示できるかテストしてみるの続きです
とりあえず出来てしまった。

簡単に解説したいと思います。

操作方法
 ①◎単語にマウスを合わせるとポップアップが表示されます。
 ②◎表示後単語をクリック表示/非表示を切り替えます。
        (非表示の状態は継続します)
 ③◎表示後単語またはポップアップ以外をクリック[閉じる]
 Ⓡポップアップの右下↘でサイズを自由に変更できます。
 Ⓡウインドウのサイズを変更時にポップアップ位置が自動で調整されます。

プログラムの概要
 ①◎まず単独で表示可能なHTML書類を作成します。
  http://snowjobs.blog.jp/content/2015_08_04/DICT/DICT_test.html
 ②◎テキスト入力欄の単語
  <span class="dictPanel">案の定</span><br>
  <span class="dictPanel">エンゲル係数</span><br>
  <span class="dictPanel" data-word="kufuu_je">工夫(id=kufuu_je)</span><br>
 ③◎span.dictPanelのdata-word属性の値またはテキスト内容⇄
  DICT_test.htmlのDIV.wordのid属性の値と一致する内容(DIV.word)をポップアップに表示します。

 Ⓡ一致する項目がない場合はまだやっていません。****

入力欄の内容(先頭部分のみ)----△jqueryとjquery-UI は読み込み済みです
 <script type="text/javascript" src="http://snowjobs.blog.jp/content/2015_08_04/popup_test.min.js"></script>
 <DIV id="DICT_file_URL" class="display_none" style="display:none;"
   data-dict_URL="http://snowjobs.blog.jp/content/2015_08_04/DICT/DICT_test.html"></DIV>
 <style type="text/css" >
  P.normal_16 {
   color:#636363; line-height: normal; font-size: 16px;
   font-family:"HiraMaruProN-W4","Hiragino Maru Gothic StdN"; }
 </style>
 <P class="normal_16">
  <span class="dictPanel">案の定</span><br>.....

ポイント***③☆☆☆
 ①◎DICT_test.htmlのCSSスタイルを<DIV>で囲っています。
   jQueryで内容を取り込めるようになります。

 ②◎DICT_test.htmlの画像は「絶対パス」で指定して、
   CSSスタイルもHTML内に書いてください。(単体とポップアップ表示用の2種類)

 ③◎ポップアップのリサイズの↘ボックスのCSSスタイルを忘れずに...
  .dict_popup .ui-resizable-se {
    position: absolute;
    z-index: 998;
    right: 0; bottom: 0;
    width: 16px; height: 16px;
    cursor: se-resize; }
問題点
 ①◎この方法はDICT_test.htmlの画像を含めたすべてを読み込みます。
  表示する時だけ画像を読み込むようにするのがベストです。PHP...?

 ②◎ポップアップ表示中は単語のspan.dictPanel に余白を追加するため、
   他の要素が少し移動してしまいます。上に要素を追加する...?


ライブドアブログでマウスオーバーポップアップを表示できるかテストしてみる ①◎jQueryなどのプログラムを自身のブログ内にアップロードします

[ログイン][マイページ][画像/ファイル][画像/ファイル]
[ファイル管理][フォルダを作る][script]
[script][jqeury.js][jquery-ui.js] にアップロードすると

アドレスは次のようになりました。

  http://snowjobs.blog.jp/script/jquery.js
  http://snowjobs.blog.jp/script/jquery-ui.js

[右クリック][リンクをコピー]で確認できます。
「http://ブログのURL」 に /フォルダ/ファイル名 を付けた
分かりやすいものになるようです。


無料ブログで
階層構造でファイルを管理、アップロードが可能だとは思いませんでした。***③☆☆☆


②◎ブログにプログラムを読み込む設定を記述します
[マイページ][ブログ設定][カスタムJS]
  <script type="text/javascript" src="http://snowjobs.blog.jp/script/jquery.js"></script>
  <script type="text/javascript" src="http://snowjobs.blog.jp/script/jquery-ui.js"></script>
[記入後][保存する]

[記事を書く]に戻りテキスト入力欄の下の[プレビュー]を押した後
プレビュー画面のウインドウに切り替えます

[右クリック][要素の詳細を表示]HTMLの<head>の内容を見ると
一番下の<!-- Add Header Tag // -->部分に読み込まれていることが確認できました。
△MacOSX Safari8.0.5


動作確認
 [画像をクリック]この画像のURLが表示されます
この記事のHTMLタグ編集の入力欄では次のように記載されています。

<span class="normal">△MacOSX Safari8.0.5</span>
<img src="http://snowjobs.blog.jp/content/2015_08_02/image/08021336.jpg" id="img_test">
<script type="text/javascript">
 $(function() {
  $("#img_test").click(function(event){alert( $(this).attr("src") ); });
 });
</script>

補足
上記のタグ付きのHTML文字列は
HTML文字実体参照にエスケープして表示しています。
(javascriptタグ内のプログラムを除く)

 <&lt; >&gt; .....
MacOSXではClipMenuアプリで簡単に変換できます。
ClipMenu0.4.4a12***クリップボードの履歴をペースト
 ①◎タグ付きのHTML文字列をコピーします△履歴メニューに保存されます
 ②◎画面右上のClipMenuボタン①◎のメニュー項目[右クリック]
 ③◎[HTML▷][HTML文字実体参照にエスケープ]ペースト完了

補足
jQueryとjQuery UIは次のようにダウンロードしてください。
 ①◎Download Builder | jQuery UI
 ②◎Version1.11.4 (Stable, for jQuery1.6+)
 ③◎画面の下[Download]解凍します
 Ⓐ[jquery-ui-1.11.4.custom][external][jquery]jquery.js
 Ⓑ[jquery-ui-1.11.4.custom]jquery-ui.js
△この2つをアップロードしてください。

↑このページのトップヘ