WoT CWE管理シート自動化の旅々 4.『出力無き結果のコード』
これの続き
いつもの
これは…自動化のお話です。とあるセルの関数様がエラーを吐きました。関数がエラーを出したのは、重い処理だからでした。それは多すぎる関数のせいだったのです。
どうでもいいですが、なぜエラーは「吐く」と言うのでしょうねぇ…?嗚咽のように予期せず突然吐き出してしまうからなのでしょうか?知りませんけど。
2人はひそかに自動化を進め、やがて関数は減りました。そう、いわゆる努力の結晶です。
やりたいこと
基本的には前回の記事の続きです。前回の記事ではマッチング情報の取得までは終わらせてあるのでその続き、クランidから敵クラン名を検索するところをやります。
前回スクレイピングした内容にはクランのidはあるけども肝心のクラン名が書いてありません。これじゃ対戦相手わからん。ということで、クランidからクラン名を検索するコードを書いておきましょう。
clanidからクラン名を検索する手順
とりあえずコードを先に貼っておきましょう。基本的には前回のコードに連続して動作するコードとなります。前回のコードの続きに書いてください。
function Scraping3() { //WOT APIを使用※敵クラン名検索 var id = "スプレッドシートのid"; var spreadSheet = SpreadsheetApp.openById(id); var sheetName = "スクレイピング4(戦)"; var cell = spreadSheet.getSheetByName(sheetName).getRange("F2:F100").getValues(); var result = cell.filter(function(value){return (value[0].length > 0)});//空白要素の配列を削除 var Arr = Array.prototype.concat.apply([],result);//2次元配列を1次元配列にする var count = Arr.length; //配列変数Arrの配列数を調べる //URL、データ取得のループ処理※130行目まで var ary = []; for ( var i = 0; i <= count-1; i++) { var URL = 'https://api.worldoftanks.asia/wot/clans/info/?application_id=#APPLICATIONID&clan_id='+Arr[i];//Grobal Map for world of Tanks プロヴィンスのクラン情報 var response = UrlFetchApp.fetch(URL);//スクレイピング var response2 = response.toString(); var mat = response2.match(/"tag":"(.+?)"/g); ary.push(mat); } //logファイルにログを書き出す var id = "スプレッドシートのid"; var spreadSheet = SpreadsheetApp.openById(id); var sheetName2 = "スクレイピング4(戦)"; var count2 = ary.length; //配列変数aryの配列数を調べる Logger.log(mat);//デバック用 spreadSheet.getSheetByName(sheetName2).getRange("G2:G100").clearContent();//セル内のコンテンツ削除※値や数式 for (var k = 0; k < count2; k++) { spreadSheet.getSheetByName(sheetName2).getRange(k + 2, 7).setValue(ary[k]); //配列変数aryのi+1番目に格納されている値をセルAk+1に入力 } Memo(); }
いらない処理や定義があるのはご愛嬌ということで……
もちろんのことスプレッドシートのidは使用しているシートのidを、#MYAPPLICATIONIDにはWargamingAPIのapplication_idを入れてください。
出力するシートは前回、マッチング情報を出力したシートと同じシートです。さすればマッチングした敵クラン名が出力されていることでしょう。
今回は短いですが、この辺で。基本的には1つの記事には1つのコードを載せるという形を取ろうと思います(初っ端破っているけど)。
最後に
こうしてすべて彼の計画通りに進んだ自動化のお話は幕を閉じました。出力無き結果のコードとなった処理自身の手によって。
※まだ続きます