初版功能OK
This commit is contained in:
commit
444609027c
6
aar_prj/gamelist/default.aproj
Normal file
6
aar_prj/gamelist/default.aproj
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project ver="10" name="gamelist" libEmbed="true" icon="..." ui="win" output="gamelist.exe" CompanyName="单位名称" FileDescription="gamelist" LegalCopyright="Copyright (C) 作者 2024" ProductName="gamelist" InternalName="gamelist" FileVersion="0.0.0.4" ProductVersion="0.0.0.4" publishDir="/dist/" dstrip="false">
|
||||
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
|
||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"/>
|
||||
<folder name="窗体文件" path="dlg" comment="目录" embed="true"/>
|
||||
</project>
|
51
aar_prj/gamelist/getData.py
Normal file
51
aar_prj/gamelist/getData.py
Normal file
@ -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}")
|
||||
|
||||
|
||||
|
||||
|
17
aar_prj/gamelist/lib/config.aardio
Normal file
17
aar_prj/gamelist/lib/config.aardio
Normal file
@ -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**/
|
241
aar_prj/gamelist/main.aardio
Normal file
241
aar_prj/gamelist/main.aardio
Normal file
@ -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();
|
4
aar_prj/gamelist/run.bat
Normal file
4
aar_prj/gamelist/run.bat
Normal file
@ -0,0 +1,4 @@
|
||||
python .\getData.py
|
||||
|
||||
|
||||
pause
|
13
aar_prj/gamelist/service_account.json
Normal file
13
aar_prj/gamelist/service_account.json
Normal file
@ -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"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user