Created
June 27, 2018 10:49
-
-
Save ka2n/83fa3ef84b5a8a5069d7b10f7f1cab5c to your computer and use it in GitHub Desktop.
Fetch Nicehash History for GAS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onOpen() { | |
var ui = SpreadsheetApp.getUi(); | |
var menu = ui.createMenu('Nicehash'); | |
menu.addItem('データを取得', 'myFunction'); | |
menu.addToUi(); | |
} | |
function myFunction() { | |
var doc = SpreadsheetApp.getActiveSpreadsheet(); | |
Object.keys(ALGOMAP).forEach(function(k) { | |
var sheetName = ALGOMAP[k]; | |
Logger.log("Fetching " + sheetName); | |
// シートを作成 | |
var sheet = doc.getSheetByName(sheetName); | |
if (!sheet) { | |
sheet = doc.insertSheet(sheetName); | |
} | |
// 最終日時を取得 | |
var lastRow = getFirstEmptyRow(sheet); | |
var lastRowValue = sheet.getRange(lastRow, 1).getValue(); | |
var lastDate = 0; | |
if (lastRowValue != "") { | |
lastDate = lastRowValue; | |
} | |
// データを取得 | |
var ret = parseCoinStat(fetchCoinStats(k)); | |
var valuesToUpdate = []; | |
var i = 0; | |
for (var i = 0; i < ret.data.length; i++) { | |
var d = ret.data[i]; | |
if (lastDate !== 0 && d[0] <= lastDate) continue; // 差分のみ | |
valuesToUpdate.push([d[0], null, d[1], d[2]]); | |
} | |
var updateRange = sheet.getRange(lastRow+1, 1, valuesToUpdate.length, 4); | |
updateRange.setValues(valuesToUpdate); | |
// 2行目に関数を入れる | |
sheet.getRange('B2').setValue('=arrayformula(A2:A/1000/86400+date(1970,1,1))') | |
}) | |
} | |
function getFirstEmptyRow(sheet) { | |
var column = sheet.getRange('A:A'); | |
var values = column.getValues(); // get all data in one call | |
var ct = 0; | |
while ( values[ct][0] != "" ) { | |
ct++; | |
} | |
return (ct) + 1; | |
} | |
var ALGOMAP = { | |
// 0: 'Scrypt', | |
//1: 'SHA256', | |
//2: 'ScryptNf', | |
//3: 'X11', | |
//4: 'X13', | |
//5: 'Keccak', | |
//6: 'X15', | |
//7: 'Nist5', | |
//8: 'NeoScrypt', | |
//9: 'Lyra2RE', | |
//10: 'WhirlpoolX', | |
//11: 'Qubit', | |
//12: 'Quark', | |
//13: 'Axiom', | |
//14: 'Lyra2REv2', | |
//15: 'ScryptJaneNf16', | |
//16: 'Blake256r8', | |
//17: 'Blake256r14', | |
//18: 'Blake256r8vnl', | |
//19: 'Hodl', | |
//20: 'DaggerHashimoto', | |
//21: 'Decred', | |
//22: 'CryptoNight', | |
//23: 'Lbry', | |
24: 'Equihash', | |
//25: 'Pascal', | |
//26: 'X11Gost', | |
//27: 'Sia', | |
//28: 'Blake2s', | |
//29: 'Skunk', | |
//30: 'CryptoNightV7', | |
//31: 'CryptoNightHeavy', | |
//32: 'Lyra2Z', | |
} | |
function algoIDtoName(id) { | |
var name = ALGOMAP[id]; | |
if (name) { | |
return name | |
} | |
return id | |
} | |
/* | |
{ | |
data: [[Unixepoch, speed, Profit]...] | |
} | |
*/ | |
function parseCoinStat(data) { | |
// var n = (new Date().getTimezoneOffset()) * 60 * 1000; | |
var speedData = []; | |
var profitData = []; | |
var firstDate = 0; | |
var lastDate = 0; | |
var prev = 0; | |
var k = 0; | |
var dataLength = data.length; | |
var i = 0; | |
for (i; i < dataLength; i++) | |
{ | |
if (data[i][0] === prev) continue; | |
prev = data[i][0]; | |
data[i][0] *= 300000; | |
// data[i][0] -= n; | |
if(firstDate==0){ | |
firstDate = data[i][0]; // Get first date in array | |
} | |
// speedData[k] = [data[i][0], data[i][1]]; | |
// profitData[k] = [data[i][0], data[i][2]]; | |
k++; | |
} | |
lastDate = data[data.length - 1][0]; // Get last date in array | |
return { firstDate: firstDate, lastDate: lastDate, data: data } | |
} | |
function fetchCoinStats(coinID) { | |
var resp = UrlFetchApp.fetch("https://api.nicehash.com/stats?algo=" + coinID).getContentText(); | |
var jsonpSignIndex = resp.indexOf('(') | |
var body = resp.slice(jsonpSignIndex+1, -2) // JSONP to JSON | |
return JSON.parse(body); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
can you help me i dont know how tuning baikal bk n+ please?