weixin_39944595
2020-12-08 19:15 阅读 0

添加voice.json生成脚本

协助建设一下仓库,写了一个Python脚本,可以直接通过(用Excel)编辑CSV,之后运行Python脚本会在工作路径生成一个autogen-voices.json确认后可重命名替换,方便快速构建站点。

所需CSV和脚本均存在logs文件夹中,其中脚本运行工作路径不限制,生成文件会在运行时的工作路径产生。

大致功能: - category.csv 定义唯一识别名称(key)和翻译 - voices.csv 定义音频文件,按顺序默认o-1,o-2,...(这里o写的静态 还需进一步完善←做输入前缀比较好)

生成的文件会自动Reform成JSON形式,并且重复命名(基于中文名称)会自动标号1 2 3 4 5.

该提问来源于开源项目:zyzsdy/aqua-button

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • weixin_39944595 weixin_39944595 2020-12-08 19:15

    我一开始忘了做pr的准备 所以Commit比较乱,是从现阶段直接拉了一个,把aqua-button的#0bd16e2直接拉下来覆盖了aqua-button分支(大变申

    如果有用的话可以merge后稍作修改~

    点赞 评论 复制链接分享
  • weixin_39551554 weixin_39551554 2020-12-08 19:15

    对于熟练用户来说,通过excel编辑csv再编译生成json并不比直接修改voice.json容易多少。本项目你可以理解为git使用的教学项目,本意就是让你用git完成增加、修改文件,发送pull-request的全过程来增加或修改一个音频,暂时没有添加音频管理后台的打算。

    其实项目初期我们用过voice.json生成器,是直接用文件夹作为分类,文件名作为按钮标题。复制文件到目标目录然后重命名,并把信息写入voice.json的。

    如下图:

    image image

    附:compile.js代码

    js
    const fs = require('fs');
    const path = require('path');
    
    const basePath = '.';
    const distDir = '.dist';
    //建立目标目录
    if(!fs.existsSync(distDir)){
        fs.mkdirSync(distDir);
    }
    
    let globalId = 1;
    
    let result = {
        voices: []
    }
    
    let allDirectory = fs.readdirSync('.');
    for(let d of allDirectory){
        if(d.startsWith('.')) continue;
        console.log("ENTER DIR: " + d);
        let subdPath = path.join(basePath, d);
        let subdInfo = fs.statSync(subdPath);
        if(subdInfo.isDirectory()){
            let subcateInfo = {
                categoryName: d,
                categoryDescription: {
                    "zh-CN": d,
                    "ja-JP": d
                },
                voiceList: []
            }
            let subdContents = fs.readdirSync(subdPath);
            for(let f of subdContents){
                if(!f.endsWith(".mp3")) continue;
                let objectPath = path.join(subdPath, f);
                let distFileName = `a-${globalId++}`;
                let distRelPath = distFileName + ".mp3";
                let distPath = path.join(distDir, distRelPath);
                let objectInfo = {
                    name: distFileName,
                    path: distRelPath,
                    description: {
                        "zh-CN": f,
                        "ja-JP": f
                    }
                }
                subcateInfo.voiceList.push(objectInfo);
                console.log(">>" + objectPath + "-->>--" + distPath);
                fs.renameSync(objectPath, distPath);
            }
            result.voices.push(subcateInfo);
        }
    }
    
    //写入result到voices.json
    let manifestPath = path.join(distDir, "voices.json");
    let jsonString = JSON.stringify(result, null, 4);
    fs.writeFileSync(manifestPath, jsonString, 'utf-8');
    console.log("FINISH!!!");
    
    点赞 评论 复制链接分享
  • weixin_39944595 weixin_39944595 2020-12-08 19:15

    理解理解

    主要考虑到对新人建站或许不太友好 出于照顾萌新的考虑写了(x (主要我这边帮我打杂的萌新一直摸 我以为是JSON不友好)x 不过对已经建好的进行增补确实JSON来得更快 问题是我们这边实际上200多条x让新人写有够困难

    另外借这个pr再询问一下有没有去做在线“增删改查”的打算 (比如要授权某人的话 去在后台生成一个5min左右的带权限的token之类的) 然后定期从服务器后台去拉上传的音频在仓库归档 这样子?

    (虽然我觉得这样就没法白嫖pages就是了x

    点赞 评论 复制链接分享
  • weixin_39551554 weixin_39551554 2020-12-08 19:15

    需要后端的动态项目有动态项目的做法。这是个静态项目,目标是在服务器上静态部署。目前没有做成动态项目的打算。如果今后要做可能会在其他项目上做。

    如果要做的话,我还是建议使用数据库。这样可以简单的做一个用户系统,以及音频索引。

    点赞 评论 复制链接分享

相关推荐