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; }
コメント