KintoneのAPI(Js版)
KintoneのAPI調査でまだ躓いていますが、少しだけ進展
整形したフォーマットを保存できるようになりました。
一歩前進!!
クエリーがうまく動かないのでそのままデータを引いてきている様です。
今後はクエリーと悪戦苦闘の見込み。
先人が色々と助けてくれたので感謝です。
以下ソース
整形したフォーマットを保存できるようになりました。
一歩前進!!
クエリーがうまく動かないのでそのままデータを引いてきている様です。
今後はクエリーと悪戦苦闘の見込み。
先人が色々と助けてくれたので感謝です。
以下ソース
//******************************************
//*
//* Kintone REST API利用サンプルスクリプト
//* Created By 2014/5/1
//*
//******************************************
//
// JSONの文字列を整える
// 文字列を引用符で囲う
// URL:http://dara-j.asablo.jp/blog/2007/05/15/1509590
//
String.prototype.quote = function() {
var s = this;
var a = [
{ match : /\\/g, replace : "\\\\" },
{ match : /\f/g, replace : "\\f" },
{ match : /\n/g, replace : "\\n" },
{ match : /\r/g, replace : "\\r" },
{ match : /\t/g, replace : "\\t" },
{ match : /\v/g, replace : "\\v" },
{ match : /"/g, replace : "\\\"" }
];
for(var i = 0; i < a.length; i++) {
var value = a[i];
s = s.replace( value.match, value.replace );
};
return [ "\"", s, "\"" ].join("");
}
if( typeof( Json ) == "undefined" ) {
var Json = {
}
}
Json.Formatter = function() {
this.initialize.apply( this, arguments );
}
Json.Formatter.prototype = {
value : false,
// 初期化処理
initialize : function(obj) {
var indent_char = Json.Formatter.indentString || "\t";
var name = arguments[1] ? arguments[1].toString().quote() : null;
var indent = isNaN( arguments[2] ) ? 0 : Number( arguments[2] );
var current_indent = Json.Formatter.createString( indent_char, indent );
var buffer = [ current_indent ];
if( name ) {
buffer.push( name );
buffer.push( " : " );
}
var type = typeof( obj );
if( type == "undefined" ) {
// undefined
// なにもしない
} else if( obj == null ) {
// null
// プロパティの値の場合のみ'null'を追加
if( name ) buffer.push( "null" );
} else if( type == "string" ) {
// string
buffer.push( obj.quote() );
} else if( type == "number" ) {
// number
buffer.push( obj.toString() );
} else if( type == "boolean" ) {
// boolean
buffer.push( ( !! obj ).toString() );
} else if( obj instanceof Array ) {
// array
var hasProp = obj.length > 0;
var lastIndex = obj.length - 1;
buffer.push( "[" );
buffer.push( hasProp ? "\r\n" : "" );
// 要素を再帰処理
for(var index = 0; index < obj.length; index++) {
var v = obj[ index ];
if( v != null ) {
buffer.push( new Json.Formatter( v, null, indent + 1 ).value );
buffer.push( index < lastIndex ? "," : "" );
buffer.push( "\r\n" );
}
}
if( buffer.length > 2 && buffer[ buffer.length - 2 ] == "," ) buffer[ buffer.length - 2 ] = "";
buffer.push( hasProp ? current_indent : "" );
buffer.push( "]" );
} else {
// object
var hasProp = false;
for(var key in obj) {
if( typeof(obj) != "function" ) {
hasProp = true;
break;
}
}
buffer.push( "{" );
buffer.push( hasProp ? "\r\n" : "" );
// プロパティを再帰処理
for(key in obj) {
if( typeof(obj[key]) == "function" ) continue;
buffer.push( new Json.Formatter( obj[key], key, indent + 1 ).value );
buffer.push( ",\r\n" );
}
if( hasProp ) buffer.length--;
buffer.push( hasProp ? "\r\n" : "" );
buffer.push( hasProp ? current_indent : "" );
buffer.push( "}" );
}
// valueプロパティ確定
this.value = buffer.join("");
var self = this;
this.toString = function() {
return self.value;
}
}
}
Json.Formatter.createString = function(c, l) {
var result = new Array( l );
for(var i = 0; i < l; i++) result[ i ] = c;
return result.join("");
}
Json.Formatter.indentString = "\t";
//
// 本処理部分
//
//パラメータ指定
var appNo = "XX";
var kintoneURL = "https://XXX.cybozu.com/k/v1/records.json" //KintoneAPI用URL
var cAuthorization = "省略" //追加ヘッダー
var data ='?app=' + appNo + '&query=';
var startTime = "2014-04-01T09:00:00+0900"; //開始時刻指定
var endTime = "2014-05-01T14:00:00+0900"; //終了時刻指定
var operater = "XXXX" //登録ユーザ
//クエリー指定
var query ='作成日時 > "' + startTime + '" and 作成日時 < "' + endTime +'" and 対応担当者 in("' + operater +'") order by レコード番号 desc limit 3 ';
query = encodeURIComponent(query);
kintoneURL = kintoneURL + data + query;
//ActiveXを定義
var xmlhttp = XMLHttpRequestCreate();
//Kintone/RESTAPI呼出
xmlhttp.open( "GET", kintoneURL ,false );
//ヘッダーに追加
xmlhttp.setRequestHeader( "X-Cybozu-Authorization", cAuthorization );
xmlhttp.send();
//結果を表示
if (xmlhttp.readyState == 4) { // DONE
if (xmlhttp.status == 200) { // OK
var oText = JSON2CSV(xmlhttp.responseText);
dataDownload(oText);
// dataDownload(xmlhttp.responseText);
} else {
WScript.Echo("status = " + xmlhttp.status);
WScript.Echo(xmlhttp.getAllResponseHeaders);
WScript.Echo(xmlhttp.responseText);
}
}
// HTMLフォームの形式にデータを変換する
function EncodeHTMLForm( data )
{
var params = [];
for( var name in data )
{
var value = data[ name ];
var param = encodeURIComponent( name ).replace( /%20/g, '+' )
+ '=' + encodeURIComponent( value ).replace( /%20/g, '+' );
params.push( param );
}
return params.join( '&' );
}
// ------------------------------------------------------------
// XMLHttpRequest オブジェクトを作成する関数
// ------------------------------------------------------------
function XMLHttpRequestCreate(){
try{
return new XMLHttpRequest();
}catch(e){}
try{
return new ActiveXObject('MSXML2.XMLHTTP.6.0');
}catch(e){}
try{
return new ActiveXObject('MSXML2.XMLHTTP.3.0');
}catch(e){}
try{
return new ActiveXObject('MSXML2.XMLHTTP');
}catch(e){}
return null;
}
// ------------------------------------------------------------
// ファイルを保存する関数
// ------------------------------------------------------------
function dataDownload(detail) {
try {
var fs = new ActiveXObject("Scripting.FileSystemObject");
var outf = fs.CreateTextFile("kintoneRecords.txt", true);
var outputFile = detail;
//受取ったデータを保存
outf.Write(outputFile);
} catch (error) {
WScript.Echo(error.number + "\n" + error.description);
} finally {
WScript.Echo("ファイルを保存しました。");
outf.Close();
}
}
// ------------------------------------------------------------
// JSONを整形して保存
//参照:http://support.ooyala.jp/developers/documentation/tasks/api_analytics_convert_to_csv.html
// ------------------------------------------------------------
function JSON2CSV(objArray) {
//JSON.parseが使えないので
var array = typeof objArray != 'object' ? JsonParse(objArray) : objArray;
var formatter = new Json.Formatter( array );
return formatter;
}
// ------------------------------------------------------------
// 「JSON 文字列」から「JavaScript のオブジェクト」に変換する関数
// 参照URL:http://hakuhin.jp/js/json.html#JSON_EVAL
// ------------------------------------------------------------
function JsonParse(text){
var pre_w = new Object();
var pre_u = new Object();
var pre_b = new Object();
var pre_n = new Object();
var pre_s = new Object();
var pre_a = new Object();
var pre_o = new Object();
var dic_d = new Object();
var dic_e = new Object();
pre_u['n'] = pre_b['t'] = pre_b['f'] = pre_s['"'] = pre_a['['] = pre_o['{'] = pre_w[' '] = pre_w['\t'] = pre_w['\r'] = pre_w['\n'] = true;
pre_n['0'] = pre_n['1'] = pre_n['2'] = pre_n['3'] = pre_n['4'] = pre_n['5'] = pre_n['6'] = pre_n['7'] = pre_n['8'] = pre_n['9'] = pre_n['-'] = true;
dic_d['0'] = dic_d['1'] = dic_d['2'] = dic_d['3'] = dic_d['4'] = dic_d['5'] = dic_d['6'] = dic_d['7'] = dic_d['8'] = dic_d['9'] = true;
dic_e['/'] = '/'; dic_e['b'] = '\b'; dic_e['f'] = '\f'; dic_e['n'] = '\n'; dic_e['r'] = '\r'; dic_e['t'] = '\t'; dic_e['\"'] = '\"'; dic_e['\\'] = '\\';
var p = 0;
var num = text.length;
function skip(){
while(pre_w[text.charAt(p)]){
p++;
if(p >= num){
return;
}
}
}
function parse(){
var r;
var c;
var w;
var s;
var e;
skip();
c = text.charAt(p);
// オブジェクト
if(pre_o[c]){
var obj = new Object();
p++;
skip();
r = true;
while(true){
c = text.charAt(p);
if(c == '}'){
if(!r) throw("JsonParse: Missing comma(,) position:" + p);
p++;
break;
}
if(c != '"') throw("JsonParse: Missing double quote(\") position:" + p);
w = parse();
skip();
if(text.charAt(p) != ':') throw("JsonParse: Missing semicolon(:) position:" + p);
p++;
skip();
obj[w] = parse();
skip();
if(p >= num){ throw("JsonParse: Missing curly bracket(}) position:" + p); }
r = (text.charAt(p) != ',');
if(!r){
p++;
skip();
}
}
return obj;
// 配列
}else if(pre_a[c]){
var ary = new Array();
p++;
skip();
r = true;
while(true){
if(text.charAt(p) == ']'){
if(!r) throw("JsonParse: Missing comma(,) position:" + p);
p++;
break;
}
ary.push(parse());
skip();
if(p >= num){ throw("JsonParse: Missing square bracket(]) position:" + p); }
r = (text.charAt(p) != ',');
if(!r){
p++;
skip();
}
}
return ary;
// 文字列
}else if(pre_s[c]){
p++;
var str = "";
while(true){
if(p >= num) throw("JsonParse: Missing double quote(\") position:" + p);
c = text.charAt(p);
p++;
if(c == '"'){
break;
}else if(c == "\\"){
c = text.charAt(p);
p++;
if(c == 'u'){
e = 0;
r = ((num - p) > 4);
if(r){
s = text.charCodeAt(p);
if(!s) s = 0;
if(s >= 97) s -= 87;
else if(s >= 65) s -= 55;
else s -= 48;
if(0 <= s && s < 16){
e += s * 0x1000;
p++;
}else{
r = false;
}
}
if(r){
s = text.charCodeAt(p);
if(!s) s = 0;
if(s >= 97) s -= 87;
else if(s >= 65) s -= 55;
else s -= 48;
if(0 <= s && s < 16){
e += s * 0x0100;
p++;
}else{
r = false;
}
}
if(r){
s = text.charCodeAt(p);
if(!s) s = 0;
if(s >= 97) s -= 87;
else if(s >= 65) s -= 55;
else s -= 48;
if(0 <= s && s < 16){
e += s * 0x0010;
p++;
}else{
r = false;
}
}
if(r){
s = text.charCodeAt(p);
if(!s) s = 0;
if(s >= 97) s -= 87;
else if(s >= 65) s -= 55;
else s -= 48;
if(0 <= s && s < 16){
e += s * 0x0001;
p++;
}else{
r = false;
}
}
if(r){
str += String.fromCharCode(e);
}else{
throw("JsonParse: Invalid codepoint. position:" + p);
}
}else if(dic_e[c] != undefined){
str += dic_e[c];
}else{
throw("JsonParse: Invalid escape. position:" + (p-1));
}
}else{
str += c;
}
}
return str;
// 数値
}else if(pre_n[c]){
s = p;
p ++;
while(dic_d[text.charAt(p)]){
p++;
}
r = false;
if(text.charAt(p) == '.'){
p++;
r = true;
if(!dic_d[text.charAt(p)]){
throw("JsonParse: Missing digits after decimal. position:" + p);
}
p++;
while(dic_d[text.charAt(p)]){
p++;
}
}
if(text.charAt(p) == 'e'){
p++;
r = true;
c = text.charAt(p);
if(c == '+' || c == '-'){
p++;
}
if(!dic_d[text.charAt(p)]){
throw("JsonParse: Missing digits after exponent. position:" + p);
}
p++;
while(dic_d[text.charAt(p)]){
p++;
}
}
if(r) return parseFloat(text.substring(s,p));
else return parseInt(text.substring(s,p));
// 真偽値
}else if(pre_b[c]){
w = text.substr(p, 5);
if(w == "false"){
p += 5;
return false;
}
if(w.indexOf("true") == 0){
p += 4;
return true;
}
// null 値
}else if(pre_u[c]){
if(text.substr(p, 4) == "null"){
p += 4;
return null;
}
}
throw("JsonParse: Unable to parse value. position:" + p);
}
var data = parse();
skip();
if(p < num) throw("JsonParse: Unexpected character after JSON. position:" + p);
return data;
}
コメント