运行 google sheet 中的 websocket
running websocket in google sheet
我在我的应用程序脚本中使用 API 端点 google sheet 但有一段时间,我收到此错误:
{"code":-1003,"msg":"Way too much request weight used; IP banned until 1632924884440. Please use the websocket for live updates to avoid bans."}
关于这个问题的任何解决方案,我阅读了很多内容,但有说这可以做 websocket,另一篇文章说不能在 google sheet 中做 websocket。如果我做不到,还有其他解决方案吗??
让我们以 Binance 为例。您可以在 html 文件中使用 websocket。这意味着您可以使用此 html 文件创建侧边栏并使用它传输信息。
<!DOCTYPE html>
<meta charset="utf-8" />
<head>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
body{margin:12px;}
</style>
<script language="javascript" type="text/javascript">
var wsUri = ("wss://stream.binance.com:9443/ws");
<? var myparam = param(); ?>
var nbr=0
function init() {
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onclose = function(evt) { onClose(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
nbr=0;
}
function onOpen(evt) {
writeLog("Connected to:<br>" + wsUri);
doSend(<?= myparam ?>);
}
function onClose(evt) {
writeLog("Disconnected from:<br>" + wsUri);
}
function onMessage(evt) {
nbr++;
google.script.run.getJSON( evt.data );
document.getElementById('nbr').innerHTML=('<span style="color: blue;">Response #<b>' + nbr + '</b> transmitted to sheet</span>');
}
function onError(evt) {
writeLog('<span style="color: red;">ERROR:</span> ' + evt.data);
}
function doSend(message) {
writeLog("Sent: " + message);
websocket.send(message);
}
function writeLog(message) {
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
document.getElementById("log").appendChild(pre);
}
window.addEventListener("load", init, false);
window.addEventListener("beforeunload", websocket.close, false);
</script>
</head>
<body>
<div id="nbr"> </div><br>
<div id="lastButtonBlock" class="block">
<button onclick="init()" class ="action button actionButton" > Connect </button>
<button onclick="websocket.close()" class ="action button actionButton" > Disconnect </button>
<button onclick="google.script.host.close()" class ="create deleteButton actionButton" > Close </button>
</div><br>
<div id="log"></div><br>
</body>
</html>
gs 文件例如
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('derCotation');
function param(){
var valeurs = sh.getRange('B3:B'+sh.getLastRow()).getValues().join().split(",")
var myparams = {"method": "SUBSCRIBE", "params": valeurs, "id": 1}
return JSON.stringify(myparams)
}
function getJSON(jsonstring){
try{
var data = JSON.parse(jsonstring);
var pairs = sh.getRange('A3:A').getValues().join().split(",");
var ligne = pairs.indexOf(data.k.s);
if (ligne != -1){
var result=[]
result.push([ data.k.o , data.k.c , data.k.h , data.k.l ])
sh.getRange('C' + (ligne+3) + ':F' + (ligne+3)).setValues(result)
}
}
catch(e){
}
}
我在我的应用程序脚本中使用 API 端点 google sheet 但有一段时间,我收到此错误:
{"code":-1003,"msg":"Way too much request weight used; IP banned until 1632924884440. Please use the websocket for live updates to avoid bans."}
关于这个问题的任何解决方案,我阅读了很多内容,但有说这可以做 websocket,另一篇文章说不能在 google sheet 中做 websocket。如果我做不到,还有其他解决方案吗??
让我们以 Binance 为例。您可以在 html 文件中使用 websocket。这意味着您可以使用此 html 文件创建侧边栏并使用它传输信息。
<!DOCTYPE html>
<meta charset="utf-8" />
<head>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
body{margin:12px;}
</style>
<script language="javascript" type="text/javascript">
var wsUri = ("wss://stream.binance.com:9443/ws");
<? var myparam = param(); ?>
var nbr=0
function init() {
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onclose = function(evt) { onClose(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
nbr=0;
}
function onOpen(evt) {
writeLog("Connected to:<br>" + wsUri);
doSend(<?= myparam ?>);
}
function onClose(evt) {
writeLog("Disconnected from:<br>" + wsUri);
}
function onMessage(evt) {
nbr++;
google.script.run.getJSON( evt.data );
document.getElementById('nbr').innerHTML=('<span style="color: blue;">Response #<b>' + nbr + '</b> transmitted to sheet</span>');
}
function onError(evt) {
writeLog('<span style="color: red;">ERROR:</span> ' + evt.data);
}
function doSend(message) {
writeLog("Sent: " + message);
websocket.send(message);
}
function writeLog(message) {
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message;
document.getElementById("log").appendChild(pre);
}
window.addEventListener("load", init, false);
window.addEventListener("beforeunload", websocket.close, false);
</script>
</head>
<body>
<div id="nbr"> </div><br>
<div id="lastButtonBlock" class="block">
<button onclick="init()" class ="action button actionButton" > Connect </button>
<button onclick="websocket.close()" class ="action button actionButton" > Disconnect </button>
<button onclick="google.script.host.close()" class ="create deleteButton actionButton" > Close </button>
</div><br>
<div id="log"></div><br>
</body>
</html>
gs 文件例如
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('derCotation');
function param(){
var valeurs = sh.getRange('B3:B'+sh.getLastRow()).getValues().join().split(",")
var myparams = {"method": "SUBSCRIBE", "params": valeurs, "id": 1}
return JSON.stringify(myparams)
}
function getJSON(jsonstring){
try{
var data = JSON.parse(jsonstring);
var pairs = sh.getRange('A3:A').getValues().join().split(",");
var ligne = pairs.indexOf(data.k.s);
if (ligne != -1){
var result=[]
result.push([ data.k.o , data.k.c , data.k.h , data.k.l ])
sh.getRange('C' + (ligne+3) + ':F' + (ligne+3)).setValues(result)
}
}
catch(e){
}
}