GoogleSpreadSheetにCSVファイルを読み込むスクリプト
に続いて、今日はネット上に公開されているJSONファイルをGoogleSpreadSheetに取り込んでみます。
例として適切かわかりませんが、CounterpartyのPoB(Proof of Burn)アドレスを持ってきました
curl https://blockstream.info/api/address/1CounterpartyXXXXXXXXXXXXXXXUWLpVr |jq .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| {
"address": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr",
"chain_stats": {
"funded_txo_count": 2810,
"funded_txo_sum": 213093143201,
"spent_txo_count": 0,
"spent_txo_sum": 0,
"tx_count": 2809
},
"mempool_stats": {
"funded_txo_count": 0,
"funded_txo_sum": 0,
"spent_txo_count": 0,
"spent_txo_sum": 0,
"tx_count": 0
}
}
|
JSONは階層構造になっているため、以下のようなJSON.flatten
関数でドット連結形式に変換します。
JSON flatten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| JSON.flatten = function(data) {
var result = {};
function recurse (cur, prop) {
if (Object(cur) !== cur) {
result[prop] = cur;
} else if (Array.isArray(cur)) {
for(var i=0, l=cur.length; i<l; i++)
recurse(cur[i], prop ? prop+"."+i : ""+i);
if (l == 0)
result[prop] = [];
} else {
var isEmpty = true;
for (var p in cur) {
isEmpty = false;
recurse(cur[p], prop ? prop+"."+p : p);
}
if (isEmpty)
result[prop] = {};
}
}
recurse(data, "");
return result;
}
|
できあがったスクリプトは以下の通りです
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function updateTab(data){
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
sheet.clear();
var i = 1;
Object.keys(data).forEach(key => { sheet.getRange(i++,1,1,2).setValues([[key, data[key]]]); });
}
function _test_updateTab(){
var url = "https://blockstream.info/api/address/1CounterpartyXXXXXXXXXXXXXXXUWLpVr";
var response = UrlFetchApp.fetch(url);
var data = JSON.flatten(JSON.parse(response.getContentText()));
updateTab(data);
}
|
実行結果は以下のようになります。