Skip to content

Instantly share code, notes, and snippets.

@ka2n
Created June 27, 2018 10:49
Show Gist options
  • Save ka2n/83fa3ef84b5a8a5069d7b10f7f1cab5c to your computer and use it in GitHub Desktop.
Save ka2n/83fa3ef84b5a8a5069d7b10f7f1cab5c to your computer and use it in GitHub Desktop.
Fetch Nicehash History for GAS
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);
}
@DfabulaGames
Copy link

can you help me i dont know how tuning baikal bk n+ please?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment