初版功能OK

This commit is contained in:
sunbeam 2024-11-14 14:53:37 +08:00
commit 444609027c
6 changed files with 332 additions and 0 deletions

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

View 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}")

View 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**/

View 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
View File

@ -0,0 +1,4 @@
python .\getData.py
pause

View 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"
}