aardio扩展库 数据维格表api

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

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

官网地址: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));
		}
	};
}


16 个回复 | 最后更新于 2021-09-18
2021-09-06   #1

支持下,持续关注 

2021-09-06   #2

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

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

2021-09-06   #3

用 web.rest 可以更简单一些,可以将 API  自动转换为 aardio 函数:

import web.rest.jsonClient;

class web.rest.vika{
	ctor( authToken ){
		this = ..web.rest.jsonClient();
		this.defaultUrlTemplate = "https://api.vika.cn/fusion/v1/datasheets/dst{datasheetId}"; 
		this.addHeaders = { Authorization: "Bearer "+ authToken; } 
	}; 
}

调用示例:

import console; 
var http = web.rest.vika("usk**************"); 
var vika = http.api();

var records = vika["1BsCLSrz9MeiMfg"].records.get();
console.dumpJson(records);

var fields = vika["1BsCLSrz9MeiMfg"].fields.get();
console.dumpJson(fields);
	
console.pause(true);


2021-09-07   #4
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   #5

添加一个过滤器

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   #6

添加记录

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   #7

Capture.PNG

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

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

2021-09-08   #8

回复#7 @jerryxjr1220 :

就是要联网,哈

2021-09-08   #9

回复#8 @admin :

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

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

2021-09-08   #10

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

我用了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   #11

回复#10 @jerryxjr1220 :

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

2021-09-08   #12

不用网上搜,不用一个个试验 …… 只要简单地翻一下基础语法文档就可以。

aardio 里字符串本来就可以直接比较,例如 str1 > str2。这些 aardio 基础语法里都有写。

如果你需要更多的比较功能,可以查看 string 函数库文档。aardio 提供了非常多的字符串比较函数,例如 string.cmp, string.cmpMatch,string.collate 等。字符串函数都在这个库里,很好找。

即使你真的要用这种奇怪的方法从字符串里取数字,也不用这么复杂, string.replace(md5a,"\D","") 就可以,参考模式匹配语法文档。


2021-09-08   #13

回复#10 @jerryxjr1220 :

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

2021-09-08   #14

回复#12 @jacen :

非常感谢,很有帮助!

aardio的函数还是挺全的。

2021-09-08   #15

回复#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;
}

这样已经能实现排序了。

29 天前   #16

搞错了...

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
加入本站专享群:783804676
AARDIO语言QQ大群:70517368
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
C大Aardio论坛:Aar爱好者论坛
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
赞助商:才仁机械




Loading...