diff --git a/.github/workflows/idmap.yml b/.github/workflows/idmap.yml new file mode 100644 index 0000000..4e5e214 --- /dev/null +++ b/.github/workflows/idmap.yml @@ -0,0 +1,91 @@ +name: Update ID Map and Version + +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + +jobs: + update-idmap: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests opencc + + - name: Run getIdMap.py + run: | + python tools/getIdMap.py + + - name: Check if idJson.json changed + id: check_changes + run: | + git add -A + if git diff --staged --quiet -- src/idJson.json; then + echo "changes=false" >> $GITHUB_OUTPUT + echo "No changes detected in src/idJson.json" + else + echo "changes=true" >> $GITHUB_OUTPUT + echo "Changes detected in src/idJson.json" + fi + + - name: Get current version from idJson + if: steps.check_changes.outputs.changes == 'true' + id: get_version + run: | + VERSION=$(python -c "import json; print(json.load(open('src/idJson.json', encoding='utf-8'))['version'])") + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "Current version in idJson: $VERSION" + + - name: Bump package.json version + if: steps.check_changes.outputs.changes == 'true' + id: bump_version + run: | + CURRENT_VERSION=$(node -p "require('./package.json').version") + echo "Current package.json version: $CURRENT_VERSION" + + IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION" + MAJOR=${VERSION_PARTS[0]} + MINOR=${VERSION_PARTS[1]} + PATCH=${VERSION_PARTS[2]} + + NEW_PATCH=$((PATCH + 1)) + NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH" + + echo "New package.json version: $NEW_VERSION" + echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT + + node -e " + const fs = require('fs'); + const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8')); + packageJson.version = '$NEW_VERSION'; + fs.writeFileSync('./package.json', JSON.stringify(packageJson, null, 2) + '\n'); + " + + - name: Create and push tag + if: steps.check_changes.outputs.changes == 'true' + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add src/idJson.json package.json + git commit -m "chore: update idJson to ${{ steps.get_version.outputs.version }}" + + TAG_NAME="v${{ steps.bump_version.outputs.new_version }}" + git tag $TAG_NAME + + git push + git push origin $TAG_NAME + + echo "Created and pushed tag: $TAG_NAME" \ No newline at end of file diff --git a/tools/getIdMap.py b/tools/getIdMap.py index e32b49d..6ade88d 100644 --- a/tools/getIdMap.py +++ b/tools/getIdMap.py @@ -6,13 +6,7 @@ import requests from opencc import OpenCC # 初始化 OpenCC 转换器 -cc = OpenCC('s2t') - -# 获取 JSON 数据 -weapon_url = 'https://api.hakush.in/zzz/data/weapon.json' -character_url = 'https://api.hakush.in/zzz/data/character.json' -bangboo_url = 'https://api.hakush.in/zzz/data/bangboo.json' -version_url = 'https://api.hakush.in/zzz/new.json' +cc = OpenCC("s2t") # 语言映射配置 language_map = { @@ -20,45 +14,73 @@ language_map = { "zh-tw": "CHS", # 简体转繁体 "en-us": "EN", "ja-jp": "JA", - "ko-kr": "KO" + "ko-kr": "KO", } # 类型映射配置 type_map = { - "weapon": {"zh-cn": "音擎", "zh-tw": "音擎", "en-us": "W-Engines", "ja-jp": "音動機", "ko-kr": "W-엔진"}, - "character": {"zh-cn": "代理人", "zh-tw": "代理人", "en-us": "Agents", - "ja-jp": "エージェント", "ko-kr": "에이전트"}, - "bangboo": {"zh-cn": "邦布", "zh-tw": "邦布", "en-us": "Bangboo", - "ja-jp": "ボンプ", "ko-kr": "「Bangboo」"} + "weapon": { + "zh-cn": "音擎", + "zh-tw": "音擎", + "en-us": "W-Engines", + "ja-jp": "音動機", + "ko-kr": "W-엔진", + }, + "character": { + "zh-cn": "代理人", + "zh-tw": "代理人", + "en-us": "Agents", + "ja-jp": "エージェント", + "ko-kr": "에이전트", + }, + "bangboo": { + "zh-cn": "邦布", + "zh-tw": "邦布", + "en-us": "Bangboo", + "ja-jp": "ボンプ", + "ko-kr": "「Bangboo」", + }, } + def fetch_json(url): response = requests.get(url, timeout=10) response.raise_for_status() return response.json() + def transform_data(data, item_type): transformed = {lang: {} for lang in language_map.keys()} for id_, item in data.items(): for lang, key in language_map.items(): - name = item[key] if lang != 'zh-tw' else cc.convert(item['CHS']) + name = item[key] if lang != "zh-tw" else cc.convert(item["CHS"]) transformed[lang][id_] = { "name": name, "item_type": type_map[item_type][lang], - "rank_type": item['rank'] + "rank_type": item["rank"], } return transformed + def main(): try: + version_url = "https://api.hakush.in/zzz/new.json" + version_data = fetch_json(version_url) + + latest_version = ( + version_data.get("previous")[0] if version_data.get("previous") else "data" + ) + weapon_url = f"https://api.hakush.in/zzz/{latest_version}/weapon.json" + character_url = f"https://api.hakush.in/zzz/{latest_version}/character.json" + bangboo_url = f"https://api.hakush.in/zzz/{latest_version}/bangboo.json" + weapon_data = fetch_json(weapon_url) character_data = fetch_json(character_url) bangboo_data = fetch_json(bangboo_url) - version_data = fetch_json(version_url) transformed_data = {lang: {} for lang in language_map.keys()} - transformed_data["version"] = version_data["version"] + transformed_data["version"] = latest_version weapon_transformed = transform_data(weapon_data, "weapon") character_transformed = transform_data(character_data, "character") @@ -69,7 +91,7 @@ def main(): transformed_data[lang].update(character_transformed[lang]) transformed_data[lang].update(bangboo_transformed[lang]) - with open('./src/idJson.json', 'w', encoding='utf-8') as f: + with open("./src/idJson.json", "w", encoding="utf-8") as f: json.dump(transformed_data, f, ensure_ascii=False, indent=2) print("Data successfully transformed and saved") @@ -77,5 +99,6 @@ def main(): except requests.RequestException as e: print(f"Error fetching data: {e}") + if __name__ == "__main__": main()