Advertisement
Awn_pastebin

commonProcCode.gs

Mar 11th, 2015
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /***************************************************************************
  2. 共通関数
  3. ****************************************************************************/
  4.  
  5.  
  6. /*****************************************************************************************************************************************/
  7. function setInitProp() {
  8.   /*
  9.   関数の概要
  10.   :プロパティの
  11.   :デフォルト値を
  12.   :セットする
  13.   */
  14.   var scriptProperties = PropertiesService.getScriptProperties();
  15.  
  16.   /* プロジェクトのデフォルトのプロパティ構築 */
  17.   scriptProperties.setProperty('sp_bgnPoint',0);         //一時領域のkeyを取得する開始点。システム自動設定。
  18.   scriptProperties.setProperty('sp_endPoint',0);         //一時領域のkeyを取得する終了点。システム自動設定。
  19.   scriptProperties.setProperty('sp_eachSize',200);       //1回のトリガーでフェッチする回数。バッチの良し悪しにより手動で調整するとか。
  20.   scriptProperties.setProperty('sp_datListLength',0);    //keyの総数。システム自動設定。
  21.   scriptProperties.setProperty('sp_bbsName','news4vip'); //掲示板名。ニュー速VIP以外に設定したい方はご自由に。
  22.   scriptProperties.setProperty('sp_ymd',"");             //バッチが取得する日付(バッチ起動日の前日)。システム自動設定。
  23.   scriptProperties.setProperty('sp_lastcol',0);          //表示領域の列番号。システム自動設定。
  24.   scriptProperties.setProperty('sp_lastrow',0);          //表示領域の行番号。システム自動設定。
  25.   scriptProperties.setProperty('sp_ss_key','1Yynlwa-JmTU9Pz0RHduFlLnueb3KKjwAs0JYOau2mao'); //スプレッドシートのユニークキー
  26. }
  27. /*****************************************************************************************************************************************/
  28.  
  29.  
  30. /*****************************************************************************************************************************************/
  31. function deleteAllTriggers(){
  32.   /*
  33.   関数の概要
  34.   :全ての
  35.   :トリガーを
  36.   :削除する
  37.   */
  38.   var triggers = ScriptApp.getProjectTriggers();
  39.   for (var i_deleteAllTriggers = 0; i_deleteAllTriggers < triggers.length; i_deleteAllTriggers++) {
  40.     ScriptApp.deleteTrigger(triggers[i_deleteAllTriggers]);
  41.   }
  42. }
  43. /*****************************************************************************************************************************************/
  44.  
  45.  
  46. /*****************************************************************************************************************************************/
  47. function getToukei(ymd,bbsName){
  48.   /*
  49.   関数の概要
  50.   :統計くんから
  51.   :スレのURLを生成するのに必要なkeyを抽出して
  52.   :2次元配列として返す
  53.   */
  54.  
  55.   //URL
  56.   var myURL = "http://open2ch.net/dev/toukei.cgi?m=thread&d=" + ymd + "&bbs=" + bbsName + "&sort=time";
  57.  
  58.   //オプション
  59.   var opt = {"contentType":"text/html","method":"get","muteHttpExceptions": true};
  60.  
  61.   //統計くんのhtmlソースを取得する  
  62.   var d = UrlFetchApp.fetch(myURL,opt).getContentText();
  63.  
  64.   //keyを正規表現で取得する
  65.   var regexp_txt1 = bbsName + "/\\d{10}";
  66.   var regexp_1 = new RegExp(regexp_txt1,"g");
  67.   var regexp_txt2 = bbsName + "/";
  68.   var regexp_2 = new RegExp(regexp_txt2,"g");
  69.   var dammy_ = d.match(regexp_1);
  70.   var dammy = dammy_.map(function(elm){return elm.replace(regexp_2,"")});
  71.  
  72.   //1次元配列を2次元配列に変換する
  73.   var output = dammy.map(
  74.     function (elm){
  75.       return [elm];
  76.     }
  77.   );
  78.  
  79.   //結果を返す
  80.   return output;
  81. }
  82. /*****************************************************************************************************************************************/
  83.  
  84.  
  85. /*****************************************************************************************************************************************/
  86. function koteFromDat(url){
  87.   /*
  88.   関数の概要
  89.   :dat形式のスレURLから
  90.   :コテハンを抽出し
  91.   :2次元配列で返す
  92.   */
  93.  
  94.   //URL
  95.   var myurl = url;
  96.  
  97.   //オプション
  98.   var opt = {"method":"get","muteHttpExceptions": true};
  99.  
  100.   //フェッチする
  101.   var d = UrlFetchApp.fetch(myurl,opt);
  102.  
  103.   //BLOB(Binary Large OBject)で取得する
  104.   var dblob = d.getBlob();
  105.  
  106.   //文字コードをShift_JISにして文字列型に変換
  107.   var content = dblob.getDataAsString("Shift_JIS");
  108.  
  109.   var arr = content.split("\n");//改行コードで区切る
  110.  
  111.   var output = arr
  112.   .map(function(elm){ return elm.split("<>")[0]} )//"<>"で区切って先頭0番目のみ抽出
  113.   .filter(function(elm){ return (/.+◆/).test(elm)} )//正規表現を満たす要素のみ抽出
  114.   .map(function(elm){ return elm.replace(/<.?b>/g,"").replace("&gt;",">","g").replace(/忍法帖【.*】/g,"")} )//不要なタグを削除
  115.   .filter(function (x, ix, self) { return self.indexOf(x) === ix;})//重複する要素を除外(※最終的に重複要素は削除するが、予め減らしておく)
  116.   .map(function(elm){ return [elm] });//1次元配列を2次元配列に変換
  117.  
  118.   //結果を返す
  119.   return output;  
  120. }
  121. /*****************************************************************************************************************************************/
  122.  
  123.  
  124.  
  125. /*****************************************************************************************************************************************/
  126. function dataSummarize1() {
  127.   /*
  128.   関数の概要
  129.   :スプレッドシートのresタブにある最右列のデータを取得し、
  130.   :重複削除処理を行った後
  131.   :スプレッドシートのsummaryタブの最右列のデータより一列右に書き込む
  132.   */
  133.   //スプレッドシートを開く
  134.   var ss_key = PropertiesService.getScriptProperties().getProperty('sp_ss_key');
  135.   var ss = SpreadsheetApp.openById(ss_key);
  136.  
  137.   //resシートのデータを取得する
  138.   var sheet = ss.setActiveSheet( ss.getSheetByName("res") );
  139.   var lastrow = sheet.getLastRow();//lastrow >= 1は保証されている
  140.   var lastcolumn = sheet.getLastColumn();//lastcolumn >= 1は保証されている
  141.  
  142.   //最右列のデータを取得する  
  143.   var row = 1;
  144.   var column = lastcolumn;
  145.   var numRows = lastrow;
  146.   var numColumns = 1;
  147.  
  148.   var data = sheet.getRange(row, column, numRows, numColumns).getValues();
  149.  
  150.  
  151.   //一行目の日付データを取得しておく
  152.   var temp_hdk = data[0][0];
  153.  
  154.  
  155.   /*
  156.   *重複削除処理
  157.   */
  158.   var temp_output = [];
  159.   var temp_kote = "";
  160.   var uniq_data = [];
  161.  
  162.   for( var k = 1; k < numRows;k++ ){
  163.     if( data[k][0] != "" ){
  164.       temp_output.push( data[k][0] );
  165.     }
  166.   }
  167.  
  168.   uniq_data = temp_output.filter(function (x, ii, self) {
  169.     return self.indexOf(x) === ii;
  170.   });
  171.  
  172.   //outputにデータを格納する
  173.   var output = [];
  174.   output.push( [ temp_hdk ] );
  175.  
  176.   for( var j = 0; j < uniq_data.length; j++ ){
  177.     output[j + 1] = [ uniq_data[j] ];
  178.   }
  179.  
  180.  
  181.   //summary1シートに書き込み  
  182.   var sheet = ss.setActiveSheet( ss.getSheetByName("summary1") );
  183.   var lastrow = sheet.getLastRow();
  184.   var lastcolumn = sheet.getLastColumn();
  185.  
  186.   var row = 1;
  187.   var column = lastcolumn + 1;
  188.   var numRows = output.length;
  189.   var numColumns = 1;
  190.  
  191.   sheet.getRange(row, column, numRows,numColumns).setValues(output);
  192.  
  193. }
  194. /*****************************************************************************************************************************************/
  195.  
  196.  
  197.  
  198. /*****************************************************************************************************************************************/
  199. function dataSummarize2() {
  200. /*
  201. 関数の概要:
  202. :summary1の最右端の列のコテハンの数を
  203. :summary2のlastrowの次の行に
  204. :書き込む
  205. */
  206.   /******************
  207.   シート操作(summary1)
  208.   *******************/
  209.   //シートを確定する
  210.   var ss_key = PropertiesService.getScriptProperties().getProperty('sp_ss_key');
  211.   var ss = SpreadsheetApp.openById(ss_key);
  212.   var sheet = ss.setActiveSheet(ss.getSheetByName("summary1"));
  213.  
  214.   //シートのデータを読み込む
  215.   var lastrow = sheet.getLastRow();
  216.   var lastcolumn = sheet.getLastColumn();
  217.   var data = sheet.getDataRange().getValues();
  218.  
  219.  
  220.   /******************
  221.   コテハンの数を数える
  222.   *******************/
  223.   var counters = -1;//コテハンカウント用の変数
  224.   var output = [];//出力用の変数
  225.  
  226.   for(var i = 0; i < lastrow; i++){
  227.     (data[i][lastcolumn-1] == "" ) || ( counters++ );
  228.   }
  229.  
  230.   output = [ [ data[0][lastcolumn-1], counters  ] ];
  231.  
  232.  
  233.   /******************
  234.   シート操作(summary2)
  235.   *******************/
  236.   //シートを確定する
  237.   var sheet = ss.setActiveSheet(ss.getSheetByName("summary2"));
  238.   var lastrow = sheet.getLastRow();
  239.   var lastcolumn = sheet.getLastColumn();
  240.  
  241.   //シートに書き込む
  242.   var row = lastrow+1;
  243.   var column = 1;
  244.   var numRows = 1;
  245.   var numColumns = 2;
  246.   sheet.getRange(row, column, numRows, numColumns).setValues(output);
  247.  
  248. }
  249. /*****************************************************************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement