aardio扩展库 数据维格表api

By jerryxjr1220 at 2021-09-06 • 0人收藏 • 1765人看过

维格表是新一代的关系数据库,通过“数据层-关系层-视图层”的结构赋予了表格更安全并且更广泛的用途。

官网地址:vika维格 - 多维表格首创者,支持API的新一代数据协作与项目管理工具


维格表支持导入和导出Excel,CSV等多种数据格式,同时也支持甘特图,列表视图等多种数据可视化。官网内建了非常多的各行业模板,目前公测阶段可免费使用。


本扩展库是利用http调用vika的api接口:

import console; 
import Vika;
console.open()
vika = Vika("替换为你的Auth_Token_ID")
records = vika.getrecords("U7HFcLUmL2WTd48")

//fields = vika.getfields("U7HFcLUmL2WTd48")

//views = vika.getviews("U7HFcLUmL2WTd48")

//nodes = vika.getnodes("U7HFcLUmL2WTd48")


console.dump(records);
//console.dump(fields);
//console.dump(views);
//console.dump(nodes);


console.pause(true);

无标题.png

扩展库(目前还不完善,先挖个坑,以后再填)

import web;
import web.json;
class Vika {
	ctor (Auth_token) {
		import inet.http;
		this = inet.http();
		this.headers = {
			Authorization = "Bearer "++Auth_token;
			["Content-Type"] = "application/json";
			["user-agent"] = "Mozilla/5.0";
		};
	};
	getrecords = function(datasheet_id_or_url){
		import web.json;
		if inet.url.is(datasheet_id_or_url,0x0/*_URLIS_URL*/) {
			return web.json.parse(this.get(datasheet_id_or_url)); 
		} else {
			return web.json.parse(this.get("https://api.vika.cn/fusion/v1/datasheets/dst"++datasheet_id_or_url++"/records"));
		}
	};
	getfields = function(datasheet_id_or_url){
		import web.json;
		if inet.url.is(datasheet_id_or_url,0x0/*_URLIS_URL*/) {
			return web.json.parse(this.get(datasheet_id_or_url)); 
		} else {
			return web.json.parse(this.get("https://api.vika.cn/fusion/v1/datasheets/dst"++datasheet_id_or_url++"/fields"));
		}
	};
	getviews = function(datasheet_id_or_url){
		import web.json;
		if inet.url.is(datasheet_id_or_url,0x0/*_URLIS_URL*/) {
			return web.json.parse(this.get(datasheet_id_or_url)); 
		} else {
			return web.json.parse(this.get("https://api.vika.cn/fusion/v1/datasheets/dst"++datasheet_id_or_url++"/views"));
		}
	};
	getnodes = function(space_id_or_url){
		import web.json;
		if inet.url.is(space_id_or_url,0x0/*_URLIS_URL*/) {
			return web.json.parse(this.get(space_id_or_url)); 
		} else {
			return web.json.parse(this.get("https://api.vika.cn/fusion/v1/spaces/spc"++space_id_or_url++"/nodes"));
		}
	};
	getsheetsinfo = function(space_id_or_url, node_id=""){
		import web.json;
		if inet.url.is(space_id_or_url,0x0/*_URLIS_URL*/) {
			return web.json.parse(this.get(space_id_or_url)); 
		} else {
			return web.json.parse(this.get("https://api.vika.cn/fusion/v1/spaces/spc"++space_id_or_url++"/nodes/"++node_id));
		}
	};
}


23 个回复 | 最后更新于 14 天前
2021-09-06   #1

支持下,持续关注 

2021-09-06   #2

其实,目前来说,主要功能就是为了获取records,已经实现了。

后期待完善的部分无非是增删改查的功能,到时候有空再完善。

2021-09-07   #3
import web.rest.jsonLiteClient;

class vika {
	ctor (AuthToken) {
		this = ..web.rest.jsonLiteClient();
		this.defaultContentType = "application/json";
		this.defaultUrlTemplate = "https://api.vika.cn/fusion/v1/datasheets/dst{DataSheetID}";
		this.addHeaders = { Authorization: "Bearer "++ AuthToken; }
		this.http = this.api()
	};
	getrecords = function(DataSheetID){
		return this.http[DataSheetID].records.get();
	};
	getviews = function(DataSheetID){
		return this.http[DataSheetID].views.get();
	};
	getfields = function(DataSheetID){
		return this.http[DataSheetID].fields.get();
	};
	getnodes = function(NodesID){
		return this.api("https://api.vika.cn/fusion/v1/spaces/spc{NodesID}")[NodesID].nodes.get()
	};
}

回复#3 @jacen :

果然更简洁了,赞!


2021-09-07   #4

添加一个过滤器

namespace vika{
    filter = function(records, filter_list){
    	records = records.data.records;
    	results = {}
    	for _,record in records {
    	    var flg = true;
    	    for k,v in filter_list {
    	    	 if record.fields[k] != v {
    	    	     flg = false;
    	    	     break;
    	    	 }
    		}
    	   	if flg {
    	   		..table.push(results, record)
    	   	}
    	}
    	return results;
    }
	
}

调用的时候

import console;
import vika;

vk = vika("你的AuthToken")
records = vk.getrecords("U7HFcLUmL2WTd48")
res = vika.filter(records, {剧集="E1";})

console.dump(res);

console.pause();


2021-09-07   #5

添加记录

class vika {
	ctor (AuthToken) {
		this = ..web.rest.jsonLiteClient();
		this.defaultContentType = "application/json";
		this.defaultUrlTemplate = "https://api.vika.cn/fusion/v1/datasheets/dst{DataSheetID}";
		this.addHeaders = { Authorization: "Bearer "++ AuthToken; }
		this.http = this.api()
	};
	getrecords = function(DataSheetID){
		this.records = this.http[DataSheetID].records.get();
		return this.records;
	};
	getviews = function(DataSheetID){
		this.views = this.http[DataSheetID].views.get();
		return this.views;
	};
	getfields = function(DataSheetID){
		this.fields = this.http[DataSheetID].fields.get();
		return this.fields;
	};
	getnodes = function(NodesID){
		this.nodes = this.api("https://api.vika.cn/fusion/v1/spaces/spc{NodesID}")[NodesID].nodes.get();
		return this.nodes;
	};
	addrecords = function(DataSheetID, sdata){
		if type(sdata) == "string" {
			data = ..web.json.parse(sdata);
		} else {
			data = sdata;
		}
		if !data["records"] {
			dd = {records={};};
			for _,d in data {
				..table.push(dd.records, {fields=d;});
			}
		} else {
			dd = data;
		}
		this.records = this.http[DataSheetID].records.post(..web.json.stringify(dd));
		return this.records;
	}
	
}	

调用添加记录

data = {
	{
      剧集= "E1",
      状态= "已追",
      播放地址= "https://www.adcmovies.com/play/159895-1-1.html"
    };
  	{
      剧集= "E2",
      状态= "已追",
      播放地址= "https://www.adcmovies.com/play/159895-1-2.html"
    }
}

pres = vk.addrecords("U7HFcLUmL2WTd48", data)


2021-09-08   #6

Capture.PNG

利用维格表当一个小型数据库,实现增删改查功能,还是挺方便的。

维格表支持10万条以下记录。

2021-09-08   #7

回复#7 @jerryxjr1220 :

就是要联网,哈

2021-09-08   #8

回复#8 @admin :

是的,但是考虑到现在互联网的趋势,联网的电脑比单机更普遍。

而且如果是单机使用的话,拿个记事本记录一下就算了

2021-09-08   #9

插一个题外话,对于字符串的排序一般是怎么做的?

我用了md5,提取数字再比较,感觉很怪。。。

	..table.sort(tab, function(row){
		a, b = row[cloumn], owner[cloumn]
		md5a = ..crypt.md5(a);
		md5b = ..crypt.md5(b);
		ta = ..string.matches(tostring(md5a),"\d")
		tb = ..string.matches(tostring(md5b),"\d")
		tta, ttb = {}, {}
		for _,t in ta {..table.push(tta, t[1])}
		for _,t in tb {..table.push(ttb, t[1])}
		na = tonumber(..string.join(tta,''))
		nb = tonumber(..string.join(ttb,''))
		return na<nb;
	})


2021-09-08   #10

回复#10 @jerryxjr1220 :

没用过, 网上搜了下, 算法有一些 ,估计要一个个试验

2021-09-08   #11

回复#10 @jerryxjr1220 :

table.sort 是给数组排序的,所以你 row[cloumn] 就很奇怪

2021-09-08   #12

回复#12 @jacen :

非常感谢,很有帮助!

aardio的函数还是挺全的。

2021-09-08   #13

回复#13 @nlysh007 :

我这是listview排序里截取出来的一段代码

grid = win.ui.grid(mainForm.listview);

grid.onSortColumn = function(cloumn,desc){
	var tab = ..table.clone(mainForm.listview.items);
	..table.sort(tab, function(row){
		return row[cloumn]<owner[cloumn];
	})
	if desc {..table.reverse(tab)};
	mainForm.listview.items = tab;
	return true;
}

这样已经能实现排序了。

2022-06-10   #14

@jerryxjr1220

有兴趣做一下 seatable的API 吗 这个支持私有化部署 开源 而且可以在表格里面运行PY脚本 而且更新频率很快

2022-06-10   #15

SeaTable - 新一代在线协同表格和数字化平台 https://www.seatable.cn/

2022-06-10   #16

回复#6 @jerryxjr1220 :

我审美观不太好,蛋还是觉得这个UI做的真不错

2022-06-10   #17

image.png

无法注册呢,seatable.cn

2022-06-15   #18

回复#15 @zjcyjj :

我都忘记自己写过这个库了,哈哈

不过感觉用下来vika也好,seatable也好,这种关系型电子数据库形式的表单还是国外做的更好,比如monday或者clickup,用起来更顺手。

23 天前   #19

回复#6 @jerryxjr1220 :

我试着写了DELETE方法,发现写不好。官方说明里是这样的:

curl -X DELETE "https://api.vika.cn/fusion/v1/datasheets/dstu5Pv8oTgTlU5xQJ/records?recordIds=recC7H4a2jRO7&recordIds=recmhsNfRUQ3t" \
  -H "Authorization: Bearer _替换成你的API_Token_"

我写成这样:

delete = function(DataSheetID,recordId){
        result = this.api("https://api.vika.cn/fusion/v1/datasheets/"+tostring(DataSheetID)+"/records?recordIds="+tostring(recordId),'delete');
        return result;
    }

但实际上删除不了。


还以为一个很奇怪的问题,试着增加两条记录,提示400错误:

单次请求修改/删除/新增的记录不能超过 10 条


21 天前   #20

回复#19 @shingu :

其实作为数据库来说,一般是不建议删除的,这样的好处是可以保证所有数据的记录位置是不变的。

如果真要“删除”某数据的话,你可以增加一列“删除列”作为标记,当“删除列”为true时,即表示该条记录无效。

这样即使以后想要恢复数据,只要重新修改“删除列”为false即可。

20 天前   #21

回复#20 @jerryxjr1220 :

数据库技巧,要的...

20 天前   #22

回复#21 @hi_aardio :

所以在互联网上上传图片或者发表消息都要谨慎,因为你很难真正删除掉它们,即使你以为你已经删除了

14 天前   #23

回复#7 @admin :

联网不安全。

登录后方可回帖

登 录
信息栏
公告:
个人博客
专注分享
谢谢合作!

本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...