commit 444609027c719210a38f42ab29bc0a23f2ada243 Author: sunbeam Date: Thu Nov 14 14:53:37 2024 +0800 初版功能OK diff --git a/aar_prj/gamelist/default.aproj b/aar_prj/gamelist/default.aproj new file mode 100644 index 0000000..3bb3d5a --- /dev/null +++ b/aar_prj/gamelist/default.aproj @@ -0,0 +1,6 @@ + + + + + + diff --git a/aar_prj/gamelist/getData.py b/aar_prj/gamelist/getData.py new file mode 100644 index 0000000..df0ddec --- /dev/null +++ b/aar_prj/gamelist/getData.py @@ -0,0 +1,51 @@ + + +import gspread +from gspread.utils import GridRangeType + +import os + +# 获取当前工作目录 +current_dir = os.getcwd() + +# 拼接文件路径 +file_path = os.path.join(current_dir, 'service_account.json') + +print(file_path) + +gc = gspread.service_account(filename=file_path) +print("gc") +print(gc) +sheetkey = '1fmZc0DsjusQwJ6giUKW_sFElugpDLR1yRs2KT9RhuJo' +print("sheetkey") +print(sheetkey) +print(type(sheetkey)) + +sh = gc.open_by_key(sheetkey) +print("sh") +print(sh) +# Select worksheet by index. Worksheet indexes start from zero +worksheet = sh.get_worksheet(0) +print("worksheet") +print(worksheet) + +list_of_lists = worksheet.get(return_type=GridRangeType.ListOfLists) +#print(list_of_lists) + +lenth = len(list_of_lists) + +# output +import json + +# 指定JSON文件名 +json_filename = "output.json" + +# 写入JSON文件 +with open(json_filename, 'w', encoding='utf-8') as file: + json.dump(list_of_lists, file, ensure_ascii=False, indent=4) + +print(f"数据已导出到 {json_filename}") + + + + diff --git a/aar_prj/gamelist/lib/config.aardio b/aar_prj/gamelist/lib/config.aardio new file mode 100644 index 0000000..5da06a0 --- /dev/null +++ b/aar_prj/gamelist/lib/config.aardio @@ -0,0 +1,17 @@ +//config 配置文件 +import fsys.config; +config = fsys.config("/config/"); +//config = fsys.config( io.appData("/软件作者/应用程序名/") ); + +//不需要序列化的配置名字前请添加下划线 +namespace config { + __appName = "应用程序名"; + __website = "http://www.aardio.com/"; +} + +/**intellisense(config) +__appName = 应用程序名 +__website = 官方网站 +saveAll() = 写入所有配置到文件 +? = 获取值时指定不以下划线开始的配置表名称,\n返回一个可自动序列化到同名配置文件的表对象。\n如果此对象名以下划线开始,则可以正常读写值不会序列化为配置文件。\n否则不能对此对象直接赋值,只能对配置表对象的成员赋值。\n\n配置表可自动自文件加载,退出线程前自动序列化并存入文件。\n仅序列化以字符串、数值为键的元素,\n仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。\n循环引用的值转换为 null,序列化时忽略成员函数\n!fsys_table. +end intellisense**/ \ No newline at end of file diff --git a/aar_prj/gamelist/main.aardio b/aar_prj/gamelist/main.aardio new file mode 100644 index 0000000..1cebcd7 --- /dev/null +++ b/aar_prj/gamelist/main.aardio @@ -0,0 +1,241 @@ +import win.ui; +/*DSG{{*/ +mainForm = win.form(text="gamelist";right=999;bottom=599) +mainForm.add( +btnExclude={cls="button";text="排除";left=873;top=438;right=985;bottom=467;ah=1;aw=1;z=12}; +btnFilter={cls="button";text="筛选";left=759;top=438;right=871;bottom=467;ah=1;aw=1;z=2}; +btnSearchDown={cls="button";text="向下搜索";left=874;top=530;right=985;bottom=559;ah=1;aw=1;z=11}; +btnSearchUp={cls="button";text="向上搜索";left=759;top=532;right=870;bottom=561;ah=1;aw=1;z=10}; +cbb_guojia={cls="combobox";left=877;top=401;right=985;bottom=427;ah=1;aw=1;edge=1;items={};mode="dropdown";z=8}; +cbb_leixing={cls="combobox";left=759;top=402;right=867;bottom=428;ah=1;aw=1;edge=1;items={};mode="dropdown";z=7}; +edDesp={cls="richedit";text="RichEdit";left=507;top=122;right=970;bottom=371;ah=1;autohscroll=false;aw=1;edge=1;multiline=1;vscroll=1;z=5}; +edOther={cls="richedit";text="RichEdit";left=512;top=404;right=750;bottom=569;ah=1;autohscroll=false;aw=1;edge=1;multiline=1;vscroll=1;z=6}; +edSearch={cls="edit";left=755;top=487;right=981;bottom=526;ah=1;aw=1;edge=1;multiline=1;z=9}; +edUrl={cls="richedit";text="RichEdit";left=506;top=21;right=969;bottom=96;ah=1;autohscroll=false;aw=1;edge=1;multiline=1;vscroll=1;z=3}; +edit={cls="edit";text="Edit";left=822;top=190;right=823;bottom=191;edge=1;z=4}; +listbox={cls="listbox";left=7;top=10;right=478;bottom=577;ah=1;aw=1;edge=1;items={};vscroll=1;z=1} +) +/*}}*/ + +import web.json; +import console; +import string.list; +import win; + +guojia = {} +newdata_filted = {} + +table_guojia_add = function(data){ + if(data == null){ + return null; + } + if(type(data) == type.table){ + data = data[1]; + } + var notguojia = string.find(data,"\/"); + if(notguojia){ + return null; + } + + var newstr = string.replace( data,"[【】]",""); + + var ret = table.find(guojia,newstr); + if(ret == null){ + table.push(guojia,newstr) + } + return newstr; +} + + +//table.find( +//console.dumpJson(datalist) +data_pro = function(){ + jsonstr = string.load(".\output.json") + datalist = web.json.parse(jsonstr,,); + datacount = 1; + newdatalist = {}; + for(i=2;#datalist;1){ + if(#datalist[i] < 2){ + console.dumpJson(datalist[i]) + continue; + } + if(string.len(datalist[i][1]) < 2){ + //console.dumpJson(datalist[i]) + continue; + } + newdatalist[datacount] = {}; + var namestr = datalist[i][1]; + + var pattern = "%<【><】>" + var replaceText = ""; + var replacecount = "3"; + var strReplaceResult = string.replace( namestr,pattern,replaceText,replacecount); + + + var displist = string.matches(datalist[i][1], pattern) + + table_guojia_add(displist[1]) + //console.dumpJson(displist); + var shortdisp = "";//string.join(displist); + for(k,v in displist){ + shortdisp = shortdisp ++ v[1] ++'\n'; + + } + + + newdatalist[datacount][1] = datalist[i][1];//name + newdatalist[datacount][2] = datalist[i][2];//url + newdatalist[datacount][3] = datalist[i][3];//disp + newdatalist[datacount][4] = shortdisp; + newdatalist[datacount][5] = strReplaceResult; + var test = mainForm.listbox.add(strReplaceResult); + if(test != datacount){ + console.log("数据错误"); + console.log(datacount); + break; + } + + datacount++; + } + newdata_filted = newdatalist; +} + + +mainForm.listbox.oncommand = function(id,event){ + if( event == 0x1/*_LBN_SELCHANGE*/ ){ + var sel = mainForm.listbox.selIndex; + updateselect(sel); + } +} + +mainForm.btnFilter.oncommand = function(id,event){ + filter_data(); +} + +if(io.exist(".\service_account.json") == false){ + win.msgbox("没有授权文件"); + mainForm.close(); +} + +if(io.exist(".\output.json") == false){ + import process.popen + var prcs = process.popen.cmd('python getData.py'); + //prcs.wa + //prcs.wait(20000); + import win; + win.msgbox(prcs.readAll()) +} + +if(io.exist(".\output.json") == true){ + data_pro(); +} +else { + win.msgbox("数据获取失败"); + mainForm.close(); +} + + + + +for(k,v in guojia){ + mainForm.cbb_guojia.add(v); +} +mainForm.cbb_guojia.selIndex = 1; + +filter_data = function(){ + newdata_filted = {}; + var newcount = 1; + for(i=1;#newdatalist;1){ + if(string.indexOf(newdatalist[i][1],mainForm.cbb_guojia.selText)){ + + } + else { + continue; + } + newdata_filted[newcount] = newdatalist[i]; + newcount++; + } + mainForm.listbox.clear(); + for(i=1;#newdata_filted;1){ + mainForm.listbox.add(newdata_filted[i][5]); + } + updateselect(1); +} + +exclude_data = function(){ + newdata_filted = {}; + var newcount = 1; + for(i=1;#newdatalist;1){ + if(string.indexOf(newdatalist[i][1],mainForm.cbb_guojia.selText)){ + continue; + } + else { + + } + newdata_filted[newcount] = newdatalist[i]; + newcount++; + } + mainForm.listbox.clear(); + for(i=1;#newdata_filted;1){ + mainForm.listbox.add(newdata_filted[i][5]); + } + updateselect(1); +} + +updateselect = function(index){ + if(index > #newdata_filted){ + return ; + } + mainForm.listbox.selIndex = index; + mainForm.edUrl.text = newdata_filted[index][2]; + mainForm.edDesp.text = newdata_filted[index][5] ++ '\n' ++ newdata_filted[index][3]; + mainForm.edOther.text = newdata_filted[index][4]; +} + + +mainForm.btnSearchUp.oncommand = function(id,event){ + var searchtext = mainForm.edSearch.text + var nowsel = mainForm.listbox.selIndex; + if(nowsel == null){ + nowsel = #newdata_filted+1; + } + if(nowsel < 1 || nowsel >#newdata_filted){ + nowsel = #newdata_filted+1; + } + nowsel--; + for(i=nowsel;1;-1){ + if(string.indexOf(newdata_filted[i][5],searchtext)){ + updateselect(i); + return ; + } + + } + win.msgbox("已到顶","未找到",,,1000); +} + +mainForm.btnExclude.oncommand = function(id,event){ + exclude_data(); +} + +mainForm.btnSearchDown.oncommand = function(id,event){ + var searchtext = mainForm.edSearch.text + var nowsel = mainForm.listbox.selIndex; + if(nowsel == null){ + nowsel = 0; + } + if(nowsel < 1 || nowsel >#newdata_filted){ + nowsel = 0; + } + nowsel++; + for(i=nowsel;#newdata_filted;1){ + if(string.indexOf(newdata_filted[i][5],searchtext)){ + updateselect(i); + return ; + } + + } + win.msgbox("已到底","未找到",,,1000); +} + +mainForm.show(); +return win.loopMessage(); \ No newline at end of file diff --git a/aar_prj/gamelist/run.bat b/aar_prj/gamelist/run.bat new file mode 100644 index 0000000..b4b1087 --- /dev/null +++ b/aar_prj/gamelist/run.bat @@ -0,0 +1,4 @@ +python .\getData.py + + +pause \ No newline at end of file diff --git a/aar_prj/gamelist/service_account.json b/aar_prj/gamelist/service_account.json new file mode 100644 index 0000000..c3b5a80 --- /dev/null +++ b/aar_prj/gamelist/service_account.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "mesmerizing-app-438408-a9", + "private_key_id": "01fa1ca6fce69a3d898084a3d6ecdd3d9bcc9e73", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCqDfVHSACQXF4/\n4L8W4CgbaQmMQNKw3qKm2R8R0/HtJkHJc/jRdpAacUaq4SmiLWiSRJfs1WW9EsZT\nVjmAKBQwaBSn/nstcRoeCP2tpiJmiBMUjlwnRMeK3CNYer4RoHacT/AdjwCk5Cjg\nVqYr08jIw/eesCl706HF/pCVrg26X7CmYEkxplv1WHZI53ffA5Ki/VcCDfPytOwY\nJTl/NP9u3r28vdpKiWpZvTsJM8DmioNslujjGg9B8qKLwIsEwJ4/SPgMmKwZ3Q8S\nQakKQVw5bvu6YDmBEZUUanSob3UjzFI77FtyWgPHuLj0jGE99Cwyv1XEl/woDfFk\nmHw+IvyfAgMBAAECggEARNZLoKQr3kQVvuPaVoc8lQPq4oRnBUPKMaIYap4SA36G\nCOdSJHBLGvkZsxhcQxMAjp0Hps4nVecgsyFnO1J+Aa5QFkT0Vcu/18Kp9b4XlMum\ndZ6+/QJhh/ter3VYNUhwWwwc1cpKZ3UYet94eqtLTsHNHcaPtFlR1hUbMAv58KQc\nsALOO2aPu/Jr3l0Ek48ov9KsDlnIgXZsNDFkgiOyegn3ZhxjqObWrJnp1TdGyaAG\n0oXq/Niw2b600lMi9cB6mLEbXkMvOHPz9JQpIDj8CC5rC4LJyadYTdtCmbr7HXRh\nvHUSAnbgw679n1B8+rUh+awv7ON2eL2bAlhBXQnk8QKBgQDSEmsgkcKwMJYInvvy\n9x20ekVO2Vgf3p304i1FbrxJSTyR7TRgvlAZqKXM02ltODjuZ0XJ+9AKee2BZfBu\nena7H1KyZ/uIkN6jEvlJHYbeI3mIIqyFp5Cw5MalAU+CKwqhMaYYcPjIAlbLLmEa\nmRT6YdrO8VuDe87zDmWLhvofKQKBgQDPO8rLLHrBwXA+HwWJIHysE6FE5Q6URYHS\nQXckDrGopkLidjD/ciA/wwFsu4G9rOvW+0sQuuwg/kGb7Ao11VwmpJoCcqHQdp5w\n2wb4mbXFdEgKyV8Fwz11dk9Is0I3k+RVIwcyGAAE3ifuMhxfsWzY6gJ0YjRD+511\nPgOU8V/ehwKBgQCWmVuxaq2e8AXvQkKvSRdDllBvmYMCve6Ra0A3QY68H0PL/biK\nDoWQD4ZlU76F7UNrLiArEFpx2D07geAe466QsYDwo3kAy5LAZ87M6t0QDXCH9wul\neZ5SIoCCNHFSiRbCvrwrU3oWsQ6V9LbqgYo3gcWCjCcmGLEhMFX99BMGGQKBgQDA\nA7LflpMXvFh39t52NHfQKVAgOezMTasAWlA+RK8wiP0oQEMeLWzcJ5/GU+bfDL5p\nL+ZZ1hi8aVn5UzgSsWL1G0boRbbRJVehUhCfgC0Ai8HE3NkCyejEUZ8cyZvtS0ch\n65bbP4mk+QMenafUst0cD5e+ps+uvhEjdRZ0h0JBOQKBgQCFj29t6sJqXTdFZm/Y\nLL4w8NlmjWX9UumVvPUO0gDj6gvHbHtfWLu3Nfbwrji0qeaffqN1O52+8rSGh4RS\nS/9thZVPcqhgd9h2SG9DcNREmmgUOL5KzxHqDvmxbiJILMpokF/79qbnQgj0mLEK\nKIpNrQaHpymcB5GCqR9P+pPWYA==\n-----END PRIVATE KEY-----\n", + "client_email": "google-sheet-read@mesmerizing-app-438408-a9.iam.gserviceaccount.com", + "client_id": "106700027057887032665", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/google-sheet-read%40mesmerizing-app-438408-a9.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +}