27 Commits

Author SHA1 Message Date
github-actions[bot]
1590f5581f Updated files: README.md, articles/3672.json, articles_all.xml, articles_latest.xml, html/3672.html 2025-11-26 15:03:16 +00:00
github-actions[bot]
ec003ebfcb Updated files: README.md, articles/3648.json, articles/3657.json, articles/3664.json, articles/3665.json, articles_all.xml, articles_latest.xml, html/3648.html, html/3657.html, html/3664.html, html/3665.html 2025-11-20 15:03:14 +00:00
github-actions[bot]
62d212be1e Updated files: README.md, articles/3616.json, articles/3623.json, articles/3631.json, articles/3637.json, articles/3639.json, articles_all.xml, articles_latest.xml, html/3616.html, html/3623.html, html/3631.html, html/3637.html, html/3639.html 2025-11-19 15:03:33 +00:00
github-actions[bot]
a2ebaadc00 Updated files: README.md, articles/3613.json, articles_all.xml, articles_latest.xml, html/3613.html 2025-11-18 15:03:17 +00:00
github-actions[bot]
bec55b241b Updated files: README.md, articles/3603.json, articles_all.xml, articles_latest.xml, html/3603.html 2025-11-17 15:03:50 +00:00
github-actions[bot]
bba567c147 Updated files: README.md, articles/3595.json, articles_all.xml, articles_latest.xml, html/3595.html 2025-11-16 15:02:59 +00:00
github-actions[bot]
73caaa06f7 Updated files: README.md, articles/3583.json, articles/3588.json, articles/3592.json, articles_all.xml, articles_latest.xml, html/3583.html, html/3588.html, html/3592.html 2025-11-15 15:03:02 +00:00
github-actions[bot]
3a1b5f343d Updated files: README.md, articles/3572.json, articles_all.xml, articles_latest.xml, html/3572.html 2025-11-14 15:03:11 +00:00
github-actions[bot]
3e19e06893 Updated files: README.md, articles/3554.json, articles_all.xml, articles_latest.xml, html/3554.html 2025-11-11 15:03:25 +00:00
github-actions[bot]
27f2db72bd Updated files: README.md, articles/3549.json, articles_all.xml, articles_latest.xml, html/3549.html 2025-11-07 15:03:05 +00:00
github-actions[bot]
654594d608 Updated files: README.md, articles/3547.json, articles_all.xml, articles_latest.xml, html/3547.html 2025-11-06 15:03:36 +00:00
github-actions[bot]
930db9b97c Updated files: README.md, articles/3538.json, articles/3541.json, articles_all.xml, articles_latest.xml, html/3538.html, html/3541.html 2025-11-05 15:03:30 +00:00
49abdd8160 Switch GitHub Actions workflow runner to ubuntu-slim 2025-11-04 22:51:38 +01:00
fe3181d9a3 Switch GitHub Actions workflow runner to ubuntu-latest 2025-11-04 22:50:00 +01:00
6acf030e74 Reduce logging verbosity in scrape.py by setting level to INFO 2025-11-04 22:47:11 +01:00
7f102a30ed Use compiled regex patterns in scrape.py and replace ad-hoc re.sub calls
- Add module-level compiled regexes (DISCORD_LINK_PATTERN, URL_PREFIX_PATTERN,
  NON_BREAKING_SPACE_PATTERN, EMPTY_CODE_BLOCK_PATTERN, SQUARE_BRACKETS_PATTERN,
  BALL_PATTERN, REFERENCE_MARK_PATTERN, ESCAPED_STAR_PATTERN,
  CIRCLED_NUMBER_PATTERNS)
- Use .sub on those compiled patterns in format_discord_links and
  generate_atom_feed instead of repeated re.sub calls
- Consolidate circled-number replacement and simplify escaped-star handling
- Improves readability and avoids recompiling regexes on each use
2025-11-04 22:45:49 +01:00
github-actions[bot]
27b14909df Updated files: articles_all.xml 2025-11-04 21:21:09 +00:00
b2d4ad5946 Remove actions/setup-python step and enable-cache option from CI workflow 2025-11-04 22:20:02 +01:00
8b505af889 Switch GitHub Actions workflow runner to ubuntu-slim 2025-11-04 22:13:08 +01:00
a09ea0bd9a Use anyio.Path for async filesystem ops, tighten formatting, and harden mdformat
- Switch to anyio.Path for non-blocking filesystem operations (mkdir, glob)
  so article directory creation and listing are async-friendly.
- Replace blocking sync glob with an async comprehension to build existing_files.
- Harden mdformat usage: call formatter inside try/except and fall back to
  unformatted markdown on error to avoid crashes from unsupported options.
- Set logging to DEBUG for more verbose output during runs.
- Miscellaneous cleanups: reformat imports/long lists, collapse multi-line
  constructs, and simplify timestamp parsing/formatting.
2025-11-04 22:11:59 +01:00
192615fddb Bump Python requirement to 3.14, relax markdown pin, and add Ruff config
- Update pyproject.toml to require Python >=3.14
- Remove explicit markdown minimum version (use unpinned "markdown")
- Add comprehensive [tool.ruff] configuration (select, pydocstyle convention, ignored rules, per-file ignores)
- Add Ruff isort setting to force single-line imports
2025-11-04 22:10:19 +01:00
572b863adb Run scraper every 15 minutes, bump workflow to Python 3.14, and use uv sync --all-groups -U 2025-11-04 21:56:48 +01:00
92078ed39a Remove uv.lock
Delete generated dependency lockfile (uv.lock) that should not be tracked.
2025-11-04 21:55:39 +01:00
282a5fdf75 Replace .gitignore with comprehensive Python template and ignore articles/ArticleMenu.json 2025-11-04 21:55:22 +01:00
github-actions[bot]
060fb9c1ac Updated files: README.md, articles/3532.json, articles_all.xml, articles_latest.xml, html/3532.html 2025-10-30 04:02:41 +00:00
github-actions[bot]
47a39bd061 Updated files: README.md, articles/3485.json, articles_all.xml, articles_latest.xml, html/3485.html 2025-10-29 10:03:00 +00:00
github-actions[bot]
9a8bf9494c Updated files: README.md, articles/3509.json, articles/3516.json, articles/3523.json, articles_all.xml, articles_latest.xml, html/3509.html, html/3516.html, html/3523.html 2025-10-29 09:02:44 +00:00
62 changed files with 6126 additions and 1258 deletions

View File

@@ -2,35 +2,28 @@ name: Run Scraper
on:
schedule:
- cron: '0 * * * *' # Every hour
- cron: "0 */15 * * *" # Every 15 minutes
workflow_dispatch:
push:
paths:
- 'scrape.py'
- '.github/workflows/main.yml'
- "scrape.py"
- ".github/workflows/main.yml"
jobs:
scrape:
runs-on: ubuntu-latest
runs-on: ubuntu-slim
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install uv
id: setup-uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
- name: Install dependencies
run: uv sync
run: uv sync --all-groups -U
- name: Run script
run: uv run python scrape.py

217
.gitignore vendored
View File

@@ -1 +1,218 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
# Pipfile.lock
# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
uv.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
# poetry.lock
# poetry.toml
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
# pdm.lock
# pdm.toml
.pdm-python
.pdm-build/
# pixi
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
# pixi.lock
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# Redis
*.rdb
*.aof
*.pid
# RabbitMQ
mnesia/
rabbitmq/
rabbitmq-data/
# ActiveMQ
activemq-data/
# SageMath parsed files
*.sage.py
# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
# .idea/
# Abstra
# Abstra is an AI-powered process automation framework.
# Ignore directories containing user credentials, local state, and settings.
# Learn more at https://abstra.io/docs
.abstra/
# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/
# Ruff stuff:
.ruff_cache/
# PyPI configuration file
.pypirc
# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/
# Streamlit
.streamlit/secrets.toml
articles/ArticleMenu.json

View File

@@ -11,8 +11,35 @@ Stay updated with the latest Wuthering Waves news through these RSS feeds:
## Articles
- [[Tactical Simulacra: Off Tune] Featured Combat Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3672) [[json]](articles/3672.json)
- [V2.8 Wuthering Waves Battle Rush](https://wutheringwaves.kurogames.com/en/main/news/detail/3665) [[json]](articles/3665.json)
- [Wuthering Waves Fan Creation Event "To the City Set in Amber" is now live!](https://wutheringwaves.kurogames.com/en/main/news/detail/3664) [[json]](articles/3664.json)
- [Patch Notes for Version 2.8: To the City Set in Amber](https://wutheringwaves.kurogames.com/en/main/news/detail/3657) [[json]](articles/3657.json)
- [Wuthering Waves Fan Creation Event Winners Reveal](https://wutheringwaves.kurogames.com/en/main/news/detail/3648) [[json]](articles/3648.json)
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Luminous Hymn](https://wutheringwaves.kurogames.com/en/main/news/detail/3639) [[json]](articles/3639.json)
- [Resonator Review | Graceful Luminescence—Phoebe](https://wutheringwaves.kurogames.com/en/main/news/detail/3637) [[json]](articles/3637.json)
- [[With Hushed Whispers] Featured Resonator Convene: Boosted Drop Rate for Phoebe](https://wutheringwaves.kurogames.com/en/main/news/detail/3631) [[json]](articles/3631.json)
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Kumokiri](https://wutheringwaves.kurogames.com/en/main/news/detail/3623) [[json]](articles/3623.json)
- [[Horizon of Dawnbreak] Featured Resonator Convene: Boosted Drop Rate for Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3616) [[json]](articles/3616.json)
- [Wuthering Waves Update Content | Version 2.8 "To the City Set in Amber" Planned for Release on November 20th (UTC+8)](https://wutheringwaves.kurogames.com/en/main/news/detail/3613) [[json]](articles/3613.json)
- [Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!](https://wutheringwaves.kurogames.com/en/main/news/detail/3603) [[json]](articles/3603.json)
- [Profile Reveal | Eye of Unraveling — Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3595) [[json]](articles/3595.json)
- [Post-Lament Anthropocene: Stars Intertwined | Chisa](https://wutheringwaves.kurogames.com/en/main/news/detail/3592) [[json]](articles/3592.json)
- [Zani's Deluxe Outfit "Downtown Repose"](https://wutheringwaves.kurogames.com/en/main/news/detail/3588) [[json]](articles/3588.json)
- [Wuthering Waves Version 2.8 Update Maintenance Notice](https://wutheringwaves.kurogames.com/en/main/news/detail/3583) [[json]](articles/3583.json)
- [Wuthering Waves Version Preview | Version 2.8 "To the City Set in Amber" Scheduled for Release on November 20th (UTC+8)](https://wutheringwaves.kurogames.com/en/main/news/detail/3572) [[json]](articles/3572.json)
- [[Chord Cleansing] Limited-Time Echo Double Drop Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3554) [[json]](articles/3554.json)
- [Insider Channel: Special Program | Signs of Imprisonment: Part Three](https://wutheringwaves.kurogames.com/en/main/news/detail/3549) [[json]](articles/3549.json)
- [Insider Channel: Special Program | Signs of Imprisonment: Part Two](https://wutheringwaves.kurogames.com/en/main/news/detail/3547) [[json]](articles/3547.json)
- [[Lollo Campaign: Ice Savior] Featured Commission Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3541) [[json]](articles/3541.json)
- [Insider Channel: Special Program | Signs of Imprisonment: Part One](https://wutheringwaves.kurogames.com/en/main/news/detail/3538) [[json]](articles/3538.json)
- [Tidal Photography: Capture Your Action Highlights of Resonators!](https://wutheringwaves.kurogames.com/en/main/news/detail/3532) [[json]](articles/3532.json)
- [[Freeze Frame: Action Highlights] Combat Photography Event](https://wutheringwaves.kurogames.com/en/main/news/detail/3523) [[json]](articles/3523.json)
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Blazing Justice](https://wutheringwaves.kurogames.com/en/main/news/detail/3516) [[json]](articles/3516.json)
- [[Between Light and Shadow] Featured Resonator Convene: Boosted Drop Rate for Zani](https://wutheringwaves.kurogames.com/en/main/news/detail/3509) [[json]](articles/3509.json)
- [[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Emerald Sentence](https://wutheringwaves.kurogames.com/en/main/news/detail/3501) [[json]](articles/3501.json)
- [[Wanderer Knows No Far and Near] Featured Resonator Convene: Boosted Drop Rate for Qiuyuan](https://wutheringwaves.kurogames.com/en/main/news/detail/3494) [[json]](articles/3494.json)
- [Resonator Review | Scorched Radiance — Zani](https://wutheringwaves.kurogames.com/en/main/news/detail/3485) [[json]](articles/3485.json)
- [Upcoming Events in Wuthering Waves Version 2.7](https://wutheringwaves.kurogames.com/en/main/news/detail/3484) [[json]](articles/3484.json)
- [Profile Reveal | Bambooscape — Qiuyuan](https://wutheringwaves.kurogames.com/en/main/news/detail/3479) [[json]](articles/3479.json)
- [Post-Lament Anthropocene: Stars Intertwined | Qiuyuan](https://wutheringwaves.kurogames.com/en/main/news/detail/3478) [[json]](articles/3478.json)

14
articles/3485.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">A member of Averardo Vault's security team and holder of \"Best Employee\" for longer than she cares to count. She has made plenty of plans for her free time, but for now, her biggest mission is simple: clocking out on time.</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/1p23c3avyjbaxdwj2s-1761559903342.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/ut48mli6z943jg1gux-1761559915008.jpg\" width=\"800\" height=\"6531\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/pa8izuj5b5f58mywsv-1761559938351.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3485,
"articleTitle": "Resonator Review | Scorched Radiance — Zani",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-10-29 18:00:00",
"articleDesc": "",
"createTime": "2025-10-27 18:13:40",
"suggestCover": "",
"top": 0
}

15
articles/3509.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/d23ofj7bdqidvomcuz-1761725284376.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Resonator: Zani, 4-Star Resonators: Yangyang, Taoqi, and Danjin receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-10-30 10:00 - 2025-11-19 11:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Between Light and Shadow] is a Featured Resonator Convene event banner. Use Radiant Tide to Convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Zani is exclusive to the [Between Light and Shadow] Featured Resonator Convene and will not be available by other means once the event ends.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Zani's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.</span><br><span style=\"font-size: 14pt;\">- During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleCover": "",
"articleId": 3509,
"articleTitle": "[Between Light and Shadow] Featured Resonator Convene: Boosted Drop Rate for Zani",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-10-29 11:10:00",
"articleDesc": "",
"createTime": "2025-10-29 16:08:18",
"suggestCover": "",
"top": 0
}

15
articles/3516.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/8liq7pqi13u6nrqe86-1761725602807.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Weapon: Blazing Justice, 4-Star Weapons: Endless Collapse, Hollow Mirage, and Dauntless Evernight receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-10-30 10:00 - 2025-11-19 11:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Absolute Pulsation] is a Featured Weapon Convene event banner.&nbsp;</span><br><span style=\"font-size: 14pt;\">- Use Forging Tide to Convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.</span><br><span style=\"font-size: 14pt;\">- The 5-Star Weapon you Convene is guaranteed to be Blazing Justice.</span><br><span style=\"font-size: 14pt;\">- Featured Weapon Blazing Justice is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleCover": "",
"articleId": 3516,
"articleTitle": "[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Blazing Justice",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-10-29 11:15:00",
"articleDesc": "",
"createTime": "2025-10-29 16:13:41",
"suggestCover": "",
"top": 0
}

15
articles/3523.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/mng4tbka6xst41ypkj-1761725914978.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">Behold! Wutherium Film Studio Special Feature: Resonators in Combat Edition has officially launched!</span><br><span style=\"font-size: 14pt;\">Capture Resonators' exhilarating moments during combat, then submit the photos to Fulmine and C-MOSS to earn plenty of rewards!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-10-30 10:00 - 2025-11-19 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Rewards✦</span><br><span style=\"font-size: 14pt;\">Astrite x400, Premium Resonance Potion x15, Premium Energy Core x10, Premium Sealed Tube x10, Forgery Advanced Supply x35, Advanced Enclosure Tank x70, Shell Credit x280000</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 14 and complete Main Quest Chapter II Prologue \"\"Through the Sea Thou Break.\"\"</span><br><br><span style=\"font-size: 14pt;\">✦Event Details✦</span><br><span style=\"font-size: 14pt;\">- During the event, you will be given different daily Freeze Frame challenges, each with Normal and Hard modes. Complete Normal Mode to unlock Hard Mode for that challenge and the Normal Mode for the next Freeze Frame challenge.</span><br><span style=\"font-size: 14pt;\">- Each Freeze Frame challenge will center on a specific Resonator. Your goal is to capture highlights of these Resonators in combat by meeting specific objectives. Completing these tasks earns you rewards.</span><br><span style=\"font-size: 14pt;\">- Any unclaimed rewards will be sent via Mail the next time you log in within 30 days after the event ends.</span></p>\n</div>",
"articleCover": "",
"articleId": 3523,
"articleTitle": "[Freeze Frame: Action Highlights] Combat Photography Event",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-10-29 16:00:00",
"articleDesc": "",
"createTime": "2025-10-29 16:18:48",
"suggestCover": "",
"top": 0
}

14
articles/3532.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Freeze Frame: Action Highlights - Combat Photography Event is now underway!</div>\n</div>\n</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Capture Resonators' exhilarating moments during combat with your camera!</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">✦Duration✦</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">From now until 2025-11-19 23:59 (UTC+8)</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"5\" data-line=\"true\">✦How to Submit✦</div>\n<div data-zone-id=\"0\" data-line-index=\"6\" data-line=\"true\">You can submit your work in the following ways:</div>\n<div data-zone-id=\"0\" data-line-index=\"7\" data-line=\"true\">1. Use the [Settings - Camera] feature in Wuthering Waves or take a screenshot to capture in-game footage. Apply your preferred filter and frame the Resonators' battle moments.</div>\n<div data-zone-id=\"0\" data-line-index=\"8\" data-line=\"true\">2. Join the \"Freeze Frame: Action Highlights\" Combat Photography Event. Choose your desired Resonator and use the Slow Motion Gadget to capture their battle scenes.</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\">Post your work with both hashtags #WutheringWaves and #WuWaMoment included and join the event.</div>\n<div data-zone-id=\"0\" data-line-index=\"10\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"11\" data-line=\"true\">✦Rewards✦</div>\n<div data-zone-id=\"0\" data-line-index=\"12\" data-line=\"true\">We'll select winners based on the quality and statistics of the entries. Winners will receive Astrites and cash incentives!</div>\n<div data-zone-id=\"0\" data-line-index=\"13\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"14\" data-line=\"true\">Check the image for more detailed info and proceed to submit: https://forms.gle/8foXGMp3p9pzj1Tb9</div>\n<div data-zone-id=\"0\" data-line-index=\"14\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"14\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/e6ytovb1kgx824jkwo-1761735233381.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n<div data-zone-id=\"0\" data-line-index=\"14\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"14\" data-line=\"true\">&nbsp;</div>\n</div>\n</div>",
"articleId": 3532,
"articleTitle": "Tidal Photography: Capture Your Action Highlights of Resonators!",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-10-30 12:00:00",
"articleDesc": "",
"createTime": "2025-10-29 18:55:04",
"suggestCover": "",
"top": 0
}

14
articles/3538.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency.</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/mh9nwk3fq095xijyrw-1762311677850.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3538,
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part One",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-05 12:00:00",
"articleDesc": "",
"createTime": "2025-11-05 11:01:50",
"suggestCover": "",
"top": 0
}

15
articles/3541.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/vcqovqgon5keki591t-1762312534821.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">The Lollo Campaign is facing an unexpected crisis! To save Maji's old reliable delivery legs, and to keep those convenient services running, help him complete his new program, Lollo Ice Drinks!</span><br><span style=\"font-size: 14pt;\">Complete the campaigns to claim your Lollo Stamps&mdash;a gift of gratitude from Lollo Logistics. Lollo Stamps can be exchanged for Lollo Helper special deliveries.</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-06 04:00 - 2025-11-19 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Rewards✦</span><br><span style=\"font-size: 14pt;\">Astrite x400, Lustrous Tide x5, Premium Enclosure Tank x5, Forgery Premium Supply x10, Crystal Solvent x5, Shell Credit x340000, and other Materials.</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 14 and complete Main Quest Chapter II Act V \"\"Shadow of Glory.\"\"</span><br><br><span style=\"font-size: 14pt;\">✦Event Details✦</span><br><span style=\"font-size: 14pt;\">- During the event, complete Lollo Campaigns to obtain Lollo Stamps.</span><br><span style=\"font-size: 14pt;\">- Each Lollo Stamp can be exchanged for a Lollo Helper special delivery.</span><br><span style=\"font-size: 14pt;\">- There are 3 Inventories for the Lollo Helper special deliveries. Once you collect all deliveries in an Inventory, the next Inventory will be unlocked.</span><br><span style=\"font-size: 14pt;\">- If you win the Lollo Express special delivery service, you can claim all deliveries in the current Inventory.</span><br><br><span style=\"font-size: 14pt;\">※After the event ends, any remaining Lollo Helper special delivery will become unavailable, and any unused Lollo Stamp will be cleared. Please take note of the event period and participate in the event accordingly.</span></p>\n</div>",
"articleCover": "",
"articleId": 3541,
"articleTitle": "[Lollo Campaign: Ice Savior] Featured Commission Event",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-11-05 11:00:00",
"articleDesc": "",
"createTime": "2025-11-05 11:15:55",
"suggestCover": "",
"top": 0
}

14
articles/3547.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...<img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/e6d739gbrr8jsp3knj-1762345950424.jpg\" width=\"800\" height=\"17602\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3547,
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part Two",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-06 12:00:00",
"articleDesc": "",
"createTime": "2025-11-05 20:33:41",
"suggestCover": "",
"top": 0
}

15
articles/3549.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Beneath the surface of an odd case, hidden motives lurked. What appeared to be a routine order quietly signaled trouble was on the horizon.</div>\n</div>\n</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762444800000/fgbqbrqeirp5emnbg4-1762482878492.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>",
"articleCover": "",
"articleId": 3549,
"articleTitle": "Insider Channel: Special Program | Signs of Imprisonment: Part Three",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-11-07 12:00:00",
"articleDesc": "",
"createTime": "2025-11-06 15:15:18",
"suggestCover": "",
"top": 0
}

14
articles/3554.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1762704000000/7hqt0oebqm8w5fr18d-1762764686796.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">The Tacet Fields are experiencing a surge in energy due to the Waveworn Phenomenon.</span><br><span style=\"font-size: 14pt;\">Use the Waveplates to maximize your rewards from the Tacetite Blooms!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-12 04:00 - 2025-11-19 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 19.</span><br><br><span style=\"font-size: 14pt;\">✦Details✦</span><br><span style=\"font-size: 14pt;\">- Complete Tacet Suppression challenges during the event and spend Waveplates for double rewards.</span><br><span style=\"font-size: 14pt;\">- During [Chord Cleansing], you can claim double rewards 3 times a day, and the remaining double rewards claims can be viewed on the [Chord Cleansing] event page.</span><br><span style=\"font-size: 14pt;\">- During [Chord Cleansing], double rewards claims refresh daily at 04:00 (server time).</span></p>\n</div>",
"articleId": 3554,
"articleTitle": "[Chord Cleansing] Limited-Time Echo Double Drop Event",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-11 11:00:00",
"articleDesc": "",
"createTime": "2025-11-10 16:51:46",
"suggestCover": "",
"top": 0
}

14
articles/3572.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">The Preview Special Broadcast has concluded. Take a look back at all these exciting updates:</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/80lk8p3zq0f06k7meo-1763102612556.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/m6odgabp8gfpmbc937-1763102627210.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0gy70in8ksod74rbj9-1763102656359.jpg\" width=\"800\" height=\"8404\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3572,
"articleTitle": "Wuthering Waves Version Preview | Version 2.8 \"To the City Set in Amber\" Scheduled for Release on November 20th (UTC+8)",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-14 20:00:00",
"articleDesc": "",
"createTime": "2025-11-14 14:44:48",
"suggestCover": "",
"top": 0
}

14
articles/3583.json generated Normal file
View File

File diff suppressed because one or more lines are too long

14
articles/3588.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">\"She leans casually against the railing, her sweater soft against the light, appearing equally elegant as she is relaxed. Changing up the style every now and then isn't so bad.</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">Turning slightly, Zani looks down at the city stretching beneath her. The afternoon sunlight spills over the buildings, their outlines shimmering in the glow. She gazes quietly, letting the city's clamor become the backdrop to this moment of ease.\"</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Zani's Deluxe Outfit \"Downtown Repose\" will become available once Version 2.8 goes live. Get a sneak peek now!</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"5\" data-line=\"true\">✦How to Obtain✦</div>\n<div data-zone-id=\"0\" data-line-index=\"6\" data-line=\"true\">Zani's Deluxe Outfit \"Downtown Repose\" will be made permanently available in the Store once Version 2.8 goes live.</div>\n<div data-zone-id=\"0\" data-line-index=\"7\" data-line=\"true\">Purchase the Outfit during Version 2.8 at a discount, for 1980 Lunites only. After Version 2.8 ends, the Outfit will cost 2480 Lunites.</div>\n<div data-zone-id=\"0\" data-line-index=\"8\" data-line=\"true\">From the time Version 2.8 goes live until 2025-12-24 11:59 (server time), there will be a trial event where you can try out Downtown Repose. Complete the trial event to claim rewards.<img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/wq3ziy2rccqu97o1if-1763125379579.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/fwcbp3rmid4meihbhv-1763125399619.jpg\" width=\"800\" height=\"1272\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/2de1n4u4vysp2so5r9-1763125636047.gif\" width=\"800\" height=\"1421\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/3m6k2b33r2f1nkwbhm-1763125656263.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/qrxyfz8s2ocbx9cs9h-1763125699983.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/if07fhjaf7w30ladck-1763125716913.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zo43n9evpdy3uo4kol-1763125732828.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zzy2qnd222ubs9m1ll-1763125745756.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3588,
"articleTitle": "Zani's Deluxe Outfit \"Downtown Repose\"",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-15 11:00:00",
"articleDesc": "",
"createTime": "2025-11-14 20:42:36",
"suggestCover": "",
"top": 0
}

14
articles/3592.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">\"Kuchiba Chisa. Tactical Development Program, Department of Engineering, Startorch Academy. Forte Specialization: structural dissection... Apologies, this might not be the time for formalities.\"&mdash;Chisa</div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8mo5g0ez8yh4tqdh2b-1763126375972.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/7wl7dhwcf6rnnb75aj-1763126391523.jpg\" width=\"800\" height=\"5012\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/mvost8tdegosefrf15-1763126414477.jpg\" width=\"800\" height=\"3150\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/nzu8onk6t8fjbcad4z-1763126466514.jpg\" width=\"800\" height=\"3134\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0dels41peppqosldca-1763126486040.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/k844e8vq4umkf12pxo-1763126608314.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/l5bqkqgkgvtzt12419-1763126625486.gif\" width=\"800\" height=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8xwma7cxh5kmtm38g2-1763126682626.gif\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/h0smpxd26tov8ip4ix-1763126696478.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3592,
"articleTitle": "Post-Lament Anthropocene: Stars Intertwined | Chisa",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-15 18:00:00",
"articleDesc": "",
"createTime": "2025-11-14 21:10:52",
"suggestCover": "",
"top": 0
}

14
articles/3595.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Loading Data&gt;&gt;&gt;</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">✦Chisa✦</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">\"Just an ordinary student.\"</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Calmly, she introduces herself, a faint iridescent shimmer flickering in her eyes. Again, the structures of the world reveal themselves in her vision. Narrowing her eyes, she singles out the very thread that tugs at life itself.</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/tcz1fpjdqkq0ra8ntk-1763198623393.jpg\" width=\"800\" height=\"1422\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/hpr01unab7lqnskowi-1763198642805.jpg\" width=\"800\" height=\"1556\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/jpn5h8dpbq401v7eyh-1763198658324.gif\" width=\"800\" height=\"1455\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/y3dx66ba9y3f6vk5yk-1763198671685.gif\" width=\"800\" height=\"1357\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bzxanra03of92wdjef-1763198685129.gif\" width=\"800\" height=\"1230\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/rfbhh1lqk2tm8e9qpt-1763198698636.gif\" width=\"800\" height=\"1775\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/m51y3ba8bpelsza8zt-1763198742175.gif\" width=\"800\" height=\"1081\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bwss4p2fk24t05vpw7-1763198756676.gif\" width=\"800\" height=\"1258\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bvkfihh6czehzhx87t-1763208460141.jpg\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>",
"articleId": 3595,
"articleTitle": "Profile Reveal | Eye of Unraveling — Chisa",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-16 11:05:00",
"articleDesc": "",
"createTime": "2025-11-15 17:26:41",
"suggestCover": "",
"top": 0
}

14
articles/3603.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">✦Duration✦</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">Version 2.8 update - 2025-12-24 11:59 (server time)</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"5\" data-line=\"true\">✦Rewards✦</div>\n<div data-zone-id=\"0\" data-line-index=\"6\" data-line=\"true\">Astrite x1200, Title: Honami Doom Walker, Avatar: Post-Doomsday Coffee, Phantom: The False Sovereign, Modifier, Premium Tuner, Premium Enclosure Tank, Shell Credit, and other Materials.</div>\n<div data-zone-id=\"0\" data-line-index=\"7\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"8\" data-line=\"true\">✦As a Permanent Event✦</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\">This event offers two types of rewards: Limited-time Rewards and Standard Rewards. When the initial period ends, the event will continue as a Permanent Event. The Limited-time Rewards will no longer be available when the event becomes a Permanent Event. You can participate in the Permanent Event to win Standard Rewards.</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"9\" data-line=\"true\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/kocst41ot3jkzu7tsq-1763348669828.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/c2stvv7raa0p56dg21-1763348699248.jpg\" width=\"800\" height=\"2593\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/xcg1t72xos2hlhapkj-1763348717347.jpg\" width=\"800\" height=\"4000\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/p1ty9w5roazf7i2vpg-1763348733832.jpg\" width=\"800\" height=\"3198\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/oo1dbkz57j7a3tn7wo-1763348746651.jpg\" width=\"800\" height=\"3198\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>",
"articleId": 3603,
"articleTitle": "Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-17 18:00:00",
"articleDesc": "",
"createTime": "2025-11-17 11:06:15",
"suggestCover": "",
"top": 0
}

14
articles/3613.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div>\n<div>\n<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Wuthering Waves Update Content | Version 2.8 \"To the City Set in Amber\" Planned for Release on November 20th (UTC+8)</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">Here's the event calendar for Version 2.8. Check it out for a quick overview of the event schedule! Full details about the update content can be viewed on our official website&mdash;be sure to take a look!</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">#WutheringWaves<br><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/jdw0n19tqkiq3h7ztp-1763448460525.jpg\" width=\"800\" height=\"6535\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/46ywdxjpf60zbqsugc-1763448496990.jpg\" width=\"800\" height=\"10953\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/3yu1888i3fxnfdlfbc-1763448512501.jpg\" width=\"800\" height=\"6087\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/abckxxubxu4vxt4eg6-1763448526782.jpg\" width=\"800\" height=\"5077\" data-media-source=\"production_G152_en\" data-desc=\"succ\"></div>\n</div>\n</div>",
"articleId": 3613,
"articleTitle": "Wuthering Waves Update Content | Version 2.8 \"To the City Set in Amber\" Planned for Release on November 20th (UTC+8)",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-18 18:00:00",
"articleDesc": "",
"createTime": "2025-11-18 14:49:10",
"suggestCover": "",
"top": 0
}

14
articles/3616.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/alol7tdeppuhk6xejy-1763520543500.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Resonator: Chisa, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Horizon of Dawnbreak] is a Featured Resonator Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Chisa is exclusive to the [Horizon of Dawnbreak] Featured Resonator Convene and will not be available by other means once the event ends.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Chisa's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.</span><br><span style=\"font-size: 14pt;\">- During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleId": 3616,
"articleTitle": "[Horizon of Dawnbreak] Featured Resonator Convene: Boosted Drop Rate for Chisa",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-19 11:00:00",
"articleDesc": "",
"createTime": "2025-11-19 10:49:21",
"suggestCover": "",
"top": 0
}

14
articles/3623.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/jfm0n54ovtdyqru36k-1763521065372.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Weapon: Kumokiri, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Absolute Pulsation] is a Featured Weapon Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.</span><br><span style=\"font-size: 14pt;\">- The 5-Star Weapon you Convene is guaranteed to be Kumokiri.</span><br><span style=\"font-size: 14pt;\">- Featured Weapon Kumokiri is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleId": 3623,
"articleTitle": "[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Kumokiri",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-19 11:05:00",
"articleDesc": "",
"createTime": "2025-11-19 10:58:01",
"suggestCover": "",
"top": 0
}

15
articles/3631.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/twbu78z48nmmtaaftq-1763522034373.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Resonator: Phoebe, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [With Hushed Whispers] is a Featured Resonator Convene event banner</span><br><span style=\"font-size: 14pt;\">- Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Phoebe is exclusive to the [With Hushed Whispers] Featured Resonator Convene and will not be available by other means once the event ends.</span><br><span style=\"font-size: 14pt;\">- Featured Resonator Phoebe's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.</span><br><span style=\"font-size: 14pt;\">- During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleCover": "",
"articleId": 3631,
"articleTitle": "[With Hushed Whispers] Featured Resonator Convene: Boosted Drop Rate for Phoebe",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-11-19 11:10:00",
"articleDesc": "",
"createTime": "2025-11-19 11:14:15",
"suggestCover": "",
"top": 0
}

14
articles/3637.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div data-zone-id=\"0\" data-line-index=\"0\" data-line=\"true\">Resonator Review | Graceful Luminescence&mdash;Phoebe</div>\n<div data-zone-id=\"0\" data-line-index=\"1\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"2\" data-line=\"true\">Phoebe, Acolyte of the Order of the Deep, is a young woman of quiet devotion. With a kind heart, she fulfills her duties with unwavering diligence. Her prayers, like the light she carries, offer comfort and peace to all.</div>\n<div data-zone-id=\"0\" data-line-index=\"3\" data-line=\"true\">&nbsp;</div>\n<div data-zone-id=\"0\" data-line-index=\"4\" data-line=\"true\">#WutheringWaves #Phoebe<br><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9edo53agt26cns0661-1763522290371.jpg\" width=\"800\" height=\"6020\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tynu2pe3b4mwujro7t-1763522307473.jpg\" width=\"800\" height=\"9397\" data-media-source=\"production_G152_en\" data-desc=\"succ\"><br><br></div>",
"articleId": 3637,
"articleTitle": "Resonator Review | Graceful Luminescence—Phoebe",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-19 19:00:00",
"articleDesc": "",
"createTime": "2025-11-19 11:18:53",
"suggestCover": "",
"top": 0
}

15
articles/3639.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/zxey5yua1ksodf8nqs-1763522369708.jpg\" width=\"800\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">During the event, 5-Star Weapon: Luminous Hymn, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">Version 2.8 update - 2025-12-11 09:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 8 or complete the combat trial in \"\"First Resonance\"\" and activate the Convene function.</span><br><br><span style=\"font-size: 14pt;\">✦Convene Rules✦</span><br><span style=\"font-size: 14pt;\">- [Absolute Pulsation] is a Featured Weapon Convene event banner.</span><br><span style=\"font-size: 14pt;\">- Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.</span><br><span style=\"font-size: 14pt;\">- The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.</span><br><span style=\"font-size: 14pt;\">- The 5-Star Weapon you Convene is guaranteed to be Luminous Hymn.</span><br><span style=\"font-size: 14pt;\">- Featured Weapon Luminous Hymn is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.</span><br><br><span style=\"font-size: 14pt;\">※For more details, please refer to the in-game Convene page.</span></p>\n</div>",
"articleCover": "",
"articleId": 3639,
"articleTitle": "[Absolute Pulsation] Featured Weapon Convene: Boosted Drop Rate for Luminous Hymn",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-11-19 11:15:00",
"articleDesc": "",
"createTime": "2025-11-19 11:19:45",
"suggestCover": "",
"top": 0
}

14
articles/3648.json generated Normal file
View File

File diff suppressed because one or more lines are too long

14
articles/3657.json generated Normal file
View File

File diff suppressed because one or more lines are too long

14
articles/3664.json generated Normal file
View File

File diff suppressed because one or more lines are too long

14
articles/3665.json generated Normal file
View File

@@ -0,0 +1,14 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/cxsrylia22we4cxm7r-1763609239807.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<div data-page-id=\"VyQ4df97WopF9ax2dSxcEWI7n8g\" data-lark-html-role=\"root\" data-docx-has-block-data=\"false\">\n<div>Dear Rovers,</div>\n<div>&nbsp;</div>\n<div>The Wuthering Waves Battle Rush is now live! Record and share your most exciting battle moments with the hashtags #WutheringWaves and #WuwaBattle on X (Twitter)/YouTube Shorts/TikTok to compete for a reward of Astrite x2,000 and a chance to get featured on our social media with direct credits! Other than these rewards, 10 extra winners will be selected to receive a $50 Amazon Gift Card.</div>\n<div>&nbsp;</div>\n<div>Showcase your outstanding battle tactics in a condensed clip and share them with us!</div>\n<div>&nbsp;</div>\n<div>&nbsp;</div>\n<div><strong>Content Requirement</strong></div>\n<div>&nbsp;</div>\n<div>Create your own combat video featuring Wuthering Waves.</div>\n<div>&nbsp;</div>\n<div>We require no limits to the characters, level, or scenes. All entries that feature your combat in Wuthering Waves are qualified to join the event and compete for rewards!</div>\n<div>&nbsp;</div>\n<div>&nbsp;</div>\n<div><strong>How to Submit</strong></div>\n<div>&nbsp;</div>\n<div>Post your work on X (Twitter)/YouTube Shorts/TikTok with both hashtags #WutheringWaves and #WuwaBattle included publicly.</div>\n<div>&nbsp;</div>\n<div>&nbsp;</div>\n<div><strong>Submission Period</strong></div>\n<div>&nbsp;</div>\n<div>2025/11/20 - 2025/12/18 (PT)</div>\n<div>&nbsp;</div>\n<div>&nbsp;</div>\n<div><strong>Judging Criteria</strong></div>\n<div>&nbsp;</div>\n<div>All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.</div>\n<div>&nbsp;</div>\n<div>&nbsp;</div>\n<div><strong>Notes</strong></div>\n<div>&nbsp;</div>\n<div>To qualify for participation, you should include both hashtags #WutheringWaves and #WuwaBattle in your post.</div>\n<div>&nbsp;</div>\n<div>Deleted posts will not be qualified for entitlement of rewards.</div>\n<div>&nbsp;</div>\n<div>You can submit multiple entries. However, the same work published on different platforms will not count towards the rewards.</div>\n<div>&nbsp;</div>\n<div>Entries listed below may be excluded from the judging process:</div>\n<div>&nbsp;</div>\n<div>*Works not created in accordance with Wuthering Waves</div>\n<div>&nbsp;</div>\n<div>*Works found to contain plagiarism or infringement of intellectual property rights</div>\n<div>&nbsp;</div>\n<div>*Works submitted outside the event period</div>\n<div>&nbsp;</div>\n<div>*Works created with the assistance of AI technology</div>\n<div>&nbsp;</div>\n<div>*Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism</div>\n<div>&nbsp;</div>\n<div>*Works that have already been used for commercial purposes</div>\n<div>&nbsp;</div>\n<div>*Works deemed inappropriate by the judges</div>\n<div>&nbsp;</div>\n<div>Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.</div>\n<div>&nbsp;</div>\n<div>This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.</div>\n</div>\n</div>",
"articleId": 3665,
"articleTitle": "V2.8 Wuthering Waves Battle Rush",
"articleType": 58,
"articleTypeName": "Notice",
"endTime": "2099-01-01 00:00:00",
"gameId": "G152-en",
"startTime": "2025-11-20 18:00:00",
"articleDesc": "",
"createTime": "2025-11-20 11:25:03",
"suggestCover": "",
"top": 0
}

15
articles/3672.json generated Normal file
View File

@@ -0,0 +1,15 @@
{
"articleContent": "<div><img style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https://hw-media-cdn-mingchao.kurogame.com/object/1764086400000/ldt3k8vm9hq09qzl7v-1764152839874.jpg\" width=\"800\" height=\"450\" data-media-source=\"production_G152_en\" data-desc=\"succ\">\n<p><span style=\"font-size: 14pt;\">As the Tactical Simulacra project advances, the Huaxu Academy has successfully achieved the measurement of Tunability, a property through which countless Reverberations converge into Tacet Discords. Disrupting their Tunability would mean a lethal blow that paralyzes them...</span><br><br><span style=\"font-size: 14pt;\">✦Duration✦</span><br><span style=\"font-size: 14pt;\">2025-11-27 04:00 - 2025-12-15 03:59 (server time)</span><br><br><span style=\"font-size: 14pt;\">✦Rewards✦</span><br><span style=\"font-size: 14pt;\">Astrite x600, Premium Resonance Potion x16, Premium Energy Core x16, Premium Sealed Tube x16, Premium Tuner x100, Shell Credit x608888, and other Materials.</span><br><br><span style=\"font-size: 14pt;\">✦Eligibility✦</span><br><span style=\"font-size: 14pt;\">Reach Union Level 14.</span><br><br><span style=\"font-size: 14pt;\">✦Event Rules✦</span><br><span style=\"font-size: 14pt;\">- In Tactical Simulacra: Off Tune, challenge waves of powerful enemies using special buffs across different simulation domains.</span><br><span style=\"font-size: 14pt;\">- Tactical Simulacra: Off Tune has a total of 6 stages. Reach 1000 points in a stage to unlock the next one.</span><br><span style=\"font-size: 14pt;\">- As you complete more challenges, new special buffs will be available to you in the subsequent challenges.</span><br><span style=\"font-size: 14pt;\">- The results of each challenge will be tallied based on Monster Points, Time Points, and Technical Points. Monster Points are earned by defeating enemies in challenges; Time Points are earned based on the time remaining at challenge completion and a conversation factor that increases with the number of enemies that are defeated; Technical Points are earned by triggering Counterattacks, successful Dodges, and Dodge Counters.</span><br><br><span style=\"font-size: 14pt;\">※In Tactical Simulacra: Off Tune, some of your attacks build up certain enemies' Off-Tune Level. Once their Off-Tune Level reaches the limit, they enter the Mistune state. During this state, you can unleash a powerful Tune Break to shatter their defenses. Landing a Tune Break resets the enemies' Off-Tune Level and inflicts Tune Disruption, leaving them vulnerable to follow-up attacks.</span></p>\n</div>",
"articleCover": "",
"articleId": 3672,
"articleTitle": "[Tactical Simulacra: Off Tune] Featured Combat Event",
"articleType": 58,
"articleTypeName": "Notice",
"contentCover": "",
"gameId": "G152-en",
"startTime": "2025-11-26 10:00:00",
"articleDesc": "",
"createTime": "2025-11-26 18:27:39",
"suggestCover": "",
"top": 0
}

1544
articles_all.xml generated
View File

File diff suppressed because it is too large Load Diff

1651
articles_latest.xml generated
View File

File diff suppressed because it is too large Load Diff

8
html/3485.html generated Normal file
View File

@@ -0,0 +1,8 @@
<p>
A member of Averardo Vault's security team and holder of "Best Employee" for longer than she cares to count. She has made plenty of plans for her free time, but for now, her biggest mission is simple: clocking out on time.
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/1p23c3avyjbaxdwj2s-1761559903342.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/ut48mli6z943jg1gux-1761559915008.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761494400000/pa8izuj5b5f58mywsv-1761559938351.jpg"/>
</p>

53
html/3509.html generated Normal file
View File

@@ -0,0 +1,53 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/d23ofj7bdqidvomcuz-1761725284376.jpg"/>
</p>
<p>
During the event, 5-Star Resonator: Zani, 4-Star Resonators: Yangyang, Taoqi, and Danjin receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
2025-10-30 10:00 - 2025-11-19 11:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[Between Light and Shadow] is a Featured Resonator Convene event banner. Use Radiant Tide to Convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.
</p>
</li>
<li>
<p>
Featured Resonator Zani is exclusive to the [Between Light and Shadow] Featured Resonator Convene and will not be available by other means once the event ends.
</p>
</li>
<li>
<p>
Featured Resonator Zani's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.
</p>
</li>
<li>
<p>
During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

53
html/3516.html generated Normal file
View File

@@ -0,0 +1,53 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/8liq7pqi13u6nrqe86-1761725602807.jpg"/>
</p>
<p>
During the event, 5-Star Weapon: Blazing Justice, 4-Star Weapons: Endless Collapse, Hollow Mirage, and Dauntless Evernight receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
2025-10-30 10:00 - 2025-11-19 11:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[Absolute Pulsation] is a Featured Weapon Convene event banner.
</p>
</li>
<li>
<p>
Use Forging Tide to Convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.
</p>
</li>
<li>
<p>
The 5-Star Weapon you Convene is guaranteed to be Blazing Justice.
</p>
</li>
<li>
<p>
Featured Weapon Blazing Justice is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

47
html/3523.html generated Normal file
View File

@@ -0,0 +1,47 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/mng4tbka6xst41ypkj-1761725914978.jpg"/>
</p>
<p>
Behold! Wutherium Film Studio Special Feature: Resonators in Combat Edition has officially launched!
</p>
<p>
Capture Resonators' exhilarating moments during combat, then submit the photos to Fulmine and C-MOSS to earn plenty of rewards!
</p>
<h1>
Duration
</h1>
<p>
2025-10-30 10:00 - 2025-11-19 03:59 (server time)
</p>
<h1>
Rewards
</h1>
<p>
Astrite x400, Premium Resonance Potion x15, Premium Energy Core x10, Premium Sealed Tube x10, Forgery Advanced Supply x35, Advanced Enclosure Tank x70, Shell Credit x280000
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 14 and complete Main Quest Chapter II Prologue ""Through the Sea Thou Break.""
</p>
<h1>
Event Details
</h1>
<ul>
<li>
<p>
During the event, you will be given different daily Freeze Frame challenges, each with Normal and Hard modes. Complete Normal Mode to unlock Hard Mode for that challenge and the Normal Mode for the next Freeze Frame challenge.
</p>
</li>
<li>
<p>
Each Freeze Frame challenge will center on a specific Resonator. Your goal is to capture highlights of these Resonators in combat by meeting specific objectives. Completing these tasks earns you rewards.
</p>
</li>
<li>
<p>
Any unclaimed rewards will be sent via Mail the next time you log in within 30 days after the event ends.
</p>
</li>
</ul>

45
html/3532.html generated Normal file
View File

@@ -0,0 +1,45 @@
<p>
Freeze Frame: Action Highlights - Combat Photography Event is now underway!
</p>
<p>
Capture Resonators' exhilarating moments during combat with your camera!
</p>
<h1>
Duration
</h1>
<p>
From now until 2025-11-19 23:59 (UTC+8)
</p>
<h1>
How to Submit
</h1>
<p>
You can submit your work in the following ways:
</p>
<ol>
<li>
<p>
Use the [Settings - Camera] feature in Wuthering Waves or take a screenshot to capture in-game footage. Apply your preferred filter and frame the Resonators' battle moments.
</p>
</li>
<li>
<p>
Join the "Freeze Frame: Action Highlights" Combat Photography Event. Choose your desired Resonator and use the Slow Motion Gadget to capture their battle scenes.
</p>
</li>
</ol>
<p>
Post your work with both hashtags #WutheringWaves and #WuWaMoment included and join the event.
</p>
<h1>
Rewards
</h1>
<p>
We'll select winners based on the quality and statistics of the entries. Winners will receive Astrites and cash incentives!
</p>
<p>
Check the image for more detailed info and proceed to submit: https://forms.gle/8foXGMp3p9pzj1Tb9
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1761667200000/e6ytovb1kgx824jkwo-1761735233381.jpg"/>
</p>

6
html/3538.html generated Normal file
View File

@@ -0,0 +1,6 @@
<p>
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency.
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/mh9nwk3fq095xijyrw-1762311677850.jpg"/>
</p>

57
html/3541.html generated Normal file
View File

@@ -0,0 +1,57 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/vcqovqgon5keki591t-1762312534821.jpg"/>
</p>
<p>
The Lollo Campaign is facing an unexpected crisis! To save Maji's old reliable delivery legs, and to keep those convenient services running, help him complete his new program, Lollo Ice Drinks!
</p>
<p>
Complete the campaigns to claim your Lollo Stamps—a gift of gratitude from Lollo Logistics. Lollo Stamps can be exchanged for Lollo Helper special deliveries.
</p>
<h1>
Duration
</h1>
<p>
2025-11-06 04:00 - 2025-11-19 03:59 (server time)
</p>
<h1>
Rewards
</h1>
<p>
Astrite x400, Lustrous Tide x5, Premium Enclosure Tank x5, Forgery Premium Supply x10, Crystal Solvent x5, Shell Credit x340000, and other Materials.
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 14 and complete Main Quest Chapter II Act V ""Shadow of Glory.""
</p>
<h1>
Event Details
</h1>
<ul>
<li>
<p>
During the event, complete Lollo Campaigns to obtain Lollo Stamps.
</p>
</li>
<li>
<p>
Each Lollo Stamp can be exchanged for a Lollo Helper special delivery.
</p>
</li>
<li>
<p>
There are 3 Inventories for the Lollo Helper special deliveries. Once you collect all deliveries in an Inventory, the next Inventory will be unlocked.
</p>
</li>
<li>
<p>
If you win the Lollo Express special delivery service, you can claim all deliveries in the current Inventory.
</p>
</li>
</ul>
<p>
<em>
After the event ends, any remaining Lollo Helper special delivery will become unavailable, and any unused Lollo Stamp will be cleared. Please take note of the event period and participate in the event accordingly.
</em>
</p>

4
html/3547.html generated Normal file
View File

@@ -0,0 +1,4 @@
<p>
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762272000000/e6d739gbrr8jsp3knj-1762345950424.jpg"/>
</p>

9
html/3549.html generated Normal file
View File

@@ -0,0 +1,9 @@
<p>
Qiuyuan once investigated a medicinal-herb corruption case at Mingting's order during his service as the senior agent of the Internal Security Agency. But there's more to it than meets the eye on his trip to capture the fugitive...
</p>
<p>
Beneath the surface of an odd case, hidden motives lurked. What appeared to be a routine order quietly signaled trouble was on the horizon.
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762444800000/fgbqbrqeirp5emnbg4-1762482878492.jpg"/>
</p>

41
html/3554.html generated Normal file
View File

@@ -0,0 +1,41 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1762704000000/7hqt0oebqm8w5fr18d-1762764686796.jpg"/>
</p>
<p>
The Tacet Fields are experiencing a surge in energy due to the Waveworn Phenomenon.
</p>
<p>
Use the Waveplates to maximize your rewards from the Tacetite Blooms!
</p>
<h1>
Duration
</h1>
<p>
2025-11-12 04:00 - 2025-11-19 03:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 19.
</p>
<h1>
Details
</h1>
<ul>
<li>
<p>
Complete Tacet Suppression challenges during the event and spend Waveplates for double rewards.
</p>
</li>
<li>
<p>
During [Chord Cleansing], you can claim double rewards 3 times a day, and the remaining double rewards claims can be viewed on the [Chord Cleansing] event page.
</p>
</li>
<li>
<p>
During [Chord Cleansing], double rewards claims refresh daily at 04:00 (server time).
</p>
</li>
</ul>

8
html/3572.html generated Normal file
View File

@@ -0,0 +1,8 @@
<p>
The Preview Special Broadcast has concluded. Take a look back at all these exciting updates:
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/80lk8p3zq0f06k7meo-1763102612556.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/m6odgabp8gfpmbc937-1763102627210.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0gy70in8ksod74rbj9-1763102656359.jpg"/>
</p>

425
html/3583.html generated Normal file
View File

@@ -0,0 +1,425 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/761szl5r2xcbwxzpbi-1763115743180.png"/>
</p>
<p>
Dear Rover,
</p>
<p>
To bring you exciting new content and a better gaming experience, we will soon be conducting the update maintenance for Version 2.8: To the City Set in Amber.
</p>
<p>
During the maintenance, you will be unable to log in to the game, so please plan your time accordingly. Additionally, due to the large size of the update, we recommend updating the game while connected to a Wi-Fi network. We apologize for any inconvenience this may cause.
</p>
<p>
<strong>
[Maintenance Time &amp; Compensation Details]
</strong>
</p>
<p>
<strong>
✦Maintenance Time: 2025-11-20 04:00 - 2025-11-20 11:00 (UTC+8)
</strong>
</p>
<p>
<strong>
✦Maintenance Compensation: Astrite x300, Crystal Solvent x2
</strong>
</p>
<p>
<strong>
✦Compensation Eligibility: Create a character and unlock the Mail feature before 2025-11-20 04:00 (UTC+8). The compensation will remain claimable until the next version update.
</strong>
</p>
<p>
<em>
In the event that the maintenance is extended, the dev team will issue a follow-up notice and adjust the compensation accordingly.
</em>
</p>
<p>
<strong>
[How to Update]
</strong>
</p>
<p>
Once the maintenance for the version update begins, you can follow the following instructions to update your client.
</p>
<p>
<strong>
✦PC: Close the game, restart the launcher, and then click on "Update."
</strong>
</p>
<p>
<strong>
✦Android: Launch the game and follow the instructions in the update pop-up window to complete the update.
</strong>
</p>
<p>
<strong>
✦iOS: Download/update the game in the App Store.
</strong>
</p>
<p>
<strong>
✦Mac: Download/update the game in the App Store.
</strong>
</p>
<p>
<strong>
✦PS5™: Open the home screen &gt; Select Wuthering Waves &gt; Press the OPTIONS button to Check for Update
</strong>
</p>
<p>
<strong>
[Pre-download]
</strong>
</p>
<p>
<strong>
✦Pre-download Start Time: 2025-11-18 10:00 (UTC+8)
</strong>
</p>
<p>
<strong>
[Pre-download Storage Requirements]
</strong>
</p>
<p>
<strong>
✦PC: 20 GB. To ensure smoother subsequent processes, such as decompressing, it is recommended that you have at least 30 GB of spare storage space on your PC.
</strong>
</p>
<p>
<em>
We will be updating some of the existing game resources in order to optimize the overall performance of Version 2.8. Consequently, the pre-download feature will only available on PC for Version 2.8. We sincerely apologize for any inconvenience you may experience. Thank you for your support for Wuthering Waves.
</em>
</p>
<p>
<em>
Please note that pre-download may not be possible if your device does not have enough spare storage space.
</em>
</p>
<p>
<strong>
[How to Pre-download]
</strong>
</p>
<p>
<strong>
✦PC: When pre-download for the latest version becomes available, "New Version Pre-download" appears below the "Start" button on the launcher interface. Select this option to pre-download the resources.
</strong>
</p>
<p>
<em>
You can continue playing the game while the pre-downloading process is ongoing on the PC launcher. The process can be paused at any time. Whether it is complete or not, the update maintenance will speed up to a certain degree when initiated.
</em>
</p>
<p>
<em>
Please ensure that you have a stable network connection during the pre-downloading process.
</em>
</p>
<hr/>
<p>
<strong>
[Version 2.8 Preview]
</strong>
</p>
<p>
<strong>
[New Resonators]
</strong>
</p>
<p>
<strong>
5-Star Resonator: Chisa (Havoc/Broadblade)
</strong>
</p>
<p>
<strong>
※Obtainable through the [Horizon of Dawnbreak] Featured Resonator Convene.
</strong>
</p>
<p>
<strong>
4-Star Resonator: Buling (Electro/Rectifier)
</strong>
</p>
<p>
<strong>
※Obtainable through the [Requiem Without End] and [Neptune's Lullaby] Featured Resonator Convene banners. After the event ends, starting from the next version, 4-Star Resonator Buling will be permanently available in Featured Resonator/Weapon Convene and Standard Resonator/Weapon Convene.
</strong>
</p>
<p>
<strong>
※4-Star Resonator Buling will be simultaneously made available in the Afterglow Coral Store and will be removed at the end of the next version.
</strong>
</p>
<p>
<strong>
[New Weapon]
</strong>
</p>
<p>
<strong>
5-Star Weapon: Kumokiri (Broadblade)
</strong>
</p>
<p>
<strong>
※Obtainable through the [Absolute Pulsation - Kumokiri] Featured Weapon Convene.
</strong>
</p>
<p>
<strong>
[New Location]
</strong>
</p>
<p>
<strong>
Chronorift Metropolis
</strong>
</p>
<p>
<strong>
※Reach the location during Main Quest Chapter II Act XII "Stagnant Dawn on Wastelands."
</strong>
</p>
<p>
<strong>
[New Echoes]
</strong>
</p>
<p>
<strong>
Nightmare: Roseshroom, Nightmare: Tick Tack, Nightmare: Dwarf Cassowary
</strong>
</p>
<p>
<strong>
New Sonata Effect: Thread of Severed Fate (3pcs Set)
</strong>
</p>
<p>
<strong>
New Nightmare Purification challenge: Honami City Nightmare Nest
</strong>
</p>
<p>
<strong>
※In Nightmare Purification, a set number of Nightmare Tacet Discords are available daily. Defeat them to claim the corresponding Echoes without spending Waveplates.
</strong>
</p>
<p>
<strong>
[New Stories]
</strong>
</p>
<p>
<strong>
[Main Quest] Chapter II Act XII "Stagnant Dawn on Wastelands"
</strong>
</p>
<p>
<strong>
[Main Quest] Chapter II Segue "Flowing Starlight in the Iris"
</strong>
</p>
<p>
<strong>
[New Features]
</strong>
</p>
<p>
<strong>
Added the "one-click absorption of all absorbable Echoes" feature
</strong>
</p>
<p>
<strong>
Added the "Auto Supplement" feature to the Upgrade function
</strong>
</p>
<p>
<strong>
Added the "Mute when Game is in the Background" option on PC
</strong>
</p>
<p>
<strong>
[Performance Optimizations]
</strong>
</p>
<p>
<strong>
- Optimized the performance of Ray Tracing
</strong>
</p>
<p>
<strong>
- Optimized the performance of visual assets
</strong>
</p>
<p>
<strong>
[Other New Content]
</strong>
</p>
<p>
<strong>
New "Tactical Hologram: Phantom Pain" challenge: The False Sovereign
</strong>
</p>
<p>
<strong>
New Outfit: Downtown Repose (Zani - Deluxe Outfit)
</strong>
</p>
<p>
<strong>
New Phantom Echo: Phantom - The False Sovereign
</strong>
</p>
<p>
<strong>
New Avatar: Post-Doomsday Coffee
</strong>
</p>
<p>
<strong>
New Title: Honami Doom Walker
</strong>
</p>
<p>
<strong>
※Partipate in the combat event "Stranger Things in Honami" to win Phantom: The False Sovereign (Phantom Echo), Post-Doomsday Coffee (Avatar), Honami Doom Walker (Title).
</strong>
</p>
<p>
<strong>
[Special Events]
</strong>
</p>
<p>
<strong>
[Stranger Things in Honami] Combat Event
</strong>
</p>
<p>
<strong>
[Whispers of the Waves] Photo Collection Event
</strong>
</p>
<p>
<strong>
[Tactical Simulacra: Off Tune] Featured Combat Event
</strong>
</p>
<p>
<strong>
[Lollo Campaign: Rising Anew] Featured Commission Event
</strong>
</p>
<p>
<strong>
[Search for It! Bits of Lahai-Roi] Showcase Event
</strong>
</p>
<p>
<strong>
[Gifts of Amber] 7-Day Login Event
</strong>
</p>
<p>
<strong>
※For more details on the new content, optimizations, and bug fixes coming to the game in Version 2.8, please stay tuned for the upcoming release notes.
</strong>
</p>
<hr/>
<h1>
Device Requirements
</h1>
<p>
To ensure a smooth experience, please refer to the following requirements:
</p>
<ol>
<li>
Minimum
</li>
</ol>
<p>
Android: [System] Android 7.0 or later; [Processor] Snapdragon 835, MediaTek G71/72 or processors of better/equivalent performance; [RAM] 4 GB or more
</p>
<p>
iOS: [System] iOS 14 or later; [Model] iPhone 11 or newer, iPad with A13 Bionic or processors of better/equivalent performance; [RAM] 4 GB or more
</p>
<p>
Mac: [System] macOS 12.0 or later; [Model] m1 or newer; [RAM] 16 GB or more
</p>
<p>
PC: [System] Windows 10 64-bit; [CPU] Intel I5 (9th Gen)/Ryzen 2700; [GPU] Geforce 1060/RX570/Intel ARC A380, [RAM] 16 GB or more
</p>
<ol start="2">
<li>
Recommended
</li>
</ol>
<p>
Android: [System] Android 7.0 or later; [Processor] Snapdragon 8 Gen1+/Gen2/Gen3 or MediaTek processors of better/equivalent performance; [RAM] 6 GB or more
</p>
<p>
iOS: [System] iOS 15 or later; [Model] iPhone 13 or newer, iPad with A15 Bionic or processors of better/equivalent performance; [RAM] 6 GB or more
</p>
<p>
Mac: [System] macOS 15.0 or later; [Model] m3 or newer; [RAM] 16 GB or more
</p>
<p>
PC: [System] Windows 10 64-bit; [CPU] Intel I7 (9th Gen)/Ryzen 3700, [GPU] Geforce 2060/RX5700XT/Intel ARC A750; [RAM] 16 GB or more
</p>
<ol start="3">
<li>
Required Storage Space
</li>
</ol>
<p>
Android/iOS: 35 GB
</p>
<p>
Mac: 85 GB
</p>
<p>
PC: 85 GB; it's recommended to install the game on an SSD.
</p>
<p>
PS5™: Please make sure your device has sufficient available storage to complete the update successfully.
</p>
<ol start="4">
<li>
Controller Support
</li>
</ol>
<p>
Wuthering Waves currently supports the following controllers on Mobile.
</p>
<p>
Wireless Controllers: Xbox series, Xbox Elite series, DualShock®4, DualSense®, DualSense Edge™
</p>
<p>
Wuthering Waves currently supports the following controllers on Mac.
</p>
<p>
Wired/Wireless Controllers: Xbox series, Xbox Elite series, DualShock®4, DualSense®, DualSense Edge™
</p>
<p>
Wuthering Waves currently supports the following controllers on PC.
</p>
<p>
Wired/Wireless Controllers: Xbox series, Xbox Elite series, DualSense®、DualSense Edge™
</p>
<p>
Wired Controllers: DualShock®4
</p>
<p>
<em>
When you connect any other controller that supports multiple input modes to a PC, it is recommended that you set the controller to XInput mode for the best experience.
</em>
</p>

29
html/3588.html generated Normal file
View File

@@ -0,0 +1,29 @@
<p>
"She leans casually against the railing, her sweater soft against the light, appearing equally elegant as she is relaxed. Changing up the style every now and then isn't so bad.
</p>
<p>
Turning slightly, Zani looks down at the city stretching beneath her. The afternoon sunlight spills over the buildings, their outlines shimmering in the glow. She gazes quietly, letting the city's clamor become the backdrop to this moment of ease."
</p>
<p>
Zani's Deluxe Outfit "Downtown Repose" will become available once Version 2.8 goes live. Get a sneak peek now!
</p>
<h1>
How to Obtain
</h1>
<p>
Zani's Deluxe Outfit "Downtown Repose" will be made permanently available in the Store once Version 2.8 goes live.
</p>
<p>
Purchase the Outfit during Version 2.8 at a discount, for 1980 Lunites only. After Version 2.8 ends, the Outfit will cost 2480 Lunites.
</p>
<p>
From the time Version 2.8 goes live until 2025-12-24 11:59 (server time), there will be a trial event where you can try out Downtown Repose. Complete the trial event to claim rewards.
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/wq3ziy2rccqu97o1if-1763125379579.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/fwcbp3rmid4meihbhv-1763125399619.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/2de1n4u4vysp2so5r9-1763125636047.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/3m6k2b33r2f1nkwbhm-1763125656263.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/qrxyfz8s2ocbx9cs9h-1763125699983.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/if07fhjaf7w30ladck-1763125716913.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zo43n9evpdy3uo4kol-1763125732828.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/zzy2qnd222ubs9m1ll-1763125745756.jpg"/>
</p>

14
html/3592.html generated Normal file
View File

@@ -0,0 +1,14 @@
<p>
"Kuchiba Chisa. Tactical Development Program, Department of Engineering, Startorch Academy. Forte Specialization: structural dissection... Apologies, this might not be the time for formalities."—Chisa
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8mo5g0ez8yh4tqdh2b-1763126375972.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/7wl7dhwcf6rnnb75aj-1763126391523.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/mvost8tdegosefrf15-1763126414477.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/nzu8onk6t8fjbcad4z-1763126466514.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/0dels41peppqosldca-1763126486040.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/k844e8vq4umkf12pxo-1763126608314.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/l5bqkqgkgvtzt12419-1763126625486.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/8xwma7cxh5kmtm38g2-1763126682626.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763049600000/h0smpxd26tov8ip4ix-1763126696478.jpg"/>
</p>

23
html/3595.html generated Normal file
View File

@@ -0,0 +1,23 @@
<p>
Loading Data&gt;&gt;&gt;
</p>
<h1>
Chisa
</h1>
<p>
"Just an ordinary student."
</p>
<p>
Calmly, she introduces herself, a faint iridescent shimmer flickering in her eyes. Again, the structures of the world reveal themselves in her vision. Narrowing her eyes, she singles out the very thread that tugs at life itself.
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/tcz1fpjdqkq0ra8ntk-1763198623393.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/hpr01unab7lqnskowi-1763198642805.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/jpn5h8dpbq401v7eyh-1763198658324.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/y3dx66ba9y3f6vk5yk-1763198671685.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bzxanra03of92wdjef-1763198685129.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/rfbhh1lqk2tm8e9qpt-1763198698636.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/m51y3ba8bpelsza8zt-1763198742175.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bwss4p2fk24t05vpw7-1763198756676.gif"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763136000000/bvkfihh6czehzhx87t-1763208460141.jpg"/>
</p>

28
html/3603.html generated Normal file
View File

@@ -0,0 +1,28 @@
<p>
Event Preview | [Stranger Things in Honami] Combat Event, Coming Soon!
</p>
<h1>
Duration
</h1>
<p>
Version 2.8 update - 2025-12-24 11:59 (server time)
</p>
<h1>
Rewards
</h1>
<p>
Astrite x1200, Title: Honami Doom Walker, Avatar: Post-Doomsday Coffee, Phantom: The False Sovereign, Modifier, Premium Tuner, Premium Enclosure Tank, Shell Credit, and other Materials.
</p>
<h1>
As a Permanent Event
</h1>
<p>
This event offers two types of rewards: Limited-time Rewards and Standard Rewards. When the initial period ends, the event will continue as a Permanent Event. The Limited-time Rewards will no longer be available when the event becomes a Permanent Event. You can participate in the Permanent Event to win Standard Rewards.
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/kocst41ot3jkzu7tsq-1763348669828.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/c2stvv7raa0p56dg21-1763348699248.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/xcg1t72xos2hlhapkj-1763348717347.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/p1ty9w5roazf7i2vpg-1763348733832.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763308800000/oo1dbkz57j7a3tn7wo-1763348746651.jpg"/>
</p>

15
html/3613.html generated Normal file
View File

@@ -0,0 +1,15 @@
<p>
Wuthering Waves Update Content | Version 2.8 "To the City Set in Amber" Planned for Release on November 20th (UTC+8)
</p>
<p>
Here's the event calendar for Version 2.8. Check it out for a quick overview of the event schedule! Full details about the update content can be viewed on our official website—be sure to take a look!
</p>
<h1>
WutheringWaves
</h1>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/jdw0n19tqkiq3h7ztp-1763448460525.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/46ywdxjpf60zbqsugc-1763448496990.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/3yu1888i3fxnfdlfbc-1763448512501.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763395200000/abckxxubxu4vxt4eg6-1763448526782.jpg"/>
</p>

58
html/3616.html generated Normal file
View File

@@ -0,0 +1,58 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/alol7tdeppuhk6xejy-1763520543500.jpg"/>
</p>
<p>
During the event, 5-Star Resonator: Chisa, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
Version 2.8 update - 2025-12-11 09:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[Horizon of Dawnbreak] is a Featured Resonator Convene event banner.
</p>
</li>
<li>
<p>
Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.
</p>
</li>
<li>
<p>
Featured Resonator Chisa is exclusive to the [Horizon of Dawnbreak] Featured Resonator Convene and will not be available by other means once the event ends.
</p>
</li>
<li>
<p>
Featured Resonator Chisa's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.
</p>
</li>
<li>
<p>
During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

53
html/3623.html generated Normal file
View File

@@ -0,0 +1,53 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/jfm0n54ovtdyqru36k-1763521065372.jpg"/>
</p>
<p>
During the event, 5-Star Weapon: Kumokiri, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
Version 2.8 update - 2025-12-11 09:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[Absolute Pulsation] is a Featured Weapon Convene event banner.
</p>
</li>
<li>
<p>
Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.
</p>
</li>
<li>
<p>
The 5-Star Weapon you Convene is guaranteed to be Kumokiri.
</p>
</li>
<li>
<p>
Featured Weapon Kumokiri is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

58
html/3631.html generated Normal file
View File

@@ -0,0 +1,58 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/twbu78z48nmmtaaftq-1763522034373.jpg"/>
</p>
<p>
During the event, 5-Star Resonator: Phoebe, 4-Star Resonators: Taoqi, Yuanwu and Aalto receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
Version 2.8 update - 2025-12-11 09:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[With Hushed Whispers] is a Featured Resonator Convene event banner
</p>
</li>
<li>
<p>
Use Radiant Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Resonator Convene events and is carried over until a 5-Star Resonator is obtained.
</p>
</li>
<li>
<p>
Featured Resonator Phoebe is exclusive to the [With Hushed Whispers] Featured Resonator Convene and will not be available by other means once the event ends.
</p>
</li>
<li>
<p>
Featured Resonator Phoebe's Waveband will be simultaneously made available in the Afterglow Coral Store with a limit of 2 purchases, and it will be removed once the Convene event ends.
</p>
</li>
<li>
<p>
During the event, all the Resonators who receive boosted drop rates will become available in Ascendant Aces as Trial Resonators. Complete their Ascendant Aces challenges to obtain rewards.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

13
html/3637.html generated Normal file
View File

@@ -0,0 +1,13 @@
<p>
Resonator Review | Graceful Luminescence—Phoebe
</p>
<p>
Phoebe, Acolyte of the Order of the Deep, is a young woman of quiet devotion. With a kind heart, she fulfills her duties with unwavering diligence. Her prayers, like the light she carries, offer comfort and peace to all.
</p>
<h1>
WutheringWaves #Phoebe
</h1>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9edo53agt26cns0661-1763522290371.jpg"/>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tynu2pe3b4mwujro7t-1763522307473.jpg"/>
</p>

53
html/3639.html generated Normal file
View File

@@ -0,0 +1,53 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/zxey5yua1ksodf8nqs-1763522369708.jpg"/>
</p>
<p>
During the event, 5-Star Weapon: Luminous Hymn, 4-Star Weapons: Commando of Conviction, Fusion Accretion, and Helios Cleaver receive boosted drop rates!
</p>
<h1>
Duration
</h1>
<p>
Version 2.8 update - 2025-12-11 09:59 (server time)
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 8 or complete the combat trial in ""First Resonance"" and activate the Convene function.
</p>
<h1>
Convene Rules
</h1>
<ul>
<li>
<p>
[Absolute Pulsation] is a Featured Weapon Convene event banner.
</p>
</li>
<li>
<p>
Use Forging Tide to convene. You are guaranteed at least one 4-Star or higher rarity Resonator or Weapon every 10 attempts.
</p>
</li>
<li>
<p>
The guarantee count is shared among all Featured Weapon Convene events and is carried over until a 5-Star Weapon is obtained.
</p>
</li>
<li>
<p>
The 5-Star Weapon you Convene is guaranteed to be Luminous Hymn.
</p>
</li>
<li>
<p>
Featured Weapon Luminous Hymn is exclusive to the Featured Weapon Convene and will not be available by other means once the event ends.
</p>
</li>
</ul>
<p>
<em>
For more details, please refer to the in-game Convene page.
</em>
</p>

470
html/3648.html generated Normal file
View File

@@ -0,0 +1,470 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/4q4r5uoutkkrevv9cw-1763548342588.png"/>
Wuthering Waves Fan Creation Event "Dawn Breaks on Dark Tides" has concluded, and we want to express our heartfelt appreciation to all participants for their dedication and creativity in our fan art event. Let's view the winning entries and their contributors!
</p>
<p>
<strong>
1st Place
</strong>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/cl87sevf3ekn1vzewi-1763539646144.jpg"/>
</p>
<p>
<a href="https://x.com/yirin3617">
@yirin3617
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/pfzq877x7m9adto0vj-1763539703688.jpg"/>
</p>
<p>
<a href="https://x.com/Jupito_b">
@Jupito_b
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/hj2r1uoq6d40deseoh-1763539729687.jpg"/>
</p>
<p>
<a href="https://x.com/Soare_lucien_">
@Soare_lucien_
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0ngpf89xjr82llkgaf-1763539773828.jpg"/>
</p>
<p>
<a href="https://x.com/HanasawaHsu">
@HanasawaHsu
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/qiemor1vwfef229okb-1763539829360.jpg"/>
</p>
<p>
<a href="https://x.com/Rockwell_n1">
@Rockwell_n1
</a>
</p>
<p>
**2nd Place
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/uemycp9revujmveghd-1763540435968.jpg"/>
**
</p>
<p>
<a href="https://x.com/Azipou_">
@Azipou_
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/9vgi3l4ljrv84vbe21-1763540464664.jpg"/>
</p>
<p>
<a href="https://x.com/_toriumu">
@_toriumu
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0omubjyevh6f8tshlw-1763540579817.jpg"/>
</p>
<p>
<a href="https://x.com/vxy_1000">
@vxy_1000
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/6wjydrv1ukzfivcxrq-1763540610660.jpg"/>
</p>
<p>
<a href="https://x.com/ooC1iD7XwimLOou">
@ooC1iD7XwimLOou
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/s2wc73sauryzaomohu-1763540633690.jpg"/>
</p>
<p>
<a href="https://x.com/chucky1000sun">
@chucky1000sun
</a>
</p>
<p>
<strong>
3rd Place
</strong>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/g54i4ya2f69v17p15o-1763540708732.jpg"/>
</p>
<p>
<a href="https://x.com/shim0rin">
@shim0rin
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/flk0x6gxm6so063e8r-1763540731153.jpg"/>
</p>
<p>
<a href="https://x.com/Nadenade_27">
@Nadenade_27
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/f7nzax0a65x6mo4ep4-1763540753929.jpg"/>
</p>
<p>
<a href="https://x.com/vankusman">
@vankusman
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ip0by9gp8phkspdcwi-1763540781212.jpg"/>
</p>
<p>
<a href="https://x.com/yoshi_houndbell">
@yoshi_houndbell
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/y39rxkuse43hqhfst7-1763540800919.jpg"/>
</p>
<p>
<a href="https://x.com/chaochaochun">
@chaochaochun
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/08u7zwgcpf4ffuce95-1763540824020.jpg"/>
</p>
<p>
<a href="https://x.com/rhaspiece">
@rhaspiece
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/lfylx6uv9qqaoo5l0o-1763540888702.jpg"/>
</p>
<p>
<a href="https://www.instagram.com/ui_uiiiiiiiii/">
@ui_uiiiiiiiii
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/umqj48p3nemeuucuvb-1763541836147.jpg"/>
</p>
<p>
<a href="https://www.instagram.com/samvisk281/">
@samvisk281
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/sgp0jd24lwgxycppfx-1763542438485.jpg"/>
</p>
<p>
<a href="https://x.com/Angelo2602_">
@Angelo2602_
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ejqe994axxa273yvad-1763542463991.jpg"/>
</p>
<p>
<a href="https://x.com/ErikVarts">
@ErikVarts
</a>
</p>
<p>
<strong>
4th Place
</strong>
</p>
<p>
<strong>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/n5zq08cec11m8brxcc-1763546837159.jpg"/>
</strong>
</p>
<p>
<a href="https://x.com/Bibimbub15">
@Bibimbub15
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/uoin7q9tg6szz5j1a9-1763546859687.jpg"/>
</p>
<p>
<a href="https://x.com/namaconZ_006">
@namaconZ_006
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/xhbqhslurfn3qaqzen-1763546880025.jpg"/>
</p>
<p>
<a href="https://x.com/no_eat_cucumber">
@no_eat_cucumber
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/yxiv5fi3ex9tom7983-1763546943874.jpg"/>
</p>
<p>
<a href="https://x.com/hina1103__">
@hina1103__
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/0m6cct7xrnesfan46l-1763546979830.jpg"/>
</p>
<p>
<a href="https://x.com/YeniiHuenii">
@YeniiHuenii
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tor1ou888rissectoy-1763546995686.jpg"/>
</p>
<p>
<a href="https://x.com/MarronCaramel_I">
@MarronCaramel_I
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/extpd3h4jsvz543pcq-1763547017295.jpg"/>
</p>
<p>
<a href="https://x.com/maki_MK0104">
@maki_MK0104
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/eqzl1ladw4lemdmqq3-1763547035011.jpg"/>
</p>
<p>
<a href="https://x.com/yoru_shiki">
@yoru_shiki
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/096o6xap5whrfxzq6z-1763547128527.jpg"/>
</p>
<p>
<a href="https://x.com/puddlemud_art">
@puddlemud_art
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/le3u6ko07fo0xe1vre-1763547343628.jpg"/>
</p>
<p>
<a href="https://x.com/xxxina_inaxxx">
@xxxina_inaxxx
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/rpv1u66ow2q85zote6-1763547362222.jpg"/>
</p>
<p>
<a href="https://x.com/AnchierArt">
@AnchierArt
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/u9d2sik4ryac1703o2-1763547378643.jpg"/>
</p>
<p>
<a href="https://x.com/ayakaze_aoi">
@ayakaze_aoi
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/oq1llum1z0ojfyggyt-1763547400012.jpg"/>
</p>
<p>
<a href="https://x.com/yuuuuu045792630">
@yuuuuu045792630
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/tdvc77fcdv4c11p0cn-1763547422319.jpg"/>
</p>
<p>
<a href="https://x.com/J_Hwan0810">
@J_Hwan0810
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/5t2gq6zo4pazo4i4yp-1763547443450.jpg"/>
</p>
<p>
<a href="https://x.com/dusqhd66">
@dusqhd66
</a>
</p>
<p>
<strong>
5th Place
</strong>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/rar8t5tgqd8i9xac9z-1763547201933.jpg"/>
</p>
<p>
<a href="https://x.com/Fsuusux">
@Fsuusux
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/fviwfqa33hezd8wwtq-1763547485387.jpg"/>
</p>
<p>
<a href="https://x.com/aceken12">
@aceken12
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/p4f9ibdqj467196gqg-1763547549178.jpg"/>
</p>
<p>
<a href="https://x.com/aceken12">
@aceken12
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/cdl2bzlfs0l6zb9u7g-1763547571836.jpg"/>
</p>
<p>
<a href="https://x.com/dolgom927">
@dolgom927
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/j42cg4k17k2pl52l2r-1763547586646.jpg"/>
</p>
<p>
<a href="https://x.com/Rvm2222">
@Rvm2222
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/b3vzz2o97rrj8iy6yy-1763547619313.jpg"/>
</p>
<p>
<a href="https://x.com/hirokiart">
@hirokiart
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/xt28n38kd18mta6zgl-1763547636052.jpg"/>
</p>
<p>
<a href="https://x.com/Aete_">
@Aete_
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/94gropmunff38veu7q-1763547653982.jpg"/>
</p>
<p>
<a href="https://x.com/lee_euijin6">
@lee_euijin6
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/z1by84xdh2e3bnmomw-1763547676766.jpg"/>
</p>
<p>
<a href="https://x.com/LewdLily66">
@LewdLily66
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/ylg4gw400g27mxjl5m-1763547692656.jpg"/>
</p>
<p>
<a href="https://x.com/alyxtarr">
@alyxtarr
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/8vrgulqqydxylerofa-1763547707728.jpg"/>
</p>
<p>
<a href="https://x.com/madine08260">
@madine08260
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/wveyv9dhmr3xbe03xh-1763547740518.jpg"/>
</p>
<p>
<a href="https://x.com/uminonimu532">
@uminonimu532
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/nkw8ktqydysqlm20vx-1763547758312.jpg"/>
</p>
<p>
<a href="https://x.com/gujrv">
@gujrv
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/q9hqc3dxj3t9n31c2e-1763547775465.jpg"/>
</p>
<p>
<a href="https://x.com/mieen22">
@mieen22
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/o6vofnx7kktjeju8zb-1763547792013.jpg"/>
</p>
<p>
<a href="https://x.com/wooddak1">
@wooddak1
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/htjkp4rzaxq00z58ap-1763547889116.jpg"/>
</p>
<p>
<a href="https://x.com/Meul2958">
@Meul2958
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/udphu1b4gbnq27uo9y-1763547907576.jpg"/>
</p>
<p>
<a href="https://x.com/DriedFishArt">
@DriedFishArt
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/do8h9wtt8luo6vzoaa-1763547926501.jpg"/>
</p>
<p>
<a href="https://x.com/AgitoIsHere">
@AgitoIsHere
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/kqnzshsxpb3ndbae2b-1763547945060.jpg"/>
</p>
<p>
<a href="https://x.com/3RD_01">
@3RD_01
</a>
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763481600000/r0sqo2r83k0kleaeyu-1763547960938.jpg"/>
</p>
<p>
<a href="https://x.com/Gu_lina_">
@Gu_lina_
</a>
</p>

1072
html/3657.html generated Normal file
View File

File diff suppressed because it is too large Load Diff

179
html/3664.html generated Normal file
View File

@@ -0,0 +1,179 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/j5h70wh49t95udrhhr-1763608727246.jpg"/>
</p>
<p>
Dear Rovers,
</p>
<p>
Wuthering Waves Fan Creation Event "To the City Set in Amber" is now live! Post your work with hashtags #WutheringWaves and #WuWaFanart on X (Twitter)/Instagram/Facebook and fill out the form for a chance to win iPhone 16 Pro 512GB, Astrites and more!
</p>
<p>
Create your works of boundless imagination to present the world of Wuthering Waves!
</p>
<p>
Proceed to submit: &lt;https://forms.gle/wkPmsgEBDouGWghL6&gt;
</p>
<p>
Content Requirement
</p>
<p>
Create your own artwork about Wuthering Waves Version 2.8 "To the City Set in Amber"!
</p>
<p>
Whether it's an illustration of your beloved character, comical moments from your adventures, or difficult combos you've mastered—anything that aligns with the theme is eligible for submission. Share your artwork or video for a chance to win exciting prizes!
</p>
<p>
How to Submit
</p>
<ol>
<li>
<p>
Post your artwork on X (Twitter)/Instagram/Facebook with both hashtags #WutheringWaves and #WuWaFanart included.
</p>
</li>
<li>
<p>
Complete the submission form with your submission details. Once done, your submission will be considered successful.
</p>
</li>
</ol>
<ul>
<li>
Please quote your post link with the right hashtags published publicly on the designated platforms.
</li>
</ul>
<p>
Submission form: &lt;https://forms.gle/wkPmsgEBDouGWghL6&gt;
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/u168qq2zjwcxhk1bz6-1763608773908.jpg"/>
</p>
<p>
Submission Period
</p>
<p>
2025/11/20 - 2025/12/14 (PT)
</p>
<p>
Rewards
</p>
<p>
1st Place (5 Winners): iPhone 17 Pro 512GB
</p>
<p>
2nd Place (5 Winners): 6,000 Astrites &amp; 800 USD
</p>
<p>
3rd Place (10 Winners): 3,000 Astrites &amp; 400 USD
</p>
<p>
4th Place (15 Winners): 2,000 Astrites &amp; 200 USD
</p>
<p>
5th Place (20 Winners): 1,000 Astrites &amp; $50 Amazon Gift Card
</p>
<p>
Lucky Prize (20 Winners): $20 Amazon Gift Card
</p>
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/rhlswxapuo1ndc0psh-1763608890819.jpg"/>
</p>
<p>
<strong>
Judging Criteria
</strong>
</p>
<p>
All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.
</p>
<p>
<strong>
Notes
</strong>
</p>
<ol>
<li>
<p>
To qualify for participation, you should include both hashtags #WutheringWaves and #WuWaFanart in your post and fill out the submission form.
</p>
</li>
<li>
<p>
Deleted posts will not be qualified for entitlement of rewards.
</p>
</li>
<li>
<p>
You can submit multiple entries and win multiple rewards. However, the same work published on different platforms will not count towards the rewards.
</p>
</li>
<li>
<p>
Entries listed below may be excluded from the judging process:
</p>
</li>
</ol>
<ul>
<li>
<p>
Works not created in accordance with Wuthering Waves
</p>
</li>
<li>
<p>
Works found to contain plagiarism or infringement of intellectual property rights
</p>
</li>
<li>
<p>
Works submitted outside the event period
</p>
</li>
<li>
<p>
Works created with the assistance of AI technology
</p>
</li>
<li>
<p>
Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism
</p>
</li>
<li>
<p>
Works that have already been used for commercial purposes
</p>
</li>
<li>
<p>
Works previously entered into other fan creation events
</p>
</li>
<li>
<p>
Works deemed inappropriate by the judges
</p>
</li>
</ul>
<ol start="5">
<li>
<p>
Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.
</p>
</li>
<li>
<p>
This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.
</p>
</li>
<li>
<p>
By participating in the event, you grant KURO GAMES the right to freely republish your submitted content on the internet and social media platforms, with appropriate credit given to the creator. No additional notice will be provided prior to publication.
</p>
</li>
<li>
<p>
This event is available solely to participants on the designated servers listed below: America, Europe, Asia, SEA, HMT(HK,MO,TW).
</p>
</li>
</ol>

107
html/3665.html generated Normal file
View File

@@ -0,0 +1,107 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1763568000000/cxsrylia22we4cxm7r-1763609239807.jpg"/>
</p>
<p>
Dear Rovers,
</p>
<p>
The Wuthering Waves Battle Rush is now live! Record and share your most exciting battle moments with the hashtags #WutheringWaves and #WuwaBattle on X (Twitter)/YouTube Shorts/TikTok to compete for a reward of Astrite x2,000 and a chance to get featured on our social media with direct credits! Other than these rewards, 10 extra winners will be selected to receive a $50 Amazon Gift Card.
</p>
<p>
Showcase your outstanding battle tactics in a condensed clip and share them with us!
</p>
<p>
<strong>
Content Requirement
</strong>
</p>
<p>
Create your own combat video featuring Wuthering Waves.
</p>
<p>
We require no limits to the characters, level, or scenes. All entries that feature your combat in Wuthering Waves are qualified to join the event and compete for rewards!
</p>
<p>
<strong>
How to Submit
</strong>
</p>
<p>
Post your work on X (Twitter)/YouTube Shorts/TikTok with both hashtags #WutheringWaves and #WuwaBattle included publicly.
</p>
<p>
<strong>
Submission Period
</strong>
</p>
<p>
2025/11/20 - 2025/12/18 (PT)
</p>
<p>
<strong>
Judging Criteria
</strong>
</p>
<p>
All eligible works will undergo evaluation based on their adherence to the theme, degree of completion, reception among players, and other relevant factors.
</p>
<p>
<strong>
Notes
</strong>
</p>
<p>
To qualify for participation, you should include both hashtags #WutheringWaves and #WuwaBattle in your post.
</p>
<p>
Deleted posts will not be qualified for entitlement of rewards.
</p>
<p>
You can submit multiple entries. However, the same work published on different platforms will not count towards the rewards.
</p>
<p>
Entries listed below may be excluded from the judging process:
</p>
<ul>
<li>
<p>
Works not created in accordance with Wuthering Waves
</p>
</li>
<li>
<p>
Works found to contain plagiarism or infringement of intellectual property rights
</p>
</li>
<li>
<p>
Works submitted outside the event period
</p>
</li>
<li>
<p>
Works created with the assistance of AI technology
</p>
</li>
<li>
<p>
Works featuring extremely aggressive content, including but not limited to themes of pornography, violence, politics, or racism
</p>
</li>
<li>
<p>
Works that have already been used for commercial purposes
</p>
</li>
<li>
<p>
Works deemed inappropriate by the judges
</p>
</li>
</ul>
<p>
Failure to reply to the official staff within 7 days from the date of notification will be considered a waiver of entitlement to the rewards.
</p>
<p>
This event is open to submissions from all languages, as creators proficient in any language are eligible to compete for rewards. Entries differing only in language will be treated as equivalent works.
</p>

54
html/3672.html generated Normal file
View File

@@ -0,0 +1,54 @@
<p>
<img alt="" src="https://hw-media-cdn-mingchao.kurogame.com/object/1764086400000/ldt3k8vm9hq09qzl7v-1764152839874.jpg"/>
</p>
<p>
As the Tactical Simulacra project advances, the Huaxu Academy has successfully achieved the measurement of Tunability, a property through which countless Reverberations converge into Tacet Discords. Disrupting their Tunability would mean a lethal blow that paralyzes them...
</p>
<h1>
Duration
</h1>
<p>
2025-11-27 04:00 - 2025-12-15 03:59 (server time)
</p>
<h1>
Rewards
</h1>
<p>
Astrite x600, Premium Resonance Potion x16, Premium Energy Core x16, Premium Sealed Tube x16, Premium Tuner x100, Shell Credit x608888, and other Materials.
</p>
<h1>
Eligibility
</h1>
<p>
Reach Union Level 14.
</p>
<h1>
Event Rules
</h1>
<ul>
<li>
<p>
In Tactical Simulacra: Off Tune, challenge waves of powerful enemies using special buffs across different simulation domains.
</p>
</li>
<li>
<p>
Tactical Simulacra: Off Tune has a total of 6 stages. Reach 1000 points in a stage to unlock the next one.
</p>
</li>
<li>
<p>
As you complete more challenges, new special buffs will be available to you in the subsequent challenges.
</p>
</li>
<li>
<p>
The results of each challenge will be tallied based on Monster Points, Time Points, and Technical Points. Monster Points are earned by defeating enemies in challenges; Time Points are earned based on the time remaining at challenge completion and a conversation factor that increases with the number of enemies that are defeated; Technical Points are earned by triggering Counterattacks, successful Dodges, and Dodge Counters.
</p>
</li>
</ul>
<p>
<em>
In Tactical Simulacra: Off Tune, some of your attacks build up certain enemies' Off-Tune Level. Once their Off-Tune Level reaches the limit, they enter the Mistune state. During this state, you can unleash a powerful Tune Break to shatter their defenses. Landing a Tune Break resets the enemies' Off-Tune Level and inflicts Tune Disruption, leaving them vulnerable to follow-up attacks.
</em>
</p>

View File

@@ -3,13 +3,67 @@ name = "wutheringwaves"
version = "0.1.0"
description = "Wuthering Waves archive"
readme = "README.md"
requires-python = ">=3.13"
requires-python = ">=3.14"
dependencies = [
"aiofiles",
"beautifulsoup4",
"httpx",
"markdown>=3.8",
"markdown",
"markdownify",
"markupsafe",
"mdformat",
]
[tool.ruff]
preview = true
line-length = 160
lint.select = ["ALL"]
lint.pydocstyle.convention = "google"
lint.ignore = [
"ANN201", # Checks that public functions and methods have return type annotations.
"ARG001", # Checks for the presence of unused arguments in function definitions.
"B008", # Allow Form() as a default value
"CPY001", # Missing copyright notice at top of file
"D100", # Checks for undocumented public module definitions.
"D101", # Checks for undocumented public class definitions.
"D102", # Checks for undocumented public method definitions.
"D104", # Missing docstring in public package.
"D105", # Missing docstring in magic method.
"D105", # pydocstyle - missing docstring in magic method
"D106", # Checks for undocumented public class definitions, for nested classes.
"ERA001", # Found commented-out code
"FBT003", # Checks for boolean positional arguments in function calls.
"FIX002", # Line contains TODO
"G002", # Allow % in logging
"PGH003", # Check for type: ignore annotations that suppress all type warnings, as opposed to targeting specific type warnings.
"PLR6301", # Checks for the presence of unused self parameter in methods definitions.
"RUF029", # Checks for functions declared async that do not await or otherwise use features requiring the function to be declared async.
"TD003", # Checks that a TODO comment is associated with a link to a relevant issue or ticket.
"PLR0913", # Checks for function definitions that include too many arguments.
"PLR0917", # Checks for function definitions that include too many positional arguments.
"N815", # Checks for class variable names that follow the mixedCase convention.
# Conflicting lint rules when using Ruff's formatter
# https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
"COM812", # Checks for the absence of trailing commas.
"COM819", # Checks for the presence of prohibited trailing commas.
"D206", # Checks for docstrings that are indented with tabs.
"D300", # Checks for docstrings that use '''triple single quotes''' instead of """triple double quotes""".
"E111", # Checks for indentation with a non-multiple of 4 spaces.
"E114", # Checks for indentation of comments with a non-multiple of 4 spaces.
"E117", # Checks for over-indented code.
"ISC001", # Checks for implicitly concatenated strings on a single line.
"ISC002", # Checks for implicitly concatenated strings that span multiple lines.
"Q000", # Checks for inline strings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.inline-quotes option.
"Q001", # Checks for multiline strings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.multiline-quotes setting.
"Q002", # Checks for docstrings that use single quotes or double quotes, depending on the value of the lint.flake8-quotes.docstring-quotes setting.
"Q003", # Checks for strings that include escaped quotes, and suggests changing the quote style to avoid the need to escape them.
"W191", # Checks for indentation that uses tabs.
]
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["S101", "D103", "PLR2004"]
[tool.ruff.lint.isort]
force-single-line = true

267
scrape.py
View File

@@ -1,4 +1,4 @@
import asyncio # noqa: CPY001, D100
import asyncio
import json
import logging
import os
@@ -6,28 +6,52 @@ import re
import shutil
import subprocess # noqa: S404
import time
from datetime import UTC, datetime
from datetime import UTC
from datetime import datetime
from pathlib import Path
from typing import TYPE_CHECKING, Any, Literal
from typing import TYPE_CHECKING
from typing import Any
from typing import Literal
import aiofiles
import anyio
import httpx
import markdown
import mdformat
from bs4 import BeautifulSoup
from markdownify import MarkdownConverter # pyright: ignore[reportMissingTypeStubs]
from markupsafe import Markup, escape
from markdownify import MarkdownConverter
from markupsafe import Markup
from markupsafe import escape
if TYPE_CHECKING:
from collections.abc import Coroutine
logging.basicConfig(
level=logging.INFO,
format="%(message)s",
)
logging.basicConfig(level=logging.INFO, format="%(message)s")
logger: logging.Logger = logging.getLogger("wutheringwaves")
DISCORD_LINK_PATTERN: re.Pattern[str] = re.compile(r'\[([^\]]+)\]\((https?://[^\s)]+) "\2"\)')
URL_PREFIX_PATTERN: re.Pattern[str] = re.compile(r"^https?://(www\.)?")
NON_BREAKING_SPACE_PATTERN: re.Pattern[str] = re.compile(r"\xa0")
EMPTY_CODE_BLOCK_PATTERN: re.Pattern[str] = re.compile(r"```[ \t]*\n[ \t]*\n```")
SQUARE_BRACKETS_PATTERN: re.Pattern[str] = re.compile(r"^\s*\[([^\]]+)\]\s*$", re.MULTILINE)
BALL_PATTERN: re.Pattern[str] = re.compile(r"\s*(.*?)\n", re.MULTILINE)
REFERENCE_MARK_PATTERN: re.Pattern[str] = re.compile(r"^\s*※\s*(\S.*?)\s*$", re.MULTILINE)
ESCAPED_STAR_PATTERN: re.Pattern[str] = re.compile(r"\\\*(.*)", re.MULTILINE)
CIRCLED_NUMBER_PATTERNS: dict[str, tuple[re.Pattern[str], str]] = {
"": (re.compile(r"^\s*①\s*(.*?)\s*$", re.MULTILINE), "1"),
"": (re.compile(r"^\s*②\s*(.*?)\s*$", re.MULTILINE), "2"),
"": (re.compile(r"^\s*③\s*(.*?)\s*$", re.MULTILINE), "3"),
"": (re.compile(r"^\s*④\s*(.*?)\s*$", re.MULTILINE), "4"),
"": (re.compile(r"^\s*⑤\s*(.*?)\s*$", re.MULTILINE), "5"),
"": (re.compile(r"^\s*⑥\s*(.*?)\s*$", re.MULTILINE), "6"),
"": (re.compile(r"^\s*⑦\s*(.*?)\s*$", re.MULTILINE), "7"),
"": (re.compile(r"^\s*⑧\s*(.*?)\s*$", re.MULTILINE), "8"),
"": (re.compile(r"^\s*⑨\s*(.*?)\s*$", re.MULTILINE), "9"),
"": (re.compile(r"^\s*⑩\s*(.*?)\s*$", re.MULTILINE), "10"),
}
async def fetch_json(url: str, client: httpx.AsyncClient) -> dict[Any, Any] | None:
"""Fetch JSON data from a URL.
@@ -83,9 +107,7 @@ def set_file_timestamp(filepath: Path, timestamp_str: str) -> bool:
"""
try:
# Parse the timestamp string
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(
tzinfo=UTC
)
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
# Convert to Unix timestamp
timestamp: float = dt.timestamp()
@@ -116,9 +138,7 @@ def get_file_timestamp(timestamp_str: str) -> float:
try:
# Parse the timestamp string
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(
tzinfo=UTC
)
dt: datetime = datetime.strptime(timestamp_str, "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
# Convert to Unix timestamp
return dt.timestamp()
except ValueError:
@@ -137,13 +157,7 @@ def commit_file_with_timestamp(filepath: Path) -> bool: # noqa: PLR0911
"""
# Check in Git history if we already have this file
git_log_cmd: list[str] = [
"git",
"log",
"--pretty=format:%H",
"--follow",
str(filepath),
]
git_log_cmd: list[str] = ["git", "log", "--pretty=format:%H", "--follow", str(filepath)]
try:
git_log_output: str = subprocess.check_output(git_log_cmd, text=True).strip() # noqa: S603
if git_log_output:
@@ -167,25 +181,14 @@ def commit_file_with_timestamp(filepath: Path) -> bool: # noqa: PLR0911
# Get the file's modification time
timestamp: float = filepath.stat().st_mtime
git_time: str = datetime.fromtimestamp(timestamp, tz=UTC).strftime(
"%Y-%m-%dT%H:%M:%S"
)
git_time: str = datetime.fromtimestamp(timestamp, tz=UTC).strftime("%Y-%m-%dT%H:%M:%S")
# Stage the file
subprocess.run([git_executable, "add", str(filepath)], check=True, text=True) # noqa: S603
# Commit the file with the modification time as the commit time
env: dict[str, str] = {
**os.environ,
"GIT_AUTHOR_DATE": git_time,
"GIT_COMMITTER_DATE": git_time,
}
subprocess.run( # noqa: S603
[git_executable, "commit", "-m", f"Add {filepath.name}"],
check=True,
env=env,
text=True,
)
env: dict[str, str] = {**os.environ, "GIT_AUTHOR_DATE": git_time, "GIT_COMMITTER_DATE": git_time}
subprocess.run([git_executable, "commit", "-m", f"Add {filepath.name}"], check=True, env=env, text=True) # noqa: S603
except subprocess.CalledProcessError:
logger.exception("Subprocess error occurred while committing the file.")
return False
@@ -222,9 +225,7 @@ def add_articles_to_readme(articles: dict[Any, Any] | None = None) -> None:
# Create new content
new_lines: list[str] = []
if articles_section_index >= 0:
new_lines = lines[
: articles_section_index + 1
] # Keep everything up to "## Articles"
new_lines = lines[: articles_section_index + 1] # Keep everything up to "## Articles"
else:
new_lines = lines
if new_lines and not new_lines[-1].endswith("\n"):
@@ -233,17 +234,11 @@ def add_articles_to_readme(articles: dict[Any, Any] | None = None) -> None:
# Add articles
new_lines.append("\n") # Add a blank line after the heading
for article in sorted(
articles, key=lambda x: x.get("createTime", ""), reverse=True
):
for article in sorted(articles, key=lambda x: x.get("createTime", ""), reverse=True):
article_id: str = str(article.get("articleId", ""))
article_title: str = article.get("articleTitle", "No Title")
article_url: str = (
f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
)
new_lines.append(
f"- [{article_title}]({article_url}) [[json]](articles/{article_id}.json)\n",
)
article_url: str = f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
new_lines.append(f"- [{article_title}]({article_url}) [[json]](articles/{article_id}.json)\n")
# Add articles directory section
new_lines.append("\n## Articles Directory\n\n")
@@ -320,16 +315,12 @@ def format_discord_links(md: str) -> str:
def repl(match: re.Match[str]) -> str:
url: str | Any = match.group(2)
display: str = re.sub(pattern=r"^https?://(www\.)?", repl="", string=url)
display: str = URL_PREFIX_PATTERN.sub("", url)
return f"[{display}]({url})"
# Before: [Link](https://example.com "Link")
# After: [Link](https://example.com)
formatted_links_md: str = re.sub(
pattern=r'\[([^\]]+)\]\((https?://[^\s)]+) "\2"\)',
repl=repl,
string=md,
)
formatted_links_md: str = DISCORD_LINK_PATTERN.sub(repl, md)
return formatted_links_md
@@ -372,7 +363,7 @@ def handle_stars(text: str) -> str:
return "\n\n".join(output)
def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str: # noqa: PLR0914, PLR0915
def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str: # noqa: C901, PLR0914, PLR0915
"""Generate an Atom feed from a list of articles.
Args:
@@ -390,11 +381,7 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
if articles:
latest_entry = articles[0].get("createTime", "")
if latest_entry:
latest_entry = (
datetime.strptime(str(latest_entry), "%Y-%m-%d %H:%M:%S")
.replace(tzinfo=UTC)
.isoformat()
)
latest_entry = datetime.strptime(str(latest_entry), "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC).isoformat()
for article in articles:
article_id: str = str(article.get("articleId", ""))
@@ -411,11 +398,8 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
if not article_content:
article_content = article_title
converter: MarkdownConverter = MarkdownConverter(
heading_style="ATX",
strip=["pre", "code"],
)
article_content_converted = str(converter.convert(article_content).strip()) # type: ignore # noqa: PGH003
converter: MarkdownConverter = MarkdownConverter(heading_style="ATX", strip=["pre", "code"])
article_content_converted = str(converter.convert(article_content).strip())
if not article_content_converted:
msg: str = f"Article content is empty for article ID: {article_id}"
@@ -423,106 +407,63 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
article_content_converted = "No content available"
# Remove non-breaking spaces
xa0_removed: str = re.sub(
r"\xa0", " ", article_content_converted
) # Replace non-breaking spaces with regular spaces
xa0_removed: str = NON_BREAKING_SPACE_PATTERN.sub(" ", article_content_converted) # Replace non-breaking spaces with regular spaces
# Replace non-breaking spaces with regular spaces
non_breaking_space_removed: str = xa0_removed.replace(
" ", # noqa: RUF001
" ",
)
non_breaking_space_removed: str = xa0_removed.replace(" ", " ") # noqa: RUF001
# Remove code blocks that has only spaces and newlines inside them
empty_code_block_removed: str = re.sub(
pattern=r"```[ \t]*\n[ \t]*\n```",
repl="",
string=non_breaking_space_removed, # type: ignore # noqa: PGH003
)
empty_code_block_removed: str = EMPTY_CODE_BLOCK_PATTERN.sub("", non_breaking_space_removed)
# [How to Update] should be # How to Update
square_brackets_converted: str = re.sub(
pattern=r"^\s*\[([^\]]+)\]\s*$",
repl=r"# \1",
string=empty_code_block_removed, # type: ignore # noqa: PGH003
flags=re.MULTILINE,
)
square_brackets_converted: str = SQUARE_BRACKETS_PATTERN.sub(r"# \1", empty_code_block_removed)
stars_converted: str = handle_stars(square_brackets_converted)
# If `● Word` is in the content, replace it `## Word` instead with regex
ball_converted: str = re.sub(
pattern=r"\s*(.*?)\n",
repl=r"\n\n## \1\n\n",
string=stars_converted,
flags=re.MULTILINE,
)
ball_converted: str = BALL_PATTERN.sub(r"\n\n## \1\n\n", stars_converted)
# If `※ Word` is in the content, replace it `* word * ` instead with regex
reference_mark_converted: str = re.sub(
pattern=r"^\s*※\s*(\S.*?)\s*$",
repl=r"\n\n*\1*\n\n",
string=ball_converted,
flags=re.MULTILINE,
reference_mark_converted: str = REFERENCE_MARK_PATTERN.sub(r"\n\n*\1*\n\n", ball_converted)
# Replace circled Unicode numbers (①-⑩) with plain numbered text (e.g., "1. ", "2. ", ..., "10. ")
for pattern, number in CIRCLED_NUMBER_PATTERNS.values():
reference_mark_converted = pattern.sub(
rf"\n\n{number}. \1\n\n",
reference_mark_converted,
)
# Replace circled Unicode numbers (①-⑳) with plain numbered text (e.g., "1. ", "2. ", ..., "20. ")
number_symbol: dict[str, str] = {
"": "1",
"": "2",
"": "3",
"": "4",
"": "5",
"": "6",
"": "7",
"": "8",
"": "9",
"": "10",
}
for symbol, number in number_symbol.items():
reference_mark_converted = re.sub(
pattern=rf"^\s*{re.escape(symbol)}\s*(.*?)\s*$",
repl=rf"\n\n{number}. \1\n\n",
string=reference_mark_converted,
flags=re.MULTILINE,
space_before_star_added: str = ESCAPED_STAR_PATTERN.sub(
r"* \1",
reference_mark_converted,
)
space_before_star_added: str = re.sub(
pattern=r"\\\*(.*)",
repl=r"* \1",
string=reference_mark_converted,
flags=re.MULTILINE,
)
markdown_formatted: str = mdformat.text( # type: ignore # noqa: PGH003
space_before_star_added,
options={
"number": True, # Allow 1., 2., 3. numbering
},
)
# Format Markdown safely. mdformat doesn't support a "number" option here,
# and unknown options can raise at runtime. We avoid passing invalid options
# and fall back to the raw text if formatting fails for any reason.
try:
formatter: Any = mdformat # Help the type checker by treating mdformat as Any here
markdown_formatted: str = str(formatter.text(space_before_star_added))
except Exception:
logger.exception("mdformat failed; using unformatted markdown text")
markdown_formatted = space_before_star_added
links_fixed: str = format_discord_links(markdown_formatted)
article_escaped: Markup = escape(links_fixed)
article_url: str = (
f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
)
article_url: str = f"https://wutheringwaves.kurogames.com/en/main/news/detail/{article_id}"
article_create_time: str = article.get("createTime", "")
published: str = ""
updated: str = latest_entry
if article_create_time:
timestamp: datetime = datetime.strptime(
str(article_create_time), "%Y-%m-%d %H:%M:%S"
).replace(tzinfo=UTC)
timestamp: datetime = datetime.strptime(str(article_create_time), "%Y-%m-%d %H:%M:%S").replace(tzinfo=UTC)
iso_time: str = timestamp.isoformat()
published = f"<published>{iso_time}</published>"
updated = iso_time
article_category: str = article.get("articleTypeName", "Wuthering Waves")
category: str = (
f'<category term="{escape(article_category)}"/>' if article_category else ""
)
category: str = f'<category term="{escape(article_category)}"/>' if article_category else ""
html: str = markdown.markdown(
text=article_escaped,
@@ -583,7 +524,7 @@ def generate_atom_feed(articles: list[dict[Any, Any]], file_name: str) -> str:
</author>
{"".join(atom_entries)}
</feed>
""" # noqa: E501
"""
return atom_feed
@@ -633,9 +574,7 @@ def create_atom_feeds(output_dir: Path) -> None:
article_create_time: str = article.get("createTime", "")
logger.info("\tArticle ID: %s, Date: %s", article_id, article_create_time)
atom_feed: str = generate_atom_feed(
articles=latest_articles, file_name=atom_feed_path.name
)
atom_feed: str = generate_atom_feed(articles=latest_articles, file_name=atom_feed_path.name)
with atom_feed_path.open("w", encoding="utf-8") as f:
f.write(atom_feed)
logger.info(
@@ -646,9 +585,7 @@ def create_atom_feeds(output_dir: Path) -> None:
# Create the Atom feed for all articles
atom_feed_path_all: Path = Path("articles_all.xml")
atom_feed_all_articles: str = generate_atom_feed(
articles=articles_sorted, file_name=atom_feed_path_all.name
)
atom_feed_all_articles: str = generate_atom_feed(articles=articles_sorted, file_name=atom_feed_path_all.name)
with atom_feed_path_all.open("w", encoding="utf-8") as f:
f.write(atom_feed_all_articles)
logger.info("Created Atom feed for all articles: %s", atom_feed_path_all)
@@ -711,13 +648,11 @@ async def main() -> Literal[1, 0]:
"""
# Setup
current_time = int(time.time() * 1000) # Current time in milliseconds
base_url = (
"https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/en"
)
base_url = "https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/en"
article_menu_url: str = f"{base_url}/ArticleMenu.json?t={current_time}"
article_base_url: str = f"{base_url}/article/"
output_dir = Path("articles")
output_dir.mkdir(exist_ok=True)
await anyio.Path(output_dir).mkdir(exist_ok=True)
logger.info("Fetching article menu from %s", article_menu_url)
@@ -735,29 +670,19 @@ async def main() -> Literal[1, 0]:
# Extract article IDs
logger.info("Extracting article IDs...")
article_ids: list[str] = [
str(item["articleId"]) for item in menu_data if item.get("articleId")
]
article_ids: list[str] = [str(item["articleId"]) for item in menu_data if item.get("articleId")]
if not article_ids:
logger.warning(
"No article IDs found. Please check the JSON structure of ArticleMenu.json."
)
logger.warning("No article IDs found. Please check the JSON structure of ArticleMenu.json.")
logger.warning("Full menu response for debugging:")
logger.warning(json.dumps(menu_data, indent=2))
return 1
# Get list of already downloaded article IDs
existing_files: list[str] = [
file.stem
for file in output_dir.glob("*.json")
if file.stem != "ArticleMenu"
]
existing_files: list[str] = [file.stem async for file in anyio.Path(output_dir).glob("*.json") if file.stem != "ArticleMenu"]
# Filter out already downloaded articles
new_article_ids: list[str] = [
article_id for article_id in article_ids if article_id not in existing_files
]
# Filter out already downloaded articles
new_article_ids: list[str] = [article_id for article_id in article_ids if article_id not in existing_files]
if new_article_ids:
logger.info("Found %s new articles to download", len(new_article_ids))
@@ -765,18 +690,14 @@ async def main() -> Literal[1, 0]:
# Download each new article
download_tasks: list[Coroutine[Any, Any, dict[Any, Any] | None]] = []
for article_id in new_article_ids:
article_url: str = (
f"{article_base_url}{article_id}.json?t={current_time}"
)
article_url: str = f"{article_base_url}{article_id}.json?t={current_time}"
output_file: Path = output_dir / f"{article_id}.json"
logger.info("Downloading article %s from %s", article_id, article_url)
download_tasks.append(fetch_json(article_url, client))
# Wait for all downloads to complete
results: list[dict[Any, Any] | BaseException | None] = await asyncio.gather(
*download_tasks, return_exceptions=True
)
results: list[dict[Any, Any] | BaseException | None] = await asyncio.gather(*download_tasks, return_exceptions=True)
# Process the downloaded articles
for i, result in enumerate(results):
@@ -788,18 +709,12 @@ async def main() -> Literal[1, 0]:
continue
if not result:
logger.warning(
"Downloaded article %s is empty or invalid", article_id
)
logger.warning("Downloaded article %s is empty or invalid", article_id)
continue
# Save the article JSON
if isinstance(result, dict) and await save_prettified_json(
result, output_file
):
logger.info(
"Successfully downloaded and prettified %s", output_file
)
if isinstance(result, dict) and await save_prettified_json(result, output_file):
logger.info("Successfully downloaded and prettified %s", output_file)
else:
logger.info("No new articles to download")

237
uv.lock generated
View File

@@ -1,237 +0,0 @@
version = 1
revision = 2
requires-python = ">=3.13"
[[package]]
name = "aiofiles"
version = "24.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" },
]
[[package]]
name = "anyio"
version = "4.9.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "idna" },
{ name = "sniffio" },
]
sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" },
]
[[package]]
name = "beautifulsoup4"
version = "4.13.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "soupsieve" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" },
]
[[package]]
name = "certifi"
version = "2025.7.9"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/de/8a/c729b6b60c66a38f590c4e774decc4b2ec7b0576be8f1aa984a53ffa812a/certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079", size = 160386, upload-time = "2025-07-09T02:13:58.874Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/66/f3/80a3f974c8b535d394ff960a11ac20368e06b736da395b551a49ce950cce/certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39", size = 159230, upload-time = "2025-07-09T02:13:57.007Z" },
]
[[package]]
name = "h11"
version = "0.16.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
]
[[package]]
name = "httpcore"
version = "1.0.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "h11" },
]
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
]
[[package]]
name = "httpx"
version = "0.28.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "certifi" },
{ name = "httpcore" },
{ name = "idna" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
]
[[package]]
name = "idna"
version = "3.10"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" },
]
[[package]]
name = "markdown"
version = "3.8.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" },
]
[[package]]
name = "markdown-it-py"
version = "3.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mdurl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
]
[[package]]
name = "markdownify"
version = "1.1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "beautifulsoup4" },
{ name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2f/78/c48fed23c7aebc2c16049062e72de1da3220c274de59d28c942acdc9ffb2/markdownify-1.1.0.tar.gz", hash = "sha256:449c0bbbf1401c5112379619524f33b63490a8fa479456d41de9dc9e37560ebd", size = 17127, upload-time = "2025-03-05T11:54:40.574Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/64/11/b751af7ad41b254a802cf52f7bc1fca7cabe2388132f2ce60a1a6b9b9622/markdownify-1.1.0-py3-none-any.whl", hash = "sha256:32a5a08e9af02c8a6528942224c91b933b4bd2c7d078f9012943776fc313eeef", size = 13901, upload-time = "2025-03-05T11:54:39.454Z" },
]
[[package]]
name = "markupsafe"
version = "3.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" },
{ url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" },
{ url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" },
{ url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" },
{ url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" },
{ url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" },
{ url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" },
{ url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" },
{ url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" },
{ url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" },
{ url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" },
{ url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" },
{ url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" },
{ url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" },
{ url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" },
{ url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" },
{ url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" },
{ url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" },
{ url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" },
{ url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" },
]
[[package]]
name = "mdformat"
version = "0.7.22"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
]
sdist = { url = "https://files.pythonhosted.org/packages/fc/eb/b5cbf2484411af039a3d4aeb53a5160fae25dd8c84af6a4243bc2f3fedb3/mdformat-0.7.22.tar.gz", hash = "sha256:eef84fa8f233d3162734683c2a8a6222227a229b9206872e6139658d99acb1ea", size = 34610, upload-time = "2025-01-30T18:00:51.418Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f2/6f/94a7344f6d634fe3563bea8b33bccedee37f2726f7807e9a58440dc91627/mdformat-0.7.22-py3-none-any.whl", hash = "sha256:61122637c9e1d9be1329054f3fa216559f0d1f722b7919b060a8c2a4ae1850e5", size = 34447, upload-time = "2025-01-30T18:00:48.708Z" },
]
[[package]]
name = "mdurl"
version = "0.1.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
]
[[package]]
name = "six"
version = "1.17.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
]
[[package]]
name = "sniffio"
version = "1.3.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
]
[[package]]
name = "soupsieve"
version = "2.7"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" },
]
[[package]]
name = "typing-extensions"
version = "4.14.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" },
]
[[package]]
name = "wutheringwaves"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "aiofiles" },
{ name = "beautifulsoup4" },
{ name = "httpx" },
{ name = "markdown" },
{ name = "markdownify" },
{ name = "markupsafe" },
{ name = "mdformat" },
]
[package.metadata]
requires-dist = [
{ name = "aiofiles" },
{ name = "beautifulsoup4" },
{ name = "httpx" },
{ name = "markdown", specifier = ">=3.8" },
{ name = "markdownify" },
{ name = "markupsafe" },
{ name = "mdformat" },
]