SQLの窓

2016年03月23日


ドコモ デベロッパーサポートで API使いたいと思ってサインアップしようとしたら・・・・。法人情報は後から登録しましょう


新規アカウント登録 | docomo Developer support | NTTドコモ

法人情報を登録すると、API の制限が緩いとあります。普通に授業に使いたいので学校の情報を入力しました。それはいいです。で、文字認証があり、直感的に入力して間違ってしまいました。

しかたないなぁ・・・と思ってもう一度文字認証すると、『入力されていません』と。

法人情報が全て無くなっていましたいまどきこんなバカな WEB アプリ作るとは、笑ってしまいました( 嘘。本当は誰でもなんかその場で発する )

というくだらない記事ですが、人によっては、サインアップやめてしまうか、チェックボックス外して登録するでしょう。

そこで。

チェックボックス外してサインアップしましょう。法人情報登録は後からできます。





タグ:API トラブル
posted by lightbox at 2016-03-23 13:42 | API | このブログの読者になる | 更新情報をチェックする

2016年03月19日


kintone API のトークンを使った PHP コードの注意点

基本操作

これはセミナーとか行かないと直感的には失敗してしまいます。設定を変更したら最後に必ず「設定完了」ボタンをクリックして変更を確定させる必要があります



なので、トークンを生成して保存だけでは使え無いので注意です

▼ 以下、サイボウズ株式会社より返答された内容です
<作成手順> 
 1.アプリ右上の歯車マークより、アプリの設定画面を開きます。 
 
 2.画面下部の「詳細設定」をクリックします
 
 3.「APIトークン」をクリックします
 
 4.「生成する」をクリックします
 
 5.生成された APIトークンに対して、許可する操作のチェックボックス
    を選択します
 
 6. 画面左上の「保存」をクリックします
  
 7.「設定完了」をクリックします
 ※トークン作成後、アプリの設定画面にて、「設定完了」ボタンを
   押下する必要がございます。
API の呼び出し方のバリエーション HTTP ヘッダに Content-Type: application/json を指定すると、URL では無くデータとして送信する必要があります。以下のサンプルでは、curl では URL で渡すほうが簡単で解りやすいので Content-Type を指定していません。 PHP の環境 file_get_contents で API の URL を使用するには、php.ini で allow_url_fopen = On である必要があります。また、https を使用する為に、Windows では extension=php_openssl.dll が有効である必要があります。 curl を利用するには、Windows では extension=php_curl.dll が有効である必要があります ※ curl の オプションでの ssl の指定は、Windows(5.4.13) でも、WEB(5.4.45) でも必要ありませんでした
<?php
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

print "<pre>";
 
// サブドメイン
$subDomain = "サブドメイン";
// トークン
$token = "トークン";
$apiURI = "https://" . $subDomain . ".cybozu.com/k/v1/records.json";

// リクエストヘッダ(1) : パラメータを json で渡す
$header1 = array(
	"Host: " . $subDomain . ".cybozu.com:443",
	"Content-Type: application/json",
	"X-Cybozu-API-Token: ". $token
);
// リクエストヘッダ(2) : パラメータを URL で渡す
$header2 = array(
	"Host: " . $subDomain . ".cybozu.com:443",
	"X-Cybozu-API-Token: ". $token
);

// アプリID
$appId = 1;
 
// *************************************
// HTTPコンテキスト1 ( content 指定 )
// *************************************
$context = array(
	"http" => array(
		"method" => 'GET',
		"header" => implode("\r\n", $header1),
		"content" => json_encode(array("app" => $appId))
	)
);
 
// REST API
$result = file_get_contents(
	$apiURI,
	false,
	stream_context_create($context) // コンテキストの生成
);
 
// 連想配列でダンプ出力 
var_dump( json_decode($result, true) );

print "--------------------------------------\n";

// *************************************
// HTTPコンテキスト2 ( content なし )
// *************************************
$context = array(
	"http" => array(
		"method" => 'GET',
		"header" => implode("\r\n", $header2)
	)
);
 
// REST API
$result = file_get_contents(
	$apiURI . "?app=" . $appId,
	false,
	stream_context_create($context) // コンテキストの生成
);
 
// 連想配列でダンプ出力 
var_dump( json_decode($result, true) );

print "--------------------------------------\n";

$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $apiURI . "?app=" . $appId);

// *************************************
// http ヘッダ作成
// *************************************
$header = $header2;

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

// *************************************
// https 用 ( 無くても動作しています )
// *************************************
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);


// *************************************
// 送信
// *************************************
$result = curl_exec($curl);
if($result === false) {
	$json = json_decode("{}");
}
else {
	// echo 'Operation completed without any errors';
	$json = json_decode($result);
}
curl_close($curl);


// 連想配列でダンプ出力 
var_dump(json_decode($result, true));

print "</pre>";

?>


ログイン名 と パスワード を使用したサンプルは、サイボウズの REST APIの認証設定について にあります。
 


タグ:PHP kintone API
posted by lightbox at 2016-03-19 20:51 | kintone | このブログの読者になる | 更新情報をチェックする

2016年03月13日


というわけで、『関西向け東電プレミアムプラン シュミレーション』ブックマークレットを作成しました

はぴeみる電 [関西電力] の月別電力量のページで実行させて、『計算』ボタンをクリックすると、直近の12ヶ月を使って計算します。( まだ、CSS とか使って無いので美しくは無いです )



▼ ブックマークレット( ブックマークバーへドラッグ・ドロップ )
関西向け東電プレミアムプラン シュミレーション

動作確認は、Google Chrome と Firefox と IE11 です。

▼ ブックマークレットのコード
<a href="javascript:if(!window['_bI']){window._bI={};(function(w,h,b,l,t,z,v){var%20wnd=document.createElement('iframe');with(wnd){frameBorder=b;width=w;height=h;with(style){position='absolute';left=l;top=t;zIndex=z;display=v}}document.body.appendChild(wnd);window._bI.wnd=wnd;var%20url;url='https://secure624.sakura.ne.jp/fire30.winofsql.jp/kanden.js';wnd.contentWindow.document.write('<'+'script%20src=\''+url+'\'%20charset=\'utf-8\'></'+'script>');wnd.contentWindow.document.close();})(500,600,1,'0px','0px',1000,'');}">関西向け東電プレミアムプラン シュミレーション</a>
このコードに関しては以下を参照して下さい。

JavaScript : 通常の WEB ページにブックマークレットでアプリケーション用の IFRAME を埋め込むコード(1)

このコードでは外部スクリプトを使用していませんが、style 要素の代わりに script 要素を使用しているだけです。また、はぴeみる電 は https なので、外部スクリプトも https でホスティングしています。

HTML の文字列化ツール実行される外部スクリプト
parent._bI.wnd.style.backgroundColor = '#ffffff';

str="";
str+="<!DOCTYPE html> \n";
str+="<html> \n";
str+="<head> \n";
str+="<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\"> \n";
str+="<"+"script src=\"//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js\"></"+"script> \n";
str+="</head> \n";
str+="<body> \n";
str+="<pre> \n";
str+="最初の400kWhまで 固定料金 <input type=\"text\" id=\"b01\" style=\"width:50px;\" value=\"8400\">円 \n";
str+="400kWhを超える分 1kWh <input type=\"text\" id=\"b02\" style=\"width:50px;\" value=\"24.6\">円 <input type=\"button\" value=\"計算\" onclick=\"dkfunc()\"> \n";
str+=" 1 <input type=\"text\" id=\"d1\" style=\"width:50px;\"> <input type=\"text\" id=\"n1\" style=\"width:50px;\"> \n";
str+=" 2 <input type=\"text\" id=\"d2\" style=\"width:50px;\"> <input type=\"text\" id=\"n2\" style=\"width:50px;\"> \n";
str+=" 3 <input type=\"text\" id=\"d3\" style=\"width:50px;\"> <input type=\"text\" id=\"n3\" style=\"width:50px;\"> \n";
str+=" 4 <input type=\"text\" id=\"d4\" style=\"width:50px;\"> <input type=\"text\" id=\"n4\" style=\"width:50px;\"> \n";
str+=" 5 <input type=\"text\" id=\"d5\" style=\"width:50px;\"> <input type=\"text\" id=\"n5\" style=\"width:50px;\"> \n";
str+=" 6 <input type=\"text\" id=\"d6\" style=\"width:50px;\"> <input type=\"text\" id=\"n6\" style=\"width:50px;\"> \n";
str+=" 7 <input type=\"text\" id=\"d7\" style=\"width:50px;\"> <input type=\"text\" id=\"n7\" style=\"width:50px;\"> \n";
str+=" 8 <input type=\"text\" id=\"d8\" style=\"width:50px;\"> <input type=\"text\" id=\"n8\" style=\"width:50px;\"> \n";
str+=" 9 <input type=\"text\" id=\"d9\" style=\"width:50px;\"> <input type=\"text\" id=\"n9\" style=\"width:50px;\"> \n";
str+="10 <input type=\"text\" id=\"d10\" style=\"width:50px;\"> <input type=\"text\" id=\"n10\" style=\"width:50px;\"> \n";
str+="11 <input type=\"text\" id=\"d11\" style=\"width:50px;\"> <input type=\"text\" id=\"n11\" style=\"width:50px;\"> \n";
str+="12 <input type=\"text\" id=\"d12\" style=\"width:50px;\"> <input type=\"text\" id=\"n12\" style=\"width:50px;\"> \n";
str+="年間電気料金 <input type=\"text\" id=\"nd\" style=\"width:50px;\" value=\"197618\"> - <input type=\"text\" id=\"sum_result\" style=\"width:50px;\" value=\"\"> \n";
str+=" = <input type=\"text\" id=\"d_result\" style=\"width:50px;\" value=\"\"> - 基本料金 x 12ヶ月 \n";
str+="▼ 基本料金別年間節約額 \n";
str+="1) <input type=\"text\" id=\"d_1\" style=\"width:50px;\"> 2kW(30A相当) 777.6円 \n";
str+="2) <input type=\"text\" id=\"d_2\" style=\"width:50px;\"> 4kW(60A相当) 1555.2円 \n";
str+="3) <input type=\"text\" id=\"d_3\" style=\"width:50px;\"> 6kW(9kVA相当) 2332.8円   \n";
str+="4) <input type=\"text\" id=\"d_4\" style=\"width:50px;\"> 8kW(12kVA相当) 3110.4円 \n";
str+="</pre></body></html> ";
document.write(str);


function dkfunc() {
	var nwk;
	var nsum = 0;
	parent.$("#container_0_subcontainer_0_maincontent_3_ListTable tr").each(function(idx){
		if ( 0 < idx && idx <= 12 ) {
			nwk = parseInt( parent.$(this).find("td").eq(3).text() );
			$("#d"+ idx ).val(nwk);
			nwk = parseInt( (parent.$(this).find("td").eq(5).text()).replace(",","") );
			nsum += nwk;
		}
	});

	$("#nd").val(nsum);

	var b01 = parseInt( $("#b01").val() );
	var b02 = parseInt( $("#b02").val() );
	var w1,w2,w3,w4;
	w3 = 0;
	for ( i = 1; i <= 12; i++ ) {
		w1 = parseInt($("#d"+i).val());
		if ( w1 <= 400 ) {
			$("#n"+i).val( b01 );
			w3 += b01;
		}
		else {
			w2 = (w1 - 400) * b02;
			$("#n"+i).val( b01 + w2 );
			w3 += b01 + w2;
		}
	}
	$("#sum_result").val( w3 );
	$("#d_result").val( parseInt($("#nd").val()) - w3 );
	w4 = parseInt($("#nd").val()) - w3;
	$("#d_1").val( w4 - 777 * 12 );
	$("#d_2").val( w4 - 1555 * 12 );
	$("#d_3").val( w4 - 2332 * 12 );
	$("#d_4").val( w4 - 3110 * 12 );

}

※ 後から実行される関数に関しては、最初から function で定義できます。

はぴeみる電のページでは jQuery が定義されているので、本体ページの参照は parent を使用してそちらを使用しています。IFRAME 内にも jQuery はあるので、IFRAME 内はそれを使用しています。

関連する記事

電力自由化 : 関西向け東電プレミアムプラン シュミレーション


東電プレミアムプランは、沢山の電力を使う家庭で安くなるようにもともと設定されています。他のプランはよく解らないので  電力比較サイトエネチェンジ を利用するといいと思います。また、東電プレミアムプランの基本料金設定はなかなかわかり難いので、こちらの記事を参照するといいと思います

まさかの「最安プラン」?! (東京電力「プレミアムプラン」)


▼ ブックマークレット用技術関連記事
IFRAME 内に外部の javascript を読み込んで画面を作成する / document.write での構築




posted by lightbox at 2016-03-13 22:33 | WEBサービス | このブログの読者になる | 更新情報をチェックする

電力自由化 : 関西向け東電プレミアムプラン シュミレーション

ウチの電気使用量を初期値表示しています。おそらくこの値が正しければ、年間 33,158 円の節約になるはずです。また、この値の裏づけとして実際の今の東電管轄でのシュミレーションを行った方の記事がありますので、そちらを参照すると基本料金の考え方も良く理解できる上に、この値の信頼性も後押しされていると思います。

また、計算の元となった値は 電力比較サイトエネチェンジ 内の プレミアムプラン(1年契約)の詳細 より使用しています


最初の400kWhまで 固定料金 円
400kWhを超える分 1kWh 
 1  
 2  
 3  
 4  
 5  
 6  
 7  
 8  
 9  
10  
11  
12  
年間電気料金  - 
 =  - 基本料金 x 12ヶ月
▼ 基本料金別年間節約額
1)  2kW(30A相当) 777.6円
2)  4kW(60A相当) 1555.2円
3)  6kW(9kVA相当) 2332.8円  
4)  8kW(12kVA相当) 3110.4円

でまあ、時間があればブックマークレットで はぴeみる電 [関西電力] の値から直接計算させてやろうかなと思うのであります。

関連する記事

IFRAME 内に外部の javascript を読み込んで画面を作成する / document.write での構築

というわけで、『関西向け東電プレミアムプラン シュミレーション』ブックマークレットを作成しました


 

posted by lightbox at 2016-03-13 09:35 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2016年03月09日


IFRAME 内に外部の javascript を読み込んで画面を作成する / document.write での構築

結果的には、JSONP のもっと規模の大きいもので、外部定義で WEBページを全て作ってしまう方法です。

以下の IFRAME 内のページはこのようなコードで実装されています
<input type="button" value="IFRAME 内へのアクセス" onclick='document.getElementById("cross_domain_frame").contentWindow.document.body.style.backgroundColor = "#c0c0c0"'>

<iframe
	src="about:blank"
	id="cross_domain_frame"
	style="width:600px;height:900px"
></iframe>
<script type="text/javascript">
str="<"+"script charset=\"utf-8\" src=\"http://toolbox.winofsql.jp/js/string_html.js\"></"+"script> ";
document.getElementById("cross_domain_frame").contentWindow.document.write(str);
document.getElementById("cross_domain_frame").contentWindow.document.close();
</script>
しかも、about:blank に書き込むので元々同一ドメインという事になるので、DOM で IFRAME 内へアクセスする事ができます(当然中から本体へのアクセスもできます)。また、http://toolbox.winofsql.jp/js/string_html.js の中身は全て文字列の書き込みになっていて、普通に作った HTML+CSS+JavaScript のページのコードをこちらのツールで文字列に変換しています。

※ contentWindow.document は contentDocument に書き換える事ができます
document.write で書き込んだ画面内には、さらに外部ライブラリとして jQuery や jQuery プラグインや SyntaxHighlighter が使用されていますが、正しく動作しています

本当のつかいどころ

この方法でブックマークレットから任意のページに画面を埋め込んで、そこから本体のページをコントロールするプラグインを作成できます。本体側は簡単な設定でそれを拒否する事もできますが、プラグインするのは個人なので、特定のサービス以外でそのような実装はあまり見た事がまだありません。

自分は以前、『手書きブログ』というサービスで、当時パレットが自由に設定できなかった部分をこの手法でブックマークレット経由でプラグインを作成して配布していた事がありましたが、本体の HTML 構成が変更されない限り、普通に機能を追加できます。

▼ 使用例
というわけで、『関西向け東電プレミアムプラン シュミレーション』ブックマークレットを作成しました



posted by lightbox at 2016-03-09 21:20 | JavaScript DOM | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり