Advertisement
Awn_pastebin

mainProcCode.gs

Mar 11th, 2015
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function mainProc() {
  2.   /***************************************************************************
  3.   主処理
  4.   ****************************************************************************/
  5.   /*
  6.   関数の概要
  7.   :keyを元にスレを取得
  8.   :コテハンを抽出し
  9.   :表示領域に描画する
  10.   */
  11.  
  12.   /*
  13.   処理実行の契機
  14.   :初期処理or主処理or主処理レスキュー処理に自動でスケジュールされ実行
  15.   */
  16.  
  17.  /*******************************************************
  18.  
  19.   プロパティを呼び出す
  20.  
  21.   ********************************************************/
  22.   //文字列
  23.   var cr_bbsName       = PropertiesService.getScriptProperties().getProperty('sp_bbsName');
  24.   var cr_ymd           = PropertiesService.getScriptProperties().getProperty('sp_ymd');
  25.  
  26.   //数値
  27.   var cr_eachSize      = PropertiesService.getScriptProperties().getProperty('sp_eachSize') - 0;
  28.   var cr_bgnPoint      = PropertiesService.getScriptProperties().getProperty('sp_bgnPoint') - 0;
  29.   var cr_endPoint      = PropertiesService.getScriptProperties().getProperty('sp_endPoint') - 0;
  30.   var cr_datListLength = PropertiesService.getScriptProperties().getProperty('sp_datListLength') - 0;
  31.  
  32.  
  33.   /*******************************************************
  34.  
  35.   cr_bgnPointの更新
  36.   cr_endPointの更新
  37.  
  38.   ********************************************************/  
  39.   //更新
  40.   cr_bgnPoint = cr_endPoint + 1;
  41.   cr_endPoint = cr_endPoint + cr_eachSize;
  42.  
  43.   //cr_datListLengthを超えていないか確認
  44.   if( cr_bgnPoint >= cr_datListLength ){ cr_bgnPoint = cr_datListLength };
  45.   if( cr_endPoint >= cr_datListLength ){ cr_endPoint = cr_datListLength };
  46.  
  47.   //プロパティの更新  
  48.   PropertiesService.getScriptProperties().setProperty('sp_bgnPoint',cr_bgnPoint);
  49.   PropertiesService.getScriptProperties().setProperty('sp_endPoint',cr_endPoint);
  50.  
  51.   //トリガーレコーダーに記録
  52.   var thisPROCNAME = "mainProc";
  53.   var thisSTAT = "STARTED";
  54.   triggerRecorder(thisPROCNAME,thisSTAT);  
  55.  
  56.   /*******************************************************
  57.  
  58.   一時領域からキーを取得する
  59.  
  60.   ********************************************************/  
  61.   //キー格納用の配列
  62.   var cr_keyArray = [];
  63.  
  64.   var ss_key = PropertiesService.getScriptProperties().getProperty('sp_ss_key');
  65.   var ss = SpreadsheetApp.openById(ss_key);
  66.   var sheet = ss.setActiveSheet(ss.getSheetByName("key"));
  67.  
  68.   cr_keyArray = sheet.getRange(cr_bgnPoint,1,cr_endPoint - cr_bgnPoint + 1,1).getValues();
  69.   for(var i = 0;i < cr_keyArray.length; i++){
  70.     cr_keyArray[i] = cr_keyArray[i][0];
  71.   }
  72.  
  73.  
  74.   /*******************************************************
  75.  
  76.   該当スレッドに存在するコテハンを抽出する
  77.  
  78.   ********************************************************/  
  79.  
  80.   var cr_koteArray = [];//コテハンを格納する配列
  81.   var cr_key= "";//生成したURL
  82.   var cr_res = [];//コテハンを格納する一時的な配列
  83.  
  84.   for(var j = 0; j < cr_keyArray.length; j++){
  85.     //datで取得
  86.     cr_key = "http://open2ch.net/" + cr_bbsName + "/dat/" + cr_keyArray[j] + ".dat";
  87.     cr_res = koteFromDat(cr_key);//戻り値は2次元配列
  88.    
  89.     if( cr_res.length != 0){
  90.       cr_koteArray = cr_koteArray.concat( cr_res );      
  91.     }
  92.   }
  93.  
  94.  
  95.   /*******************************************************
  96.  
  97.   表示領域に書き込む
  98.  
  99.   ********************************************************/  
  100.  
  101.   var sheet = ss.setActiveSheet(ss.getSheetByName("res"));
  102.   var lastcol = 0;//列
  103.   var lastrow = 0;//行
  104.  
  105.   //初回起動か否かで処理の振り分け
  106.   if( cr_bgnPoint == 1 ){
  107.     //★初回起動である時
  108.     //最終書きこみ列の取得
  109.     lastcol = sheet.getLastColumn();
  110.    
  111.     //書き込み対象の列をプロパティへ格納
  112.     PropertiesService.getScriptProperties().setProperty('sp_lastcol',lastcol);
  113.    
  114.     //ヘッダー作成
  115.     sheet.getRange(1, lastcol+1).setValue(cr_ymd);
  116.    
  117.     //列の幅を設定
  118.     sheet.setColumnWidth(lastcol+1, 300);
  119.    
  120.   }else{
  121.     //★初回起動でない時
  122.     //最終書き込み列をプロパティから呼び出し
  123.     lastcol = PropertiesService.getScriptProperties().getProperty('sp_lastcol') - 0;
  124.    
  125.     //最終書き込み行をプロパティから呼び出し
  126.     lastrow = PropertiesService.getScriptProperties().getProperty('sp_lastrow') - 0;
  127.   }
  128.  
  129.  
  130.   //コテハンを表示領域に書き込む
  131.   if(cr_koteArray.length != 0 ){
  132.     sheet.getRange(lastrow + 2,lastcol + 1,cr_koteArray.length,1).setValues(cr_koteArray);
  133.   }
  134.  
  135.  
  136.   /*******************************************************
  137.  
  138.   プロパティを更新する
  139.  
  140.   ********************************************************/
  141.   //最終書き込み行の更新
  142.   lastrow = lastrow + cr_koteArray.length;
  143.  
  144.   //プロパティの更新  
  145.   PropertiesService.getScriptProperties().setProperty('sp_bgnPoint',cr_bgnPoint);
  146.   PropertiesService.getScriptProperties().setProperty('sp_endPoint',cr_endPoint);
  147.   PropertiesService.getScriptProperties().setProperty('sp_lastrow',lastrow);
  148.  
  149.  
  150.  
  151.   /*******************************************************
  152.  
  153.   終了判定
  154.  
  155.   ********************************************************/
  156.  
  157.   if( cr_endPoint == cr_datListLength){
  158.     Logger.log("終了処理へ");
  159.    
  160.     //終了処理を実行するトリガーをセットする
  161.     ScriptApp.newTrigger("termProc")
  162.     .timeBased()
  163.     .after(1 * 60 * 1000)// 1分後に実行
  164.     .create();
  165.    
  166.     //トリガーレコーダーに記録
  167.     var thisSTAT = "ENDED";
  168.     triggerRecorder(thisPROCNAME,thisSTAT);  
  169.  
  170.    
  171.   }else{
  172.     Logger.log("主処理継続");
  173.    
  174.     //トリガーの削除
  175.     deleteAllTriggers();
  176.    
  177.     //主処理を実行するトリガーをセットする
  178.     ScriptApp.newTrigger("mainProc")
  179.     .timeBased()
  180.     .after(1 * 60 * 1000)// 1分後に実行
  181.     .create();
  182.    
  183.     //主処理レスキュー処理を実行するトリガーをセットする
  184.     ScriptApp.newTrigger("rescueProc")
  185.     .timeBased()
  186.     .after(22 * 60 * 1000)//22分後に実行
  187.     .create();
  188.    
  189.     //トリガーレコーダーに記録
  190.     var thisSTAT = "ENDED";
  191.     triggerRecorder(thisPROCNAME,thisSTAT);  
  192.    
  193.   }  
  194. }//END_OF_mainProc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement