LyricSense 歌词技能 让 AI 通过歌词「听」音乐的 OpenClaw 技能。 功能 1. 搜索歌词 — 通过歌手 + 歌名获取 LRC 格式歌词 2. 展示歌词 — 格式化输出,高亮当前句 3. 获取封面 — 返回专辑封面图片 URL 4. 快速跳转 — 生成 LyricSense 网页界面链接,点击即可同步播放 5. 联动日推 — 与 netease-daily-v3 配合,为日推歌单每首歌添加歌词入口 API 说明 公共 API(无需部署) 响应格式:纯文本 LRC 格式 本地 API(自部署,无限制) 网页界面(带同步高亮) 龙虾使用示例 示例 1:搜索并展示歌词 用户: 帮我查一下《晚安》颜人中的歌词 龙虾: 返回后解析 LRC 并展示: 示例 2:只知道歌名 用户: 夜空中最亮的星 歌词给我 示例 3:联动 netease-daily-v3 日推 当龙虾获取到日推歌单时,为每首歌自动生成歌词链接: 示例 4:格式化输出(供龙虾直接展示) 错误处理 | 情况 | 处理方式 | |------|---------| | 歌词为空 | 提示用户换关键词,或只用歌名/歌手单独搜索 | | CORS 跨域 | 自动通过 代理转发 | | API 超时 | 重试 1 次,仍失败则提示使用本地部署 | | LRC 格式异常 | 尝试按行分割,过滤无效行 | 部署方式 在线…

, year):\n year = int(year[:4])\n elif re.match(r'^[0-9]{2}[-/\\s][0-9]{2}[-/\\s][0-9]{4}

LyricSense 歌词技能 让 AI 通过歌词「听」音乐的 OpenClaw 技能。 功能 1. 搜索歌词 — 通过歌手 + 歌名获取 LRC 格式歌词 2. 展示歌词 — 格式化输出,高亮当前句 3. 获取封面 — 返回专辑封面图片 URL 4. 快速跳转 — 生成 LyricSense 网页界面链接,点击即可同步播放 5. 联动日推 — 与 netease-daily-v3 配合,为日推歌单每首歌添加歌词入口 API 说明 公共 API(无需部署) 响应格式:纯文本 LRC 格式 本地 API(自部署,无限制) 网页界面(带同步高亮) 龙虾使用示例 示例 1:搜索并展示歌词 用户: 帮我查一下《晚安》颜人中的歌词 龙虾: 返回后解析 LRC 并展示: 示例 2:只知道歌名 用户: 夜空中最亮的星 歌词给我 示例 3:联动 netease-daily-v3 日推 当龙虾获取到日推歌单时,为每首歌自动生成歌词链接: 示例 4:格式化输出(供龙虾直接展示) 错误处理 | 情况 | 处理方式 | |------|---------| | 歌词为空 | 提示用户换关键词,或只用歌名/歌手单独搜索 | | CORS 跨域 | 自动通过 代理转发 | | API 超时 | 重试 1 次,仍失败则提示使用本地部署 | | LRC 格式异常 | 尝试按行分割,过滤无效行 | 部署方式 在线…

, year):\n year = int(year[-4:])\n else:\n raise ValueError(\"Could not extract year from: {0}\".format(year))\n return year\n\ndef sanitize_int(val):\n try:\n ret = int(val)\n except ValueError:\n m = re.match(r'^.*?([0-9]+).*?

LyricSense 歌词技能 让 AI 通过歌词「听」音乐的 OpenClaw 技能。 功能 1. 搜索歌词 — 通过歌手 + 歌名获取 LRC 格式歌词 2. 展示歌词 — 格式化输出,高亮当前句 3. 获取封面 — 返回专辑封面图片 URL 4. 快速跳转 — 生成 LyricSense 网页界面链接,点击即可同步播放 5. 联动日推 — 与 netease-daily-v3 配合,为日推歌单每首歌添加歌词入口 API 说明 公共 API(无需部署) 响应格式:纯文本 LRC 格式 本地 API(自部署,无限制) 网页界面(带同步高亮) 龙虾使用示例 示例 1:搜索并展示歌词 用户: 帮我查一下《晚安》颜人中的歌词 龙虾: 返回后解析 LRC 并展示: 示例 2:只知道歌名 用户: 夜空中最亮的星 歌词给我 示例 3:联动 netease-daily-v3 日推 当龙虾获取到日推歌单时,为每首歌自动生成歌词链接: 示例 4:格式化输出(供龙虾直接展示) 错误处理 | 情况 | 处理方式 | |------|---------| | 歌词为空 | 提示用户换关键词,或只用歌名/歌手单独搜索 | | CORS 跨域 | 自动通过 代理转发 | | API 超时 | 重试 1 次,仍失败则提示使用本地部署 | | LRC 格式异常 | 尝试按行分割,过滤无效行 | 部署方式 在线…

, val)\n if m:\n ret = int(m.group(1))\n else:\n raise ValueError('int contains no in {0}'.format(val))\n return ret\n\ndef sanitize_bool(val):\n val = str(val).strip().lower()\n if val in ('true', '1'):\n return True\n elif val in ('false', '0', ''):\n return False\n else:\n return int(val) !=0\n\ndef get_easy_tracknum(afile, norm_key, _tag_name='tracknumber'):\n tracknumber = str(afile.mfile.get(_tag_name, None))\n if tracknumber in (None, 'None'):\n tracknumber = None\n else:\n tracknumber = tracknumber.split('/')[0]\n return tracknumber\n\ndef set_easy_tracknum(afile, norm_key, val, _tag_name='tracknumber'):\n tracknumber = [i for i in str(afile.mfile.get(_tag_name, '0/0')).split('/')]\n tracknumber += [0] * (2 - len(tracknumber))\n tracknumber[0] = val\n afile.set_raw(norm_key, _tag_name,\n '/'.join(str(i) for i in tracknumber),\n appendable=False)\n\ndef get_easy_totaltracks(afile, norm_key, _tag_name='tracknumber'):\n tracknumber = str(afile.mfile.get(_tag_name, None))\n if tracknumber in (None, 'None'):\n tracknumber = None\n else:\n try:\n tracknumber = tracknumber.split('/')[1]\n except IndexError:\n tracknumber = None\n return tracknumber\n\ndef set_easy_totaltracks(afile, norm_key, val, _tag_name='tracknumber'):\n tracknumber = [i for i in str(afile.mfile.get(_tag_name, '0/0')).split('/')]\n tracknumber += [0] * (2 - len(tracknumber))\n tracknumber[1] = val\n afile.set_raw(norm_key, _tag_name,\n '/'.join(str(i) for i in tracknumber),\n appendable=False)\n\ndef get_easy_discnum(afile, norm_key, _tag_name='discnumber'):\n discnumber = str(afile.mfile.get(_tag_name, None))\n if discnumber in (None, 'None'):\n discnumber = None\n else:\n discnumber = discnumber.split('/')[0]\n return discnumber\n\ndef set_easy_discnum(afile, norm_key, val, _tag_name='discnumber'):\n discnumber = [i for i in str(afile.mfile.get(_tag_name, '0/0')).split('/')]\n discnumber += [0] * (2 - len(discnumber))\n discnumber[0] = val\n afile.set_raw(norm_key, _tag_name,\n '/'.join(str(i) for i in discnumber),\n appendable=False)\n\ndef get_easy_totaldiscs(afile, norm_key, _tag_name='discnumber'):\n discnumber = str(afile.mfile.get(_tag_name, None))\n if discnumber in (None, 'None'):\n discnumber = None\n else:\n try:\n discnumber = discnumber.split('/')[1]\n except IndexError:\n discnumber = None\n return discnumber\n\ndef set_easy_totaldiscs(afile, norm_key, val, _tag_name='discnumber'):\n discnumber = [i for i in str(afile.mfile.get(_tag_name, '0/0')).split('/')]\n discnumber += [0] * (2 - len(discnumber))\n discnumber[1] = val\n afile.set_raw(norm_key, _tag_name,\n '/'.join(str(i) for i in discnumber),\n appendable=False)\n\nPicBlock = namedtuple('PicBlock', ('typeid', 'picturetype', 'mime', 'format',\n 'descr', 'width', 'height', 'color_depth',\n 'colors_indexed', 'data'))\nPICTURE_TYPE_LUT = {0: 'other', 1: 'icon', 2: 'other icon', 3: 'front cover',\n 4: 'back cover', 5: 'leaflet', 6: 'media', 7: 'lead artist',\n 8: 'artist', 9: 'conductor', 10: 'band', 11: 'composer',\n 12: 'lyricist', 13: 'recording location',\n 14: 'during recording', 15: 'during performance',\n 16: 'screen capture', 17: 'coloured fish', 18: 'illustration',\n 19: 'artist logo', 20: 'publisher logo'}\n\ndef _split(it, i):\n return it[:i], it[i:]\n\ndef parse_picture_block(dat):\n head, rest = _split(dat, 2 * 4)\n typeid, mime_len = struct.unpack('>ii', head)\n mime, rest = _split(rest, mime_len)\n mime = mime.decode('ascii').lower()\n head, rest = _split(rest, 1 * 4)\n descr_len, = struct.unpack('>i', head)\n descr, rest = _split(rest, descr_len)\n descr = descr.decode('utf-8')\n head, rest = _split(rest, 5 * 4)\n width, height, cdepth, cidx, dat_len = struct.unpack('>iiiii', head)\n dat = rest\n pic = PicBlock(typeid=typeid, picturetype=PICTURE_TYPE_LUT[typeid],\n mime=mime, format=mime.split('/')[1],\n descr=descr, width=width, height=height, color_depth=cdepth,\n colors_indexed=cidx, data=dat)\n assert len(dat) == dat_len\n return pic\n","content_type":"text/x-python; charset=utf-8","language":"python","size":5427,"content_sha256":"a1d0676a23aa0e973aef6ced2827f8a2392952758a03c9b89c114197daa8d93c"},{"filename":"scripts/LrcApi/mod/music_tag/vorbis.py","content":"#!/usr/bin/env python\n# coding: utf-8\n\nimport base64\nimport itertools\n\nimport mutagen.ogg\nimport mutagen.oggvorbis\nimport mutagen.oggopus\nimport mutagen.oggflac\nimport mutagen.oggtheora\nimport mutagen.oggspeex\n\nfrom . import util\nfrom .file import Artwork, AudioFile, MetadataItem, TAG_MAP_ENTRY\n\n\ndef get_pictures(afile, norm_key):\n artworks = []\n\n pics_dat = afile.mfile.get(\"coverart\", [])\n mimes = afile.mfile.get(\"coverartmime\", [])\n for dat, mime in itertools.zip_longest(pics_dat, mimes, fillvalue=\"\"):\n image_data = base64.b64decode(dat.encode(\"ascii\"))\n artworks = Artwork(image_data)\n\n for p in afile.mfile.tags['metadata_block_picture']:\n pb = util.parse_picture_block(base64.standard_b64decode(p))\n art = Artwork(pb.data, width=pb.width, height=pb.height, fmt=pb.format)\n artworks.append(art)\n\n return MetadataItem(Artwork, None, artworks)\n\ndef set_pictures(afile, norm_key, artworks):\n if not isinstance(artworks, MetadataItem):\n raise TypeError()\n\n pics = []\n for i, art in enumerate(artworks.values):\n if any(v is None for v in (art.mime, art.width, art.height, art.depth)):\n raise ImportError(\"Please install Pillow to properly handle images\")\n pic = mutagen.flac.Picture()\n pic.data = art.raw\n pic.type = art.pic_type\n pic.mime = art.mime\n pic.width = art.width\n pic.height = art.height\n pic.depth = art.depth\n\n pic_data = base64.b64encode(pic.write()).decode('ascii')\n pics.append(pic_data)\n afile.mfile.tags['metadata_block_picture'] = pics\n\ndef rm_pictures(afile, norm_key):\n for k in ('coverart', 'coverartmime', 'metadata_block_picture'):\n if k in afile.mfile.tags:\n del afile.mfile.tags[k]\n\n\nclass OggFile(AudioFile):\n tag_format = \"Ogg\"\n mutagen_kls = mutagen.ogg.OggFileType\n\n _TAG_MAP = {\n 'tracktitle': TAG_MAP_ENTRY(getter='title', setter='title', type=str),\n 'artist': TAG_MAP_ENTRY(getter='artist', setter='artist', type=str),\n 'album': TAG_MAP_ENTRY(getter='album', setter='album', type=str),\n 'albumartist': TAG_MAP_ENTRY(getter='albumartist', setter='albumartist',\n type=str),\n 'composer': TAG_MAP_ENTRY(getter='composer', setter='composer', type=str),\n 'tracknumber': TAG_MAP_ENTRY(getter='tracknumber', setter='tracknumber',\n type=int),\n 'totaltracks': TAG_MAP_ENTRY(getter='tracktotal', setter='tracktotal',\n type=int),\n 'discnumber': TAG_MAP_ENTRY(getter='discnumber', setter='discnumber',\n type=int),\n 'totaldiscs': TAG_MAP_ENTRY(getter='disctotal', setter='disctotal',\n type=int),\n 'genre': TAG_MAP_ENTRY(getter='genre', setter='genre', type=str),\n 'year': TAG_MAP_ENTRY(getter=('date', 'originaldate'),\n setter=('date', 'originaldate'),\n type=int, sanitizer=util.sanitize_year),\n 'lyrics': TAG_MAP_ENTRY(getter='lyrics', setter='lyrics', type=str),\n 'isrc': TAG_MAP_ENTRY(getter='isrc', setter='isrc', type=str),\n 'comment': TAG_MAP_ENTRY(getter='comment', setter='comment', type=str),\n 'compilation': TAG_MAP_ENTRY(getter='compilation', setter='compilation',\n type=int, sanitizer=util.sanitize_bool),\n\n 'artwork': TAG_MAP_ENTRY(getter=get_pictures, setter=set_pictures,\n remover=rm_pictures,\n type=Artwork),\n }\n\n def _ft_setter(self, key, md_val, appendable=True):\n if self.appendable and appendable:\n self.mfile.tags[key] = [str(v) for v in md_val.values]\n else:\n self.mfile.tags[key] = str(md_val.value)\n\n\nclass OggFlacFile(OggFile):\n tag_format = \"OggFlac\"\n mutagen_kls = mutagen.oggflac.OggFLAC\n\n\nclass OggSpeexFile(OggFile):\n tag_format = \"OggSpeex\"\n mutagen_kls = mutagen.oggspeex.OggSpeex\n\n\nclass OggTheoraFile(OggFile):\n tag_format = \"OggTheora\"\n mutagen_kls = mutagen.oggtheora.OggTheora\n\n\nclass OggVorbisFile(OggFile):\n tag_format = \"OggVorbis\"\n mutagen_kls = mutagen.oggvorbis.OggVorbis\n\n _TAG_MAP = OggFile._TAG_MAP.copy()\n _TAG_MAP.update({\n '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'Ogg Vorbis',\n type=str),\n '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None,\n type=int),\n })\n\n\nclass OggOpusFile(OggFile):\n tag_format = \"OggOpus\"\n mutagen_kls = mutagen.oggopus.OggOpus\n\n _TAG_MAP = OggFile._TAG_MAP.copy()\n _TAG_MAP.update({\n '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'Ogg Opus',\n type=str),\n '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None,\n type=int),\n '#samplerate': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None,\n type=int),\n '#bitrate': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None,\n type=int),\n })\n","content_type":"text/x-python; charset=utf-8","language":"python","size":5289,"content_sha256":"f7e0ed0771fc65bb3ceeadaa302049710151f41efce5240c13996e44fb3ce41d"},{"filename":"scripts/LrcApi/mod/music_tag/wave.py","content":"#!/usr/bin/env python\n# coding: utf-8\n\ntry:\n import mutagen.wave\n\n from component.music_tag.id3 import Id3File\n\n\n class WaveId3File(Id3File):\n tag_format = \"Wave[Id3]\"\n mutagen_kls = mutagen.wave.WAVE\n\n def __init__(self, filename, **kwargs):\n super(WaveId3File, self).__init__(filename, **kwargs)\n\n # self.tag_map = self.tag_map.copy()\n # self.tag_map.update({\n # '#codec': TAG_MAP_ENTRY(getter=lambda afile, norm_key: 'mp3',\n # type=str),\n # '#bitspersample': TAG_MAP_ENTRY(getter=lambda afile, norm_key: None,\n # type=int),\n # })\n \nexcept ImportError:\n pass\n","content_type":"text/x-python; charset=utf-8","language":"python","size":757,"content_sha256":"6f69de649cd02d06a18622a40a6875a5a0860c2df06b75bc8b8a237ec5f88794"},{"filename":"scripts/LrcApi/mod/searchx/__init__.py","content":"from concurrent import futures\n\nfrom mod.searchx import api, kugou, netease\n\n\ndef search_all(title, artist, album, timeout=15):\n funcs = [api, kugou, netease]\n results = []\n\n def request(task):\n res: list = task.search(title, artist, album)\n if isinstance(res, list):\n results.extend(res)\n\n with futures.ThreadPoolExecutor() as executor:\n _futures = []\n for func in funcs:\n _futures.append(executor.submit(request, func))\n\n # 等待所有任务完成,或回收超时任务,处理TimeoutError\n try:\n for future in futures.as_completed(_futures, timeout=timeout):\n future.result()\n except futures.TimeoutError:\n # 记录超时任务\n pass\n\n # 回收超时任务\n for future in _futures:\n if future.done():\n if future.exception():\n # 处理异常任务\n pass\n else:\n future.cancel()\n\n return results\n\nif __name__ == \"__main__\":\n print(search_all(\"大地\", \"Beyond\", \"\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":1113,"content_sha256":"e53faf88d514a0ddbeec601ab3c2d06b69d385a63e63073ce9b8c4b0584275b8"},{"filename":"scripts/LrcApi/mod/searchx/api.py","content":"import requests\nimport logging\nfrom mod.args import args\n\n\nlogger = logging.getLogger(__name__)\n\n\nheaders = {\n \"Host\": \"127.0.0.1\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 LrcAPI\",\n \"Authorization\": args(\"token\")\n}\n\n\ndef search(title='', artist='', album='') -> list:\n try:\n url = f\"https://api.lrc.cx/jsonapi?title={title}&artist={artist}&album={album}&path=None&limit=1&api=lrcapi\"\n response = requests.get(url, headers=headers)\n if response.status_code == 200:\n return response.json()\n elif response.status_code == 401:\n logger.warning(\"锂API接口的Token无效,请检查配置\")\n return []\n else:\n logger.warning(f\"锂API接口请求失败,状态码:{response.status_code}\")\n return []\n except Exception as e:\n logger.error(f\"锂API接口请求失败,错误:{e}\")\n return []\n\n\nif __name__ == \"__main__\":\n print(search(title=\"光辉岁月\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":1053,"content_sha256":"335204beca6e7c17c7810f848332953bb3e13484e6c14717f01a61dfa49d35b1"},{"filename":"scripts/LrcApi/mod/searchx/kugou.py","content":"import json\nimport aiohttp\nimport asyncio\nimport base64\nimport random\nimport string\nimport time\nimport logging\n\nfrom functools import lru_cache\n\nfrom mod import textcompare\nfrom mod import tools\n\nfrom mygo.devtools import no_error\n\nheaders: dict = {'User-Agent': '{\"percent\": 21.4, \"useragent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) '\n 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36\", \"system\": \"Chrome '\n '116.0 Win10\", \"browser\": \"chrome\", \"version\": 116.0, \"os\": \"win10\"}', }\nlogger = logging.getLogger(__name__)\n\n\nasync def get_cover(session: aiohttp.ClientSession, m_hash: str, m_id: int|str) -> str:\n def _dfid(num):\n random_str = ''.join(random.sample((string.ascii_letters + string.digits), num))\n return random_str\n\n # 获取a-z 0-9组成的随机23位数列\n def _mid(num):\n random_str = ''.join(random.sample((string.ascii_letters[:26] + string.digits), num))\n return random_str\n\n music_url = 'https://wwwapi.kugou.com/yy/index.php'\n parameter = {\n 'r': 'play/getdata',\n 'hash': m_hash,\n 'dfid': _dfid(23),\n 'mid': _mid(23),\n 'album_id': m_id,\n '_': str(round(time.time() * 1000)) # 时间戳\n }\n json_data_r = await session.get(music_url, headers=headers, params=parameter)\n json_data = json.loads(await json_data_r.text())\n if json_data.get(\"data\"):\n return json_data['data'].get(\"img\")\n return \"\"\n\n\nasync def a_search(title='', artist='', album=''):\n if not any((title, artist, album)):\n return None\n result_list = []\n limit = 3\n async with aiohttp.ClientSession() as session:\n async with session.get(\n f\"http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword={' '.join([item for item in [title, artist, album] if item])}&page=1&pagesize=2&showtype=1\",\n headers=headers) as response:\n if response.status == 200:\n song_info_t: str = await response.text()\n song_info: dict = json.loads(song_info_t)\n song_info: list[dict] = song_info[\"data\"][\"info\"]\n if len(song_info) >= 1:\n for song_item in song_info:\n song_name = song_item[\"songname\"]\n singer_name = song_item.get(\"singername\", \"\")\n song_hash = song_item[\"hash\"]\n album_id = song_item[\"album_id\"]\n album_name = song_item.get(\"album_name\", \"\")\n title_conform_ratio = textcompare.association(title, song_name)\n artist_conform_ratio = textcompare.assoc_artists(artist, singer_name)\n ratio: float = (title_conform_ratio * (artist_conform_ratio+1)/2) ** 0.5\n if ratio >= 0.2:\n async with session.get(\n f\"https://krcs.kugou.com/search?ver=1&man=yes&client=mobi&keyword=&duration=&hash={song_hash}&album_audio_id=\",\n headers=headers) as response2:\n lyrics_info = await response2.json()\n if not lyrics_info[\"candidates\"]:\n continue\n lyrics_id = lyrics_info[\"candidates\"][0][\"id\"]\n lyrics_key = lyrics_info[\"candidates\"][0][\"accesskey\"]\n # 第三层Json,要求获得并解码Base64\n async with session.get(\n f\"http://lyrics.kugou.com/download?ver=1&client=pc&id={lyrics_id}&accesskey={lyrics_key}&fmt=lrc&charset=utf8\",\n headers=headers) as response3:\n lyrics_data = await response3.json()\n lyrics_encode = lyrics_data[\"content\"] # 这里是Base64编码的数据\n lrc_text = tools.standard_lrc(base64.b64decode(lyrics_encode).decode('utf-8')) # 这里解码\n # 结构化JSON数据\n music_json_data: dict = {\n \"title\": song_name,\n \"album\": album_name,\n \"artist\": singer_name,\n \"lyrics\": lrc_text,\n \"cover\": await get_cover(session, song_hash, album_id),\n \"id\": tools.calculate_md5(\n f\"title:{song_name};artists:{singer_name};album:{album_name}\", base='decstr')\n }\n result_list.append({\n \"data\": music_json_data,\n \"ratio\": ratio\n })\n if len(result_list) > limit:\n break\n else:\n return None\n sort_li: list[dict] = sorted(result_list, key=lambda x: x['ratio'], reverse=True)\n return [i.get('data') for i in sort_li]\n\n\n@lru_cache(maxsize=64)\n@no_error(throw=logger.info,\n exceptions=(aiohttp.ClientError, asyncio.TimeoutError, KeyError, IndexError, AttributeError))\ndef search(title='', artist='', album=''):\n return asyncio.run(a_search(title=title, artist=artist, album=album))\n\n\nif __name__ == \"__main__\":\n print(search(album=\"十年\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":5614,"content_sha256":"2575aac1232b4335787e888dbb9b6e5ca3acccae54a00112878cda04c86796d1"},{"filename":"scripts/LrcApi/mod/searchx/migu.py","content":"import requests\n\nfrom mod import tools\n\n\nclass MiGuMusicClient:\n BASE_URL = \"https://m.music.migu.cn/\"\n header = {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',\n 'Referer': 'https://m.music.migu.cn/'\n }\n\n def fetch_lyric(self, song_id):\n url = f'https://music.migu.cn/v3/api/music/audioPlayer/getLyric?copyrightId={song_id}'\n res = requests.get(url, headers=self.header)\n return res.json()[\"lyric\"]\n\n def fetch_id3_by_title(self, title):\n url = self.BASE_URL + f\"migu/remoting/scr_search_tag?rows=10&type=2&keyword={title}&pgc=1\"\n res = requests.get(url, headers=self.header)\n songs = res.json()[\"musics\"]\n results = []\n for song in songs:\n lyrics = self.fetch_lyric(song['copyrightId'])\n results.append({\n \"title\": song['songName'],\n \"album\": song['albumName'],\n \"artist\": song['singerName'],\n \"lrc\": lyrics,\n \"cover\": song['cover'],\n \"id\": tools.calculate_md5(\n f\"title:{song['songName']};artists:{song['singerName']};album:{song['albumName']}\", base='decstr')\n })\n return results\n\n\ndef search(title='', artist='', album='') -> list:\n migumusic = MiGuMusicClient()\n result = migumusic.fetch_id3_by_title(title)\n return result\n\n\nif __name__ == \"__main__\":\n print(search(title=\"光辉岁月\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":1491,"content_sha256":"18d99039b616a1d6157eadccb09b66f819ba2d8462f4b57a5b225a7c457b4e98"},{"filename":"scripts/LrcApi/mod/searchx/netease.py","content":"import json\nimport aiohttp\nimport asyncio\nimport logging\n\nfrom functools import lru_cache\n\nimport urllib\n\nfrom mod import textcompare, tools\nfrom mygo.devtools import no_error\n\nfrom mod.ttscn import t2s\n\nheaders = {\n 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0',\n 'origin': 'https://music.163.com',\n 'referer': 'https://music.163.com',\n}\n\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\n\n# type: 1-songs, 10-albums, 100-artists, 1000-playlists\nCOMMON_SEARCH_URL_WANGYI = 'https://music.163.com/api/cloudsearch/pc?s={}&type={}&offset={}&limit={}'\nALBUM_SEARCH_URL_WANGYI = 'https://music.163.com/api/album/{}?ext=true'\nLYRIC_URL_WANGYI = 'https://music.163.com/api/song/lyric?id={}&lv=1&tv=1'\nARTIST_SEARCH_URL = 'http://music.163.com/api/v1/artist/{}'\nALBUMS_SEARCH_URL = \"http://music.163.com/api/artist/albums/{}?offset=0&total=true&limit=300\"\nALBUM_INFO_URL = \"http://music.163.com/api/album/{}?ext=true\"\n\n\ndef listify(obj):\n if isinstance(obj, list):\n return obj\n else:\n return [obj]\n\n\nasync def search_artist_blur(session: aiohttp.ClientSession, artist_blur, limit=1):\n \"\"\" 由于没有选择交互的过程, 因此 artist_blur 如果输入的不准确, 可能会查询到错误的歌手 \"\"\"\n # logging.info('开始搜索: ' + artist_blur)\n\n num = 0\n if not artist_blur:\n logging.info('Missing artist. Skipping match')\n return None\n\n url = COMMON_SEARCH_URL_WANGYI.format(\n urllib.parse.quote(artist_blur.lower()), 100, 0, limit)\n artists = []\n try:\n json_data_r = await session.get(url, headers=headers)\n response = json.loads(await json_data_r.text())\n\n artist_results = response['result']\n num = int(artist_results['artistCount'])\n lim = min(limit, num)\n # logging.info('搜索到的歌手数量:' + str(lim))\n for i in range(lim):\n try:\n artists = listify(artist_results['artists'])\n except:\n logging.error('Error retrieving artist search results.')\n except:\n logging.error('Error retrieving artist search results.')\n if len(artists) > 0:\n return artists[0]\n return None\n\n\nasync def search_albums(session: aiohttp.ClientSession, artist_id):\n url = ALBUMS_SEARCH_URL.format(artist_id)\n json_data_r = await session.get(url, headers=headers)\n response = json.loads(await json_data_r.text())\n if response['code'] == 200:\n return response['hotAlbums']\n return None\n\n\ndef filter_and_get_album_id(album_list, album):\n most_similar = None\n highest_similarity = 0\n\n for candidate_album in album_list:\n if album == candidate_album['name']:\n return candidate_album['id']\n similarity = textcompare.association(album, candidate_album['name'])\n if similarity > highest_similarity:\n highest_similarity = similarity\n most_similar = candidate_album\n return most_similar['id'] if most_similar is not None else None\n\n\nasync def get_album_info_by_id(session: aiohttp.ClientSession, album_id):\n url = ALBUM_INFO_URL.format(album_id)\n json_data_r = await session.get(url, headers=headers)\n response = json.loads(await json_data_r.text())\n if response['code'] == 200:\n return response['album']\n return None\n\n\nasync def get_album_info(session, artist, album):\n artist = t2s(artist)\n album = t2s(album)\n # 1. 根据 artist, 获取 artist_id\n if blur_result := await search_artist_blur(session, artist_blur=artist):\n artist_id = blur_result['id']\n # 2. 根据 artist_id 查询所有专辑\n if album_list := await search_albums(session, artist_id):\n # 3. 根据 album, 过滤, 并获取到 album_id\n if album_id := filter_and_get_album_id(album_list, album):\n # 4. 根据 album_id, 查询 album_info\n return await get_album_info_by_id(session, album_id)\n return None\n\n\nasync def get_cover_url(session: aiohttp.ClientSession, album_id: int):\n url = ALBUM_SEARCH_URL_WANGYI.format(album_id)\n json_data_r = await session.get(url, headers=headers)\n json_data = json.loads(await json_data_r.text())\n if json_data.get('album', False) and json_data.get('album').get('picUrl', False):\n return json_data['album']['picUrl']\n return None\n\n\nasync def get_lyrics(session: aiohttp.ClientSession, track_id: int):\n url = LYRIC_URL_WANGYI.format(track_id)\n json_data_r = await session.get(url, headers=headers)\n json_data = json.loads(await json_data_r.text())\n if json_data.get('lrc', False) and json_data.get('lrc').get('lyric', False):\n return json_data['lrc']['lyric']\n return None\n\n\nasync def a_search(title='', artist='', album=''):\n \"\"\"\n 查询封面: \n 三者都传:获取歌曲封面\n 不传歌曲标题:获取专辑封面 --- 传歌手/歌曲\n 只传歌手名:获取歌手图片\n 查询歌词:\n title 不能为空\n album, artist 这两个可以为空\n \"\"\"\n if not any((title, artist, album)):\n return None\n\n async with aiohttp.ClientSession() as session:\n # 查询歌曲, 包括封面和歌词\n if title:\n return await search_track(session, title=title, artist=artist, album=album)\n elif artist and album:\n # 只查询专辑封面\n return await search_album(session, artist, album)\n elif artist:\n # 查询艺术家封面\n return await search_artist(session, artist)\n return None\n\n\nasync def search_artist(session, artist):\n # 1. 根据 artist, 获取 artist_id\n if blur_result := await search_artist_blur(session, artist_blur=artist):\n music_json_data: dict = {\n \"cover\": blur_result['img1v1Url']\n }\n return listify(music_json_data)\n return None\n\n\nasync def search_album(session, artist, album):\n if album_info := await get_album_info(session, artist, album):\n music_json_data: dict = {\n \"cover\": album_info['picUrl']\n }\n return listify(music_json_data)\n return None\n\n\nasync def search_track(session, title, artist, album):\n result_list = []\n result_cap = 10\n fetch_limit = 100\n search_str = ' '.join([item for item in [title, artist, album] if item])\n url = COMMON_SEARCH_URL_WANGYI.format(urllib.parse.quote_plus(search_str), 1, 0, fetch_limit)\n\n response = await session.get(url, headers=headers)\n\n if response.status != 200:\n return None\n\n song_info_t: str = await response.text()\n song_info: dict = json.loads(song_info_t)\n try:\n \tsong_info: list[dict] = song_info[\"result\"][\"songs\"]\n except (TypeError, KeyError):\n return []\n if len(song_info) \u003c 1:\n return None\n candidate_songs = []\n for song_item in song_info:\n # 有些歌, 查询的 title 可能在别名里, 例如周杰伦的 八度空间-\"分裂/离开\", 有两个名字.\n song_names: list = list(song_item.get('alia') or [])\n song_names.append(song_item['name'])\n artists = song_item.get(\"ar\") or []\n singer_name = \" \".join([x['name'] for x in artists]) if artists else \"\"\n album_ = song_item.get(\"al\")\n album_name = album_['name'] if album_ is not None else ''\n # 取所有名字中最高的相似度\n title_conform_ratio = max([textcompare.association(title, name) for name in song_names])\n\n artist_conform_ratio = textcompare.assoc_artists(artist, singer_name)\n album_conform_ratio = textcompare.association(album, album_name)\n\n ratio: float = (title_conform_ratio * (artist_conform_ratio + album_conform_ratio) / 2.0) ** 0.5\n\n if ratio >= 0.2:\n song_id = song_item['id']\n album_id = album_['id'] if album_ is not None else None\n singer_id = artists[0]['id'] if artists else None\n candidate_songs.append(\n {'ratio': ratio, \"item\": {\n \"artist\": singer_name,\n \"album\": album_name,\n \"title\": title,\n \"artist_id\": singer_id,\n \"album_id\": album_id,\n \"trace_id\": song_id\n }})\n\n candidate_songs.sort(\n key=lambda x: x['ratio'], reverse=True)\n if len(candidate_songs) \u003c 1:\n return None\n\n candidate_songs = candidate_songs[:min(len(candidate_songs), result_cap)]\n\n for candidate in candidate_songs:\n track = candidate['item']\n ratio = candidate['ratio']\n\n cover_url = await get_cover_url(session, track['album_id']) if track['album_id'] else None\n lyrics = await get_lyrics(session, track['trace_id'])\n\n # 结构化JSON数据\n music_json_data: dict = {\n \"title\": track['title'],\n \"album\": track['album'],\n \"artist\": track['artist'],\n \"lyrics\": lyrics,\n \"cover\": cover_url,\n \"id\": tools.calculate_md5(\n f\"title:{track['title']};artists:{track['artist']};album:{track['album']}\", base='decstr')\n }\n\n result_list.append(music_json_data)\n return result_list\n\n\n@lru_cache(maxsize=64)\n@no_error(throw=logger.info,\n exceptions=(aiohttp.ClientError, asyncio.TimeoutError, KeyError, IndexError, AttributeError))\ndef search(title='', artist='', album=''):\n return asyncio.run(a_search(title=title, artist=artist, album=album))\n\n\nif __name__ == \"__main__\":\n print(search(album=\"十年\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":9637,"content_sha256":"0247dcb876fdabb34ecfa982fc3de298c7fca0842249c4480cb543b39a726b6b"},{"filename":"scripts/LrcApi/mod/tag.py","content":"import base64\nimport os\nimport io\nimport logging\n\nfrom PIL import Image\n\nfrom mod import music_tag\n\nlogger = logging.getLogger(__name__)\n\nTAG_MAP = {\n 'tracktitle': '曲目标题',\n 'artist': '艺术家',\n 'album': '专辑',\n 'year': '年份',\n 'lyrics': '歌词',\n 'artwork': '封面图片Base64'\n}\n\n\ndef dump_b64(album_art: music_tag.file.MetadataItem) -> str:\n \"\"\"\n 以图片加载MetadataItem对象并进行base64编码\n :param album_art:\n :return:\n \"\"\"\n logger.debug(\"开始处理专辑封面图片的base64编码\")\n try:\n artwork = album_art.values[0]\n img_data = artwork.data\n img_format = artwork.format\n img = Image.open(io.BytesIO(img_data))\n img_byte_arr = io.BytesIO()\n img.save(img_byte_arr, format=img_format)\n img_base64 = base64.b64encode(img_byte_arr.getvalue())\n logger.debug(f\"图片编码完成,格式: {img_format}\")\n return img_base64.decode()\n except Exception as e:\n logger.error(f\"处理专辑封面时发生错误: {str(e)}\")\n raise\n\n\ndef write(tags: dict, file: any) -> None:\n \"\"\"\n :param tags: 字典,包含Tags数据,详见TAG_MAP\n :param file: string, file-like object, io.StringIO, etc.\n :return: None\n \"\"\"\n logger.info(f\"开始写入音乐标签\")\n \n if not isinstance(tags, dict):\n err_msg = f'Tags should be dict, but {type(tags).__name__} found.'\n logger.error(err_msg)\n raise TypeError(err_msg)\n\n file_path = file if isinstance(file, str) else (file.name if hasattr(file, 'name') else None)\n if not file_path or not os.path.exists(file_path):\n err_msg = f'File {file_path} does not exist or path is invalid.'\n logger.error(err_msg)\n raise FileNotFoundError(err_msg)\n\n logger.debug(f\"准备写入文件: {file_path}\")\n music_file_obj = music_tag.load_file(file)\n \n for tag_name, tag_value in tags.items():\n if tag_name == \"artwork\" and tag_value:\n logger.debug(\"处理专辑封面数据\")\n artwork_raw: bytes = base64.b64decode(tag_value)\n artwork = music_tag.file.Artwork(artwork_raw)\n music_file_obj[tag_name] = artwork\n elif tag_name in TAG_MAP and tag_value:\n logger.debug(f\"写入标签 {TAG_MAP[tag_name]}: {tag_value}\")\n music_file_obj[tag_name] = tag_value\n elif tag_value is False:\n logger.debug(f\"删除标签: {tag_name}\")\n del music_file_obj[tag_name]\n else:\n logger.warning(f\"跳过无效的标签: {tag_name}\")\n continue\n\n music_file_obj.save()\n logger.debug(\"音乐标签写入完成\")\n\n\ndef read(file: any) -> dict:\n file_path = file if isinstance(file, str) else (file.name if hasattr(file, 'name') else None)\n \n if not file_path or not os.path.exists(file_path):\n logger.warning(f\"文件不存在或路径无效: {file_path}\")\n return {}\n \n logger.debug(f\"开始读取音乐文件标签: {file_path}\")\n result = {}\n \n try:\n for tag_name, tag_desc in TAG_MAP.items():\n logger.debug(f\"读取标签 {tag_desc}\")\n if tag_name == \"artwork\":\n result[tag_name] = dump_b64(music_tag.load_file(file_path).resolve(tag_name))\n else:\n result[tag_name] = str(music_tag.load_file(file_path).resolve(tag_name))\n \n logger.debug(\"音乐标签读取完成\")\n return result\n except Exception as e:\n logger.error(f\"读取标签时发生错误: {str(e)}\")\n raise\n\n\nif __name__ == '__main__':\n val_tags = {\n 'tracktitle': '曲目标题',\n 'artist': '艺术家',\n 'album': '专辑',\n 'year': 2022,\n 'lyrics': '歌词'\n }\n print(read(r'H:\\sp\\test.mp3'))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":3830,"content_sha256":"d2c25cbb5e40a3667af5b63c985e642d7414feb7c9134e2f75976dae0a1dddf3"},{"filename":"scripts/LrcApi/mod/textcompare.py","content":"import re\nfrom mod.ttscn import t2s\n\n\"\"\"\n本模块算法针对常见音乐标题匹配场景应用,着重分离度和效率。\nLevenshtein Distance算法实际表现不佳\n目前没有好的轻量nn实现,不考虑上模型\n当前数据集R~=0.8\n\"\"\"\n\n\ndef text_convert(text: str):\n patterns = [\n r\"(?\u003c!^)\\([^)]+?\\)\",\n r\"(?\u003c!^)([^)]+?)\",\n r\"\\s+$\", # 句末空格\n ]\n\n for pattern in patterns:\n text_re = re.sub(pattern, '', text)\n text = text_re if len(text_re) else text\n return text\n\n\n# 最长匹配字段\ndef longest_common_substring(str1, str2):\n m = len(str1)\n n = len(str2)\n # 创建二维数组来存储最长匹配长度\n dp = [[0] * (n + 1) for _ in range(m + 1)]\n max_length = 0 # 最长匹配长度\n # 填充dp数组\n for i in range(1, m + 1):\n for j in range(1, n + 1):\n if str1[i - 1] == str2[j - 1]:\n dp[i][j] = dp[i - 1][j - 1] + 1\n\n if dp[i][j] > max_length:\n max_length = dp[i][j]\n else:\n dp[i][j] = 0\n # 返回最长匹配长度\n return max_length\n\n\ndef str_duplicate_rate(str1, str2):\n \"\"\"\n 用于计算重复字符\n \"\"\"\n set1 = set(str1)\n set2 = set(str2)\n\n common_characters = set1.intersection(set2)\n total_characters = set1.union(set2)\n\n similarity_ratio = len(common_characters) / len(total_characters)\n return similarity_ratio\n\n\ndef calculate_duplicate_rate(list_1, list_2):\n \"\"\"\n 用于计算重复词素\n \"\"\"\n count = 0 # 计数器\n for char in list_1:\n char_sim = []\n\n # 对每个词素进行association计算\n for char_s in list_2:\n char_sim.append(association(char, char_s))\n count += max(char_sim)\n duplicate_rate = count / len(list_1) # 计算重复率\n return duplicate_rate\n\n\n# 分级\ndef association(text_1: str, text_2: str) -> float:\n \"\"\"\n 通过相对最大匹配距离、相对最小编辑长度(ED)\n 测量文本相似度\n 最长相似、字符重复结合\n 权重混合\n :param text_1: 用户传入文本\n :param text_2: 待比较文本\n :return: 相似度 float: 0~1\n \"\"\"\n if text_1 == '':\n return 0.5\n if text_2 == '':\n return 0\n text_1 = text_1.lower()\n text_2 = text_2.lower()\n common_ratio = longest_common_substring(text_1, text_2) / len(text_1)\n string_dr = str_duplicate_rate(text_1, text_2)\n similar_ratio = common_ratio * (string_dr ** 0.5) ** (1 / 1.5)\n return similar_ratio\n\n\ndef assoc_artists(text_1: str, text_2: str) -> float:\n if text_1 == \"\":\n return 0.5\n delimiters = [\",\", \"\\\\\", \"&\", \" \", \"+\", \"|\", \"、\", \",\", \"/\"] # 使用这些分隔符对artists进行分割\n delimiter_pattern = '|'.join(map(re.escape, delimiters)) # 构建正则表达式(自动转义)\n # 对文本进行繁简转换,使用re分割字符串为列表,并使用list-filter函数去除空项\n text_li_1 = list(filter(None, re.split(delimiter_pattern, t2s(text_1))))\n text_li_2 = list(filter(None, re.split(delimiter_pattern, t2s(text_2))))\n ar_ratio = calculate_duplicate_rate(text_li_1, text_li_2)\n return ar_ratio\n\n\ndef zero_item(text: str) -> str:\n punctuation = \"'\\\"?>\u003c:;/!@#$%^&*()_-+=!,。、?“”:;【】{}[]()()|~·`~[]「」{}〖〗『』〈〉«»〔〕‹›〝〞‘’''…#\"\n text = text.replace(\" \", \"\")\n for text_z in text:\n if text_z not in punctuation:\n return text_z\n return text[0] if text else text\n\n\nif __name__ == \"__main__\":\n text_s = \"aaaa&bbbb&ccccc\"\n text_r = \"aaaa&ccccc&bbbb\"\n print(str_duplicate_rate(text_s, text_r))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":3733,"content_sha256":"3eac6d2502a52e1124c4a4177fe21473ef7c176191cc739f2082dc0ef4397731"},{"filename":"scripts/LrcApi/mod/tools.py","content":"import hashlib\nimport re\n\n\ndef calculate_md5(string: str, base=\"hexstr\"):\n \"\"\"\n 计算字符串的 MD5 哈希值\n\n 参数:\n - string: 要计算哈希值的字符串\n - base: 返回结果的表示形式,可选值为 \"hex\"(十六进制,默认)、\"dec\"(十进制)、\"bin\"(二进制)\n 返回:\n - 根据指定 base 返回相应表示形式的 MD5 哈希值\n \"\"\"\n md5_hash = hashlib.md5()\n # 将字符串转换为字节流并进行 MD5 计算\n md5_hash.update(string.encode('utf-8'))\n # 根据 base 参数返回相应的结果\n if base == \"hex\":\n # 十六进制->str\n md5_hex = md5_hash.hexdigest()\n return md5_hex\n elif base == \"dec\":\n # 十进制表示->int\n md5_dec = int(md5_hash.hexdigest(), 16) # 将十六进制转换为十进制\n return md5_dec\n elif base == \"decstr\":\n # 十进制表示->int\n md5_dec = int(md5_hash.hexdigest(), 16) # 将十六进制转换为十进制\n return str(md5_dec)\n elif base == \"bin\":\n # 二进制表示->bin\n md5_bin = format(int(md5_hash.hexdigest(), 16), '0128b') # 将十六进制转换为二进制,补齐到128位\n return md5_bin\n elif base == \"hexstr\":\n md5_bytes = md5_hash.digest()\n return md5_bytes.hex()\n else:\n raise ValueError(\"Invalid base. Supported values are 'hex', 'dec', 'hexstr', and 'bin'.\")\n\n\ndef merge_dictionaries(dict_a: dict, dict_b: dict) -> dict:\n \"\"\"\n 合并两字典中的有效数据,前者优先\n :param dict_a:\n :param dict_b:\n :return:\n \"\"\"\n merged_dict = {}\n if type(dict_a) is not dict:\n return dict_b\n # 遍历A和B的所有键\n for key in set(dict_a.keys()) | set(dict_b.keys()):\n # 判断A和B中对应键的值\n value_a = dict_a.get(key)\n value_b = dict_b.get(key)\n # 如果A和B中都有有效数据,则优先取A的值\n if value_a and value_b:\n merged_dict[key] = value_a\n # 如果A的值无效,则取B的值\n elif not value_a:\n merged_dict[key] = value_b\n # 如果B的值无效,则取A的值\n elif not value_b:\n merged_dict[key] = value_a\n else:\n merged_dict[key] = value_a\n return merged_dict\n\n\ndef standard_lrc(lrc_text: str) -> str:\n if not lrc_text or type(lrc_text) is not str:\n return lrc_text\n elif '[' in lrc_text and ']' in lrc_text:\n # 去除零宽字符\n lrc_text = re.sub(r'[\\ufeff\\u200b]', '',\n lrc_text.replace(\"\\r\\n\", \"\\n\"))\n pattern = re.compile(r'\\[([^]]+)]')\n # 使用findall方法找到所有匹配的字符串\n matches = pattern.findall(lrc_text)\n for match_s in matches:\n replacement = '[' + ']['.join(match_s.split(',')) + ']'\n lrc_text = lrc_text.replace(f'[{match_s}]', replacement)\n\n # 匹配时间戳\n pattern = r\"\\[(\\d{2}:\\d{2}\\.\\d{2})\\]\"\n # 进行匹配和替换\n return re.sub(pattern, lambda match: \"[\" + match.group(1) + \"0]\", lrc_text)\n else:\n return re.sub(r'[\\ufeff\\u200b]', '',\n lrc_text.replace(\"\\r\\n\", \"\\n\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":3228,"content_sha256":"5cd3ee7982608ebee53e926243473fc85bd263aa46db0be15fe81c19aff0b09d"},{"filename":"scripts/LrcApi/mod/ttscn.py","content":"\"\"\"\n此方法用于繁体字转简体字\n数据来源 BYVoid/OpenCC\n原内容通过 Apache-2.0 协议开源\n数据为2023/11/25\n部分修改,不转换 剋->克 等简体中文保留的字符\n\"\"\"\n\nts_dic = {\n \"㑮\": \"𫝈\",\n \"㑯\": \"㑔\",\n \"㑳\": \"㑇\",\n \"㑶\": \"㐹\",\n \"㒓\": \"𠉂\",\n \"㓄\": \"𪠟\",\n \"㓨\": \"刾\",\n \"㔋\": \"𪟎\",\n \"㖮\": \"𪠵\",\n \"㗲\": \"𠵾\",\n \"㗿\": \"𪡛\",\n \"㘉\": \"𠰱\",\n \"㘓\": \"𪢌\",\n \"㘚\": \"㘎\",\n \"㛝\": \"𫝦\",\n \"㜄\": \"㚯\",\n \"㜏\": \"㛣\",\n \"㜐\": \"𫝧\",\n \"㜗\": \"𡞋\",\n \"㜢\": \"𡞱\",\n \"㜷\": \"𡝠\",\n \"㞞\": \"𪨊\",\n \"㟺\": \"𪩇\",\n \"㠏\": \"㟆\",\n \"㠣\": \"𫵷\",\n \"㢗\": \"𪪑\",\n \"㢝\": \"𢋈\",\n \"㥮\": \"㤘\",\n \"㦎\": \"𢛯\",\n \"㦛\": \"𢗓\",\n \"㦞\": \"𪫷\",\n \"㨻\": \"𪮃\",\n \"㩋\": \"𪮋\",\n \"㩜\": \"㨫\",\n \"㩳\": \"㧐\",\n \"㩵\": \"擜\",\n \"㪎\": \"𪯋\",\n \"㯤\": \"𣘐\",\n \"㰙\": \"𣗙\",\n \"㵗\": \"𣳆\",\n \"㵾\": \"𪷍\",\n \"㶆\": \"𫞛\",\n \"㷍\": \"𤆢\",\n \"㷿\": \"𤈷\",\n \"㸇\": \"𤎺\",\n \"㹽\": \"𫞣\",\n \"㺏\": \"𤠋\",\n \"㺜\": \"𪺻\",\n \"㻶\": \"𪼋\",\n \"㿖\": \"𪽮\",\n \"㿗\": \"𤻊\",\n \"㿧\": \"𤽯\",\n \"䀉\": \"𥁢\",\n \"䀹\": \"𥅴\",\n \"䁪\": \"𥇢\",\n \"䁻\": \"䀥\",\n \"䂎\": \"𥎝\",\n \"䃮\": \"鿎\",\n \"䅐\": \"𫀨\",\n \"䅳\": \"𫀬\",\n \"䆉\": \"𫁂\",\n \"䉑\": \"𫁲\",\n \"䉙\": \"𥬀\",\n \"䉬\": \"𫂈\",\n \"䉲\": \"𥮜\",\n \"䉶\": \"𫁷\",\n \"䊭\": \"𥺅\",\n \"䊷\": \"䌶\",\n \"䊺\": \"𫄚\",\n \"䋃\": \"𫄜\",\n \"䋔\": \"𫄞\",\n \"䋙\": \"䌺\",\n \"䋚\": \"䌻\",\n \"䋦\": \"𫄩\",\n \"䋹\": \"䌿\",\n \"䋻\": \"䌾\",\n \"䋼\": \"𫄮\",\n \"䋿\": \"𦈓\",\n \"䌈\": \"𦈖\",\n \"䌋\": \"𦈘\",\n \"䌖\": \"𦈜\",\n \"䌝\": \"𦈟\",\n \"䌟\": \"𦈞\",\n \"䌥\": \"𦈠\",\n \"䌰\": \"𦈙\",\n \"䍤\": \"𫅅\",\n \"䍦\": \"䍠\",\n \"䍽\": \"𦍠\",\n \"䎙\": \"𫅭\",\n \"䎱\": \"䎬\",\n \"䓣\": \"𬜯\",\n \"䕤\": \"𫟕\",\n \"䕳\": \"𦰴\",\n \"䖅\": \"𫟑\",\n \"䗅\": \"𫊪\",\n \"䗿\": \"𧉞\",\n \"䙔\": \"𫋲\",\n \"䙡\": \"䙌\",\n \"䙱\": \"𧜭\",\n \"䚩\": \"𫌯\",\n \"䛄\": \"𫍠\",\n \"䛳\": \"𫍫\",\n \"䜀\": \"䜧\",\n \"䜖\": \"𫟢\",\n \"䝭\": \"𫎧\",\n \"䝻\": \"𧹕\",\n \"䝼\": \"䞍\",\n \"䞈\": \"𧹑\",\n \"䞋\": \"𫎪\",\n \"䞓\": \"𫎭\",\n \"䟃\": \"𫎺\",\n \"䟆\": \"𫎳\",\n \"䟐\": \"𫎱\",\n \"䠆\": \"𫏃\",\n \"䠱\": \"𨅛\",\n \"䡐\": \"𫟤\",\n \"䡩\": \"𫟥\",\n \"䡵\": \"𫟦\",\n \"䢨\": \"𨑹\",\n \"䤤\": \"𫟺\",\n \"䥄\": \"𫠀\",\n \"䥇\": \"䦂\",\n \"䥑\": \"鿏\",\n \"䥕\": \"𬭯\",\n \"䥗\": \"𫔋\",\n \"䥩\": \"𨱖\",\n \"䥯\": \"𫔆\",\n \"䥱\": \"䥾\",\n \"䦘\": \"𨸄\",\n \"䦛\": \"䦶\",\n \"䦟\": \"䦷\",\n \"䦯\": \"𫔵\",\n \"䦳\": \"𨷿\",\n \"䧢\": \"𨸟\",\n \"䪊\": \"𫖅\",\n \"䪏\": \"𩏼\",\n \"䪗\": \"𩐀\",\n \"䪘\": \"𩏿\",\n \"䪴\": \"𫖫\",\n \"䪾\": \"𫖬\",\n \"䫀\": \"𫖱\",\n \"䫂\": \"𫖰\",\n \"䫟\": \"𫖲\",\n \"䫴\": \"𩖗\",\n \"䫶\": \"𫖺\",\n \"䫻\": \"𫗇\",\n \"䫾\": \"𫠈\",\n \"䬓\": \"𫗊\",\n \"䬘\": \"𩙮\",\n \"䬝\": \"𩙯\",\n \"䬞\": \"𩙧\",\n \"䬧\": \"𫗟\",\n \"䭀\": \"𩠇\",\n \"䭃\": \"𩠈\",\n \"䭑\": \"𫗱\",\n \"䭔\": \"𫗰\",\n \"䭿\": \"𩧭\",\n \"䮄\": \"𫠊\",\n \"䮝\": \"𩧰\",\n \"䮞\": \"𩨁\",\n \"䮠\": \"𩧿\",\n \"䮫\": \"𩨇\",\n \"䮰\": \"𫘮\",\n \"䮳\": \"𩨏\",\n \"䮾\": \"𩧪\",\n \"䯀\": \"䯅\",\n \"䯤\": \"𩩈\",\n \"䰾\": \"鲃\",\n \"䱀\": \"𫚐\",\n \"䱁\": \"𫚏\",\n \"䱙\": \"𩾈\",\n \"䱧\": \"𫚠\",\n \"䱬\": \"𩾊\",\n \"䱰\": \"𩾋\",\n \"䱷\": \"䲣\",\n \"䱸\": \"𫠑\",\n \"䱽\": \"䲝\",\n \"䲁\": \"鳚\",\n \"䲅\": \"𫚜\",\n \"䲖\": \"𩾂\",\n \"䲘\": \"鳤\",\n \"䲰\": \"𪉂\",\n \"䳜\": \"𫛬\",\n \"䳢\": \"𫛰\",\n \"䳤\": \"𫛮\",\n \"䳧\": \"𫛺\",\n \"䳫\": \"𫛼\",\n \"䴉\": \"鹮\",\n \"䴋\": \"𫜅\",\n \"䴬\": \"𪎈\",\n \"䴱\": \"𫜒\",\n \"䴴\": \"𪎋\",\n \"䴽\": \"𫜔\",\n \"䵳\": \"𪑅\",\n \"䵴\": \"𫜙\",\n \"䶕\": \"𫜨\",\n \"䶲\": \"𫜳\",\n \"丟\": \"丢\",\n \"並\": \"并\",\n \"乾\": \"干\",\n \"亂\": \"乱\",\n \"亙\": \"亘\",\n \"亞\": \"亚\",\n \"佇\": \"伫\",\n \"佈\": \"布\",\n \"佔\": \"占\",\n \"併\": \"并\",\n \"來\": \"来\",\n \"侖\": \"仑\",\n \"侶\": \"侣\",\n \"侷\": \"局\",\n \"俁\": \"俣\",\n \"係\": \"系\",\n \"俓\": \"𠇹\",\n \"俔\": \"伣\",\n \"俠\": \"侠\",\n \"俥\": \"伡\",\n \"俬\": \"私\",\n \"倀\": \"伥\",\n \"倆\": \"俩\",\n \"倈\": \"俫\",\n \"倉\": \"仓\",\n \"個\": \"个\",\n \"們\": \"们\",\n \"倖\": \"幸\",\n \"倫\": \"伦\",\n \"倲\": \"㑈\",\n \"偉\": \"伟\",\n \"偑\": \"㐽\",\n \"側\": \"侧\",\n \"偵\": \"侦\",\n \"偽\": \"伪\",\n \"傌\": \"㐷\",\n \"傑\": \"杰\",\n \"傖\": \"伧\",\n \"傘\": \"伞\",\n \"備\": \"备\",\n \"傢\": \"家\",\n \"傭\": \"佣\",\n \"傯\": \"偬\",\n \"傳\": \"传\",\n \"傴\": \"伛\",\n \"債\": \"债\",\n \"傷\": \"伤\",\n \"傾\": \"倾\",\n \"僂\": \"偻\",\n \"僅\": \"仅\",\n \"僉\": \"佥\",\n \"僑\": \"侨\",\n \"僕\": \"仆\",\n \"僞\": \"伪\",\n \"僤\": \"𫢸\",\n \"僥\": \"侥\",\n \"僨\": \"偾\",\n \"僱\": \"雇\",\n \"價\": \"价\",\n \"儀\": \"仪\",\n \"儁\": \"俊\",\n \"儂\": \"侬\",\n \"億\": \"亿\",\n \"儈\": \"侩\",\n \"儉\": \"俭\",\n \"儎\": \"傤\",\n \"儐\": \"傧\",\n \"儔\": \"俦\",\n \"儕\": \"侪\",\n \"儘\": \"尽\",\n \"償\": \"偿\",\n \"儣\": \"𠆲\",\n \"優\": \"优\",\n \"儭\": \"𠋆\",\n \"儲\": \"储\",\n \"儷\": \"俪\",\n \"儸\": \"㑩\",\n \"儺\": \"傩\",\n \"儻\": \"傥\",\n \"儼\": \"俨\",\n \"兇\": \"凶\",\n \"兌\": \"兑\",\n \"兒\": \"儿\",\n \"兗\": \"兖\",\n \"內\": \"内\",\n \"兩\": \"两\",\n \"冊\": \"册\",\n \"冑\": \"胄\",\n \"冪\": \"幂\",\n \"凈\": \"净\",\n \"凍\": \"冻\",\n \"凙\": \"𪞝\",\n \"凜\": \"凛\",\n \"凱\": \"凯\",\n \"別\": \"别\",\n \"刪\": \"删\",\n \"剄\": \"刭\",\n \"則\": \"则\",\n \"剎\": \"刹\",\n \"剗\": \"刬\",\n \"剛\": \"刚\",\n \"剝\": \"剥\",\n \"剮\": \"剐\",\n \"剴\": \"剀\",\n \"創\": \"创\",\n \"剷\": \"铲\",\n \"剾\": \"𠛅\",\n \"劃\": \"划\",\n \"劇\": \"剧\",\n \"劉\": \"刘\",\n \"劊\": \"刽\",\n \"劌\": \"刿\",\n \"劍\": \"剑\",\n \"劏\": \"㓥\",\n \"劑\": \"剂\",\n \"劚\": \"㔉\",\n \"勁\": \"劲\",\n \"勑\": \"𠡠\",\n \"動\": \"动\",\n \"務\": \"务\",\n \"勛\": \"勋\",\n \"勝\": \"胜\",\n \"勞\": \"劳\",\n \"勢\": \"势\",\n \"勣\": \"𪟝\",\n \"勩\": \"勚\",\n \"勱\": \"劢\",\n \"勳\": \"勋\",\n \"勵\": \"励\",\n \"勸\": \"劝\",\n \"勻\": \"匀\",\n \"匭\": \"匦\",\n \"匯\": \"汇\",\n \"匱\": \"匮\",\n \"區\": \"区\",\n \"協\": \"协\",\n \"卹\": \"恤\",\n \"卻\": \"却\",\n \"卽\": \"即\",\n \"厙\": \"厍\",\n \"厠\": \"厕\",\n \"厤\": \"历\",\n \"厭\": \"厌\",\n \"厲\": \"厉\",\n \"厴\": \"厣\",\n \"參\": \"参\",\n \"叄\": \"叁\",\n \"叢\": \"丛\",\n \"吒\": \"咤\",\n \"吳\": \"吴\",\n \"吶\": \"呐\",\n \"呂\": \"吕\",\n \"咼\": \"呙\",\n \"員\": \"员\",\n \"哯\": \"𠯟\",\n \"唄\": \"呗\",\n \"唓\": \"𪠳\",\n \"唸\": \"念\",\n \"問\": \"问\",\n \"啓\": \"启\",\n \"啞\": \"哑\",\n \"啟\": \"启\",\n \"啢\": \"唡\",\n \"喎\": \"㖞\",\n \"喚\": \"唤\",\n \"喪\": \"丧\",\n \"喫\": \"吃\",\n \"喬\": \"乔\",\n \"單\": \"单\",\n \"喲\": \"哟\",\n \"嗆\": \"呛\",\n \"嗇\": \"啬\",\n \"嗊\": \"唝\",\n \"嗎\": \"吗\",\n \"嗚\": \"呜\",\n \"嗩\": \"唢\",\n \"嗰\": \"𠮶\",\n \"嗶\": \"哔\",\n \"嗹\": \"𪡏\",\n \"嘆\": \"叹\",\n \"嘍\": \"喽\",\n \"嘓\": \"啯\",\n \"嘔\": \"呕\",\n \"嘖\": \"啧\",\n \"嘗\": \"尝\",\n \"嘜\": \"唛\",\n \"嘩\": \"哗\",\n \"嘪\": \"𪡃\",\n \"嘮\": \"唠\",\n \"嘯\": \"啸\",\n \"嘰\": \"叽\",\n \"嘳\": \"𪡞\",\n \"嘵\": \"哓\",\n \"嘸\": \"呒\",\n \"嘺\": \"𪡀\",\n \"嘽\": \"啴\",\n \"噁\": \"恶\",\n \"噅\": \"𠯠\",\n \"噓\": \"嘘\",\n \"噚\": \"㖊\",\n \"噝\": \"咝\",\n \"噞\": \"𪡋\",\n \"噠\": \"哒\",\n \"噥\": \"哝\",\n \"噦\": \"哕\",\n \"噯\": \"嗳\",\n \"噲\": \"哙\",\n \"噴\": \"喷\",\n \"噸\": \"吨\",\n \"噹\": \"当\",\n \"嚀\": \"咛\",\n \"嚇\": \"吓\",\n \"嚌\": \"哜\",\n \"嚐\": \"尝\",\n \"嚕\": \"噜\",\n \"嚙\": \"啮\",\n \"嚛\": \"𪠸\",\n \"嚥\": \"咽\",\n \"嚦\": \"呖\",\n \"嚧\": \"𠰷\",\n \"嚨\": \"咙\",\n \"嚮\": \"向\",\n \"嚲\": \"亸\",\n \"嚳\": \"喾\",\n \"嚴\": \"严\",\n \"嚶\": \"嘤\",\n \"嚽\": \"𪢕\",\n \"囀\": \"啭\",\n \"囁\": \"嗫\",\n \"囂\": \"嚣\",\n \"囃\": \"𠱞\",\n \"囅\": \"冁\",\n \"囈\": \"呓\",\n \"囉\": \"啰\",\n \"囌\": \"苏\",\n \"囑\": \"嘱\",\n \"囒\": \"𪢠\",\n \"囪\": \"囱\",\n \"圇\": \"囵\",\n \"國\": \"国\",\n \"圍\": \"围\",\n \"園\": \"园\",\n \"圓\": \"圆\",\n \"圖\": \"图\",\n \"團\": \"团\",\n \"圞\": \"𪢮\",\n \"垻\": \"坝\",\n \"埡\": \"垭\",\n \"埨\": \"𫭢\",\n \"埬\": \"𪣆\",\n \"埰\": \"采\",\n \"執\": \"执\",\n \"堅\": \"坚\",\n \"堊\": \"垩\",\n \"堖\": \"垴\",\n \"堚\": \"𪣒\",\n \"堝\": \"埚\",\n \"堯\": \"尧\",\n \"報\": \"报\",\n \"場\": \"场\",\n \"塊\": \"块\",\n \"塋\": \"茔\",\n \"塏\": \"垲\",\n \"塒\": \"埘\",\n \"塗\": \"涂\",\n \"塚\": \"冢\",\n \"塢\": \"坞\",\n \"塤\": \"埙\",\n \"塵\": \"尘\",\n \"塸\": \"𫭟\",\n \"塹\": \"堑\",\n \"塿\": \"𪣻\",\n \"墊\": \"垫\",\n \"墜\": \"坠\",\n \"墠\": \"𫮃\",\n \"墮\": \"堕\",\n \"墰\": \"坛\",\n \"墲\": \"𪢸\",\n \"墳\": \"坟\",\n \"墶\": \"垯\",\n \"墻\": \"墙\",\n \"墾\": \"垦\",\n \"壇\": \"坛\",\n \"壈\": \"𡒄\",\n \"壋\": \"垱\",\n \"壎\": \"埙\",\n \"壓\": \"压\",\n \"壗\": \"𡋤\",\n \"壘\": \"垒\",\n \"壙\": \"圹\",\n \"壚\": \"垆\",\n \"壜\": \"坛\",\n \"壞\": \"坏\",\n \"壟\": \"垄\",\n \"壠\": \"垅\",\n \"壢\": \"坜\",\n \"壣\": \"𪤚\",\n \"壩\": \"坝\",\n \"壪\": \"塆\",\n \"壯\": \"壮\",\n \"壺\": \"壶\",\n \"壼\": \"壸\",\n \"壽\": \"寿\",\n \"夠\": \"够\",\n \"夢\": \"梦\",\n \"夥\": \"伙\",\n \"夾\": \"夹\",\n \"奐\": \"奂\",\n \"奧\": \"奥\",\n \"奩\": \"奁\",\n \"奪\": \"夺\",\n \"奬\": \"奖\",\n \"奮\": \"奋\",\n \"奼\": \"姹\",\n \"妝\": \"妆\",\n \"姍\": \"姗\",\n \"姦\": \"奸\",\n \"娙\": \"𫰛\",\n \"娛\": \"娱\",\n \"婁\": \"娄\",\n \"婡\": \"𫝫\",\n \"婦\": \"妇\",\n \"婭\": \"娅\",\n \"媈\": \"𫝨\",\n \"媧\": \"娲\",\n \"媯\": \"妫\",\n \"媰\": \"㛀\",\n \"媼\": \"媪\",\n \"媽\": \"妈\",\n \"嫋\": \"袅\",\n \"嫗\": \"妪\",\n \"嫵\": \"妩\",\n \"嫺\": \"娴\",\n \"嫻\": \"娴\",\n \"嫿\": \"婳\",\n \"嬀\": \"妫\",\n \"嬃\": \"媭\",\n \"嬇\": \"𫝬\",\n \"嬈\": \"娆\",\n \"嬋\": \"婵\",\n \"嬌\": \"娇\",\n \"嬙\": \"嫱\",\n \"嬡\": \"嫒\",\n \"嬣\": \"𪥰\",\n \"嬤\": \"嬷\",\n \"嬦\": \"𫝩\",\n \"嬪\": \"嫔\",\n \"嬰\": \"婴\",\n \"嬸\": \"婶\",\n \"嬻\": \"𪥿\",\n \"孃\": \"娘\",\n \"孄\": \"𫝮\",\n \"孆\": \"𫝭\",\n \"孇\": \"𪥫\",\n \"孋\": \"㛤\",\n \"孌\": \"娈\",\n \"孎\": \"𡠟\",\n \"孫\": \"孙\",\n \"學\": \"学\",\n \"孻\": \"𡥧\",\n \"孾\": \"𪧀\",\n \"孿\": \"孪\",\n \"宮\": \"宫\",\n \"寀\": \"采\",\n \"寠\": \"𪧘\",\n \"寢\": \"寝\",\n \"實\": \"实\",\n \"寧\": \"宁\",\n \"審\": \"审\",\n \"寫\": \"写\",\n \"寬\": \"宽\",\n \"寵\": \"宠\",\n \"寶\": \"宝\",\n \"將\": \"将\",\n \"專\": \"专\",\n \"尋\": \"寻\",\n \"對\": \"对\",\n \"導\": \"导\",\n \"尷\": \"尴\",\n \"屆\": \"届\",\n \"屍\": \"尸\",\n \"屓\": \"屃\",\n \"屜\": \"屉\",\n \"屢\": \"屡\",\n \"層\": \"层\",\n \"屨\": \"屦\",\n \"屩\": \"𪨗\",\n \"屬\": \"属\",\n \"岡\": \"冈\",\n \"峯\": \"峰\",\n \"峴\": \"岘\",\n \"島\": \"岛\",\n \"峽\": \"峡\",\n \"崍\": \"崃\",\n \"崑\": \"昆\",\n \"崗\": \"岗\",\n \"崙\": \"仑\",\n \"崢\": \"峥\",\n \"崬\": \"岽\",\n \"嵐\": \"岚\",\n \"嵗\": \"岁\",\n \"嵼\": \"𡶴\",\n \"嵽\": \"𫶇\",\n \"嵾\": \"㟥\",\n \"嶁\": \"嵝\",\n \"嶄\": \"崭\",\n \"嶇\": \"岖\",\n \"嶈\": \"𡺃\",\n \"嶔\": \"嵚\",\n \"嶗\": \"崂\",\n \"嶘\": \"𡺄\",\n \"嶠\": \"峤\",\n \"嶢\": \"峣\",\n \"嶧\": \"峄\",\n \"嶨\": \"峃\",\n \"嶮\": \"崄\",\n \"嶸\": \"嵘\",\n \"嶹\": \"𫝵\",\n \"嶺\": \"岭\",\n \"嶼\": \"屿\",\n \"嶽\": \"岳\",\n \"巊\": \"𪩎\",\n \"巋\": \"岿\",\n \"巒\": \"峦\",\n \"巔\": \"巅\",\n \"巖\": \"岩\",\n \"巗\": \"𪨷\",\n \"巘\": \"𪩘\",\n \"巰\": \"巯\",\n \"巹\": \"卺\",\n \"帥\": \"帅\",\n \"師\": \"师\",\n \"帳\": \"帐\",\n \"帶\": \"带\",\n \"幀\": \"帧\",\n \"幃\": \"帏\",\n \"幓\": \"㡎\",\n \"幗\": \"帼\",\n \"幘\": \"帻\",\n \"幝\": \"𪩷\",\n \"幟\": \"帜\",\n \"幣\": \"币\",\n \"幩\": \"𪩸\",\n \"幫\": \"帮\",\n \"幬\": \"帱\",\n \"幹\": \"干\",\n \"幾\": \"几\",\n \"庫\": \"库\",\n \"廁\": \"厕\",\n \"廂\": \"厢\",\n \"廄\": \"厩\",\n \"廈\": \"厦\",\n \"廎\": \"庼\",\n \"廕\": \"荫\",\n \"廚\": \"厨\",\n \"廝\": \"厮\",\n \"廞\": \"𫷷\",\n \"廟\": \"庙\",\n \"廠\": \"厂\",\n \"廡\": \"庑\",\n \"廢\": \"废\",\n \"廣\": \"广\",\n \"廧\": \"𪪞\",\n \"廩\": \"廪\",\n \"廬\": \"庐\",\n \"廳\": \"厅\",\n \"弒\": \"弑\",\n \"弔\": \"吊\",\n \"弳\": \"弪\",\n \"張\": \"张\",\n \"強\": \"强\",\n \"彃\": \"𪪼\",\n \"彄\": \"𫸩\",\n \"彆\": \"别\",\n \"彈\": \"弹\",\n \"彌\": \"弥\",\n \"彎\": \"弯\",\n \"彔\": \"录\",\n \"彙\": \"汇\",\n \"彠\": \"彟\",\n \"彥\": \"彦\",\n \"彫\": \"雕\",\n \"彲\": \"彨\",\n \"彷\": \"彷\",\n \"彿\": \"佛\",\n \"後\": \"后\",\n \"徑\": \"径\",\n \"從\": \"从\",\n \"徠\": \"徕\",\n \"復\": \"复\",\n \"徵\": \"征\",\n \"徹\": \"彻\",\n \"徿\": \"𪫌\",\n \"恆\": \"恒\",\n \"恥\": \"耻\",\n \"悅\": \"悦\",\n \"悞\": \"悮\",\n \"悵\": \"怅\",\n \"悶\": \"闷\",\n \"悽\": \"凄\",\n \"惡\": \"恶\",\n \"惱\": \"恼\",\n \"惲\": \"恽\",\n \"惻\": \"恻\",\n \"愛\": \"爱\",\n \"愜\": \"惬\",\n \"愨\": \"悫\",\n \"愴\": \"怆\",\n \"愷\": \"恺\",\n \"愻\": \"𢙏\",\n \"愾\": \"忾\",\n \"慄\": \"栗\",\n \"態\": \"态\",\n \"慍\": \"愠\",\n \"慘\": \"惨\",\n \"慚\": \"惭\",\n \"慟\": \"恸\",\n \"慣\": \"惯\",\n \"慤\": \"悫\",\n \"慪\": \"怄\",\n \"慫\": \"怂\",\n \"慮\": \"虑\",\n \"慳\": \"悭\",\n \"慶\": \"庆\",\n \"慺\": \"㥪\",\n \"慼\": \"戚\",\n \"慾\": \"欲\",\n \"憂\": \"忧\",\n \"憊\": \"惫\",\n \"憐\": \"怜\",\n \"憑\": \"凭\",\n \"憒\": \"愦\",\n \"憖\": \"慭\",\n \"憚\": \"惮\",\n \"憢\": \"𢙒\",\n \"憤\": \"愤\",\n \"憫\": \"悯\",\n \"憮\": \"怃\",\n \"憲\": \"宪\",\n \"憶\": \"忆\",\n \"憸\": \"𪫺\",\n \"憹\": \"𢙐\",\n \"懀\": \"𢙓\",\n \"懇\": \"恳\",\n \"應\": \"应\",\n \"懌\": \"怿\",\n \"懍\": \"懔\",\n \"懎\": \"𢠁\",\n \"懞\": \"蒙\",\n \"懟\": \"怼\",\n \"懣\": \"懑\",\n \"懤\": \"㤽\",\n \"懨\": \"恹\",\n \"懲\": \"惩\",\n \"懶\": \"懒\",\n \"懷\": \"怀\",\n \"懸\": \"悬\",\n \"懺\": \"忏\",\n \"懼\": \"惧\",\n \"懾\": \"慑\",\n \"戀\": \"恋\",\n \"戇\": \"戆\",\n \"戔\": \"戋\",\n \"戧\": \"戗\",\n \"戩\": \"戬\",\n \"戰\": \"战\",\n \"戱\": \"戯\",\n \"戲\": \"戏\",\n \"戶\": \"户\",\n \"拋\": \"抛\",\n \"挩\": \"捝\",\n \"挱\": \"挲\",\n \"挾\": \"挟\",\n \"捨\": \"舍\",\n \"捫\": \"扪\",\n \"捱\": \"挨\",\n \"捲\": \"卷\",\n \"掃\": \"扫\",\n \"掄\": \"抡\",\n \"掆\": \"㧏\",\n \"掗\": \"挜\",\n \"掙\": \"挣\",\n \"掚\": \"𪭵\",\n \"掛\": \"挂\",\n \"採\": \"采\",\n \"揀\": \"拣\",\n \"揚\": \"扬\",\n \"換\": \"换\",\n \"揮\": \"挥\",\n \"揯\": \"搄\",\n \"損\": \"损\",\n \"搖\": \"摇\",\n \"搗\": \"捣\",\n \"搵\": \"揾\",\n \"搶\": \"抢\",\n \"摋\": \"𢫬\",\n \"摐\": \"𪭢\",\n \"摑\": \"掴\",\n \"摜\": \"掼\",\n \"摟\": \"搂\",\n \"摯\": \"挚\",\n \"摳\": \"抠\",\n \"摶\": \"抟\",\n \"摺\": \"折\",\n \"摻\": \"掺\",\n \"撈\": \"捞\",\n \"撊\": \"𪭾\",\n \"撏\": \"挦\",\n \"撐\": \"撑\",\n \"撓\": \"挠\",\n \"撝\": \"㧑\",\n \"撟\": \"挢\",\n \"撣\": \"掸\",\n \"撥\": \"拨\",\n \"撧\": \"𪮖\",\n \"撫\": \"抚\",\n \"撲\": \"扑\",\n \"撳\": \"揿\",\n \"撻\": \"挞\",\n \"撾\": \"挝\",\n \"撿\": \"捡\",\n \"擁\": \"拥\",\n \"擄\": \"掳\",\n \"擇\": \"择\",\n \"擊\": \"击\",\n \"擋\": \"挡\",\n \"擓\": \"㧟\",\n \"擔\": \"担\",\n \"據\": \"据\",\n \"擟\": \"𪭧\",\n \"擠\": \"挤\",\n \"擣\": \"捣\",\n \"擫\": \"𢬍\",\n \"擬\": \"拟\",\n \"擯\": \"摈\",\n \"擰\": \"拧\",\n \"擱\": \"搁\",\n \"擲\": \"掷\",\n \"擴\": \"扩\",\n \"擷\": \"撷\",\n \"擺\": \"摆\",\n \"擻\": \"擞\",\n \"擼\": \"撸\",\n \"擽\": \"㧰\",\n \"擾\": \"扰\",\n \"攄\": \"摅\",\n \"攆\": \"撵\",\n \"攋\": \"𪮶\",\n \"攏\": \"拢\",\n \"攔\": \"拦\",\n \"攖\": \"撄\",\n \"攙\": \"搀\",\n \"攛\": \"撺\",\n \"攜\": \"携\",\n \"攝\": \"摄\",\n \"攢\": \"攒\",\n \"攣\": \"挛\",\n \"攤\": \"摊\",\n \"攪\": \"搅\",\n \"攬\": \"揽\",\n \"敎\": \"教\",\n \"敓\": \"敚\",\n \"敗\": \"败\",\n \"敘\": \"叙\",\n \"敵\": \"敌\",\n \"數\": \"数\",\n \"斂\": \"敛\",\n \"斃\": \"毙\",\n \"斅\": \"𢽾\",\n \"斆\": \"敩\",\n \"斕\": \"斓\",\n \"斬\": \"斩\",\n \"斷\": \"断\",\n \"斸\": \"𣃁\",\n \"於\": \"于\",\n \"旂\": \"旗\",\n \"旣\": \"既\",\n \"昇\": \"升\",\n \"時\": \"时\",\n \"晉\": \"晋\",\n \"晛\": \"𬀪\",\n \"晝\": \"昼\",\n \"暈\": \"晕\",\n \"暉\": \"晖\",\n \"暐\": \"𬀩\",\n \"暘\": \"旸\",\n \"暢\": \"畅\",\n \"暫\": \"暂\",\n \"曄\": \"晔\",\n \"曆\": \"历\",\n \"曇\": \"昙\",\n \"曉\": \"晓\",\n \"曊\": \"𪰶\",\n \"曏\": \"向\",\n \"曖\": \"暧\",\n \"曠\": \"旷\",\n \"曥\": \"𣆐\",\n \"曨\": \"昽\",\n \"曬\": \"晒\",\n \"書\": \"书\",\n \"會\": \"会\",\n \"朥\": \"𦛨\",\n \"朧\": \"胧\",\n \"朮\": \"术\",\n \"東\": \"东\",\n \"枴\": \"拐\",\n \"柵\": \"栅\",\n \"柺\": \"拐\",\n \"査\": \"查\",\n \"桱\": \"𣐕\",\n \"桿\": \"杆\",\n \"梔\": \"栀\",\n \"梖\": \"𪱷\",\n \"梘\": \"枧\",\n \"梜\": \"𬂩\",\n \"條\": \"条\",\n \"梟\": \"枭\",\n \"梲\": \"棁\",\n \"棄\": \"弃\",\n \"棊\": \"棋\",\n \"棖\": \"枨\",\n \"棗\": \"枣\",\n \"棟\": \"栋\",\n \"棡\": \"㭎\",\n \"棧\": \"栈\",\n \"棲\": \"栖\",\n \"棶\": \"梾\",\n \"椏\": \"桠\",\n \"椲\": \"㭏\",\n \"楇\": \"𣒌\",\n \"楊\": \"杨\",\n \"楓\": \"枫\",\n \"楨\": \"桢\",\n \"業\": \"业\",\n \"極\": \"极\",\n \"榘\": \"矩\",\n \"榦\": \"干\",\n \"榪\": \"杩\",\n \"榮\": \"荣\",\n \"榲\": \"榅\",\n \"榿\": \"桤\",\n \"構\": \"构\",\n \"槍\": \"枪\",\n \"槓\": \"杠\",\n \"槤\": \"梿\",\n \"槧\": \"椠\",\n \"槨\": \"椁\",\n \"槫\": \"𣏢\",\n \"槮\": \"椮\",\n \"槳\": \"桨\",\n \"槶\": \"椢\",\n \"槼\": \"椝\",\n \"樁\": \"桩\",\n \"樂\": \"乐\",\n \"樅\": \"枞\",\n \"樑\": \"梁\",\n \"樓\": \"楼\",\n \"標\": \"标\",\n \"樞\": \"枢\",\n \"樠\": \"𣗊\",\n \"樢\": \"㭤\",\n \"樣\": \"样\",\n \"樤\": \"𣔌\",\n \"樧\": \"榝\",\n \"樫\": \"㭴\",\n \"樳\": \"桪\",\n \"樸\": \"朴\",\n \"樹\": \"树\",\n \"樺\": \"桦\",\n \"樿\": \"椫\",\n \"橈\": \"桡\",\n \"橋\": \"桥\",\n \"機\": \"机\",\n \"橢\": \"椭\",\n \"橫\": \"横\",\n \"橯\": \"𣓿\",\n \"檁\": \"檩\",\n \"檉\": \"柽\",\n \"檔\": \"档\",\n \"檜\": \"桧\",\n \"檟\": \"槚\",\n \"檢\": \"检\",\n \"檣\": \"樯\",\n \"檭\": \"𣘴\",\n \"檮\": \"梼\",\n \"檯\": \"台\",\n \"檳\": \"槟\",\n \"檵\": \"𪲛\",\n \"檸\": \"柠\",\n \"檻\": \"槛\",\n \"櫃\": \"柜\",\n \"櫅\": \"𪲎\",\n \"櫍\": \"𬃊\",\n \"櫓\": \"橹\",\n \"櫚\": \"榈\",\n \"櫛\": \"栉\",\n \"櫝\": \"椟\",\n \"櫞\": \"橼\",\n \"櫟\": \"栎\",\n \"櫠\": \"𪲮\",\n \"櫥\": \"橱\",\n \"櫧\": \"槠\",\n \"櫨\": \"栌\",\n \"櫪\": \"枥\",\n \"櫫\": \"橥\",\n \"櫬\": \"榇\",\n \"櫱\": \"蘖\",\n \"櫳\": \"栊\",\n \"櫸\": \"榉\",\n \"櫻\": \"樱\",\n \"欄\": \"栏\",\n \"欅\": \"榉\",\n \"欇\": \"𪳍\",\n \"權\": \"权\",\n \"欍\": \"𣐤\",\n \"欏\": \"椤\",\n \"欐\": \"𪲔\",\n \"欑\": \"𪴙\",\n \"欒\": \"栾\",\n \"欓\": \"𣗋\",\n \"欖\": \"榄\",\n \"欘\": \"𣚚\",\n \"欞\": \"棂\",\n \"欽\": \"钦\",\n \"歎\": \"叹\",\n \"歐\": \"欧\",\n \"歟\": \"欤\",\n \"歡\": \"欢\",\n \"歲\": \"岁\",\n \"歷\": \"历\",\n \"歸\": \"归\",\n \"歿\": \"殁\",\n \"殘\": \"残\",\n \"殞\": \"殒\",\n \"殢\": \"𣨼\",\n \"殤\": \"殇\",\n \"殨\": \"㱮\",\n \"殫\": \"殚\",\n \"殭\": \"僵\",\n \"殮\": \"殓\",\n \"殯\": \"殡\",\n \"殰\": \"㱩\",\n \"殲\": \"歼\",\n \"殺\": \"杀\",\n \"殻\": \"壳\",\n \"殼\": \"壳\",\n \"毀\": \"毁\",\n \"毆\": \"殴\",\n \"毊\": \"𪵑\",\n \"毿\": \"毵\",\n \"氂\": \"牦\",\n \"氈\": \"毡\",\n \"氌\": \"氇\",\n \"氣\": \"气\",\n \"氫\": \"氢\",\n \"氬\": \"氩\",\n \"氭\": \"𣱝\",\n \"氳\": \"氲\",\n \"氾\": \"泛\",\n \"汎\": \"泛\",\n \"汙\": \"污\",\n \"決\": \"决\",\n \"沒\": \"没\",\n \"沖\": \"冲\",\n \"況\": \"况\",\n \"泝\": \"溯\",\n \"洩\": \"泄\",\n \"洶\": \"汹\",\n \"浹\": \"浃\",\n \"浿\": \"𬇙\",\n \"涇\": \"泾\",\n \"涗\": \"涚\",\n \"涼\": \"凉\",\n \"淒\": \"凄\",\n \"淚\": \"泪\",\n \"淥\": \"渌\",\n \"淨\": \"净\",\n \"淩\": \"凌\",\n \"淪\": \"沦\",\n \"淵\": \"渊\",\n \"淶\": \"涞\",\n \"淺\": \"浅\",\n \"渙\": \"涣\",\n \"減\": \"减\",\n \"渢\": \"沨\",\n \"渦\": \"涡\",\n \"測\": \"测\",\n \"渾\": \"浑\",\n \"湊\": \"凑\",\n \"湋\": \"𣲗\",\n \"湞\": \"浈\",\n \"湧\": \"涌\",\n \"湯\": \"汤\",\n \"溈\": \"沩\",\n \"準\": \"准\",\n \"溝\": \"沟\",\n \"溡\": \"𪶄\",\n \"溫\": \"温\",\n \"溮\": \"浉\",\n \"溳\": \"涢\",\n \"溼\": \"湿\",\n \"滄\": \"沧\",\n \"滅\": \"灭\",\n \"滌\": \"涤\",\n \"滎\": \"荥\",\n \"滙\": \"汇\",\n \"滬\": \"沪\",\n \"滯\": \"滞\",\n \"滲\": \"渗\",\n \"滷\": \"卤\",\n \"滸\": \"浒\",\n \"滻\": \"浐\",\n \"滾\": \"滚\",\n \"滿\": \"满\",\n \"漁\": \"渔\",\n \"漊\": \"溇\",\n \"漍\": \"𬇹\",\n \"漚\": \"沤\",\n \"漢\": \"汉\",\n \"漣\": \"涟\",\n \"漬\": \"渍\",\n \"漲\": \"涨\",\n \"漵\": \"溆\",\n \"漸\": \"渐\",\n \"漿\": \"浆\",\n \"潁\": \"颍\",\n \"潑\": \"泼\",\n \"潔\": \"洁\",\n \"潕\": \"𣲘\",\n \"潙\": \"沩\",\n \"潚\": \"㴋\",\n \"潛\": \"潜\",\n \"潣\": \"𫞗\",\n \"潤\": \"润\",\n \"潯\": \"浔\",\n \"潰\": \"溃\",\n \"潷\": \"滗\",\n \"潿\": \"涠\",\n \"澀\": \"涩\",\n \"澅\": \"𣶩\",\n \"澆\": \"浇\",\n \"澇\": \"涝\",\n \"澐\": \"沄\",\n \"澗\": \"涧\",\n \"澠\": \"渑\",\n \"澤\": \"泽\",\n \"澦\": \"滪\",\n \"澩\": \"泶\",\n \"澫\": \"𬇕\",\n \"澬\": \"𫞚\",\n \"澮\": \"浍\",\n \"澱\": \"淀\",\n \"澾\": \"㳠\",\n \"濁\": \"浊\",\n \"濃\": \"浓\",\n \"濄\": \"㳡\",\n \"濆\": \"𣸣\",\n \"濕\": \"湿\",\n \"濘\": \"泞\",\n \"濚\": \"溁\",\n \"濛\": \"蒙\",\n \"濜\": \"浕\",\n \"濟\": \"济\",\n \"濤\": \"涛\",\n \"濧\": \"㳔\",\n \"濫\": \"滥\",\n \"濰\": \"潍\",\n \"濱\": \"滨\",\n \"濺\": \"溅\",\n \"濼\": \"泺\",\n \"濾\": \"滤\",\n \"濿\": \"𪵱\",\n \"瀂\": \"澛\",\n \"瀃\": \"𣽷\",\n \"瀅\": \"滢\",\n \"瀆\": \"渎\",\n \"瀇\": \"㲿\",\n \"瀉\": \"泻\",\n \"瀋\": \"沈\",\n \"瀏\": \"浏\",\n \"瀕\": \"濒\",\n \"瀘\": \"泸\",\n \"瀝\": \"沥\",\n \"瀟\": \"潇\",\n \"瀠\": \"潆\",\n \"瀦\": \"潴\",\n \"瀧\": \"泷\",\n \"瀨\": \"濑\",\n \"瀰\": \"弥\",\n \"瀲\": \"潋\",\n \"瀾\": \"澜\",\n \"灃\": \"沣\",\n \"灄\": \"滠\",\n \"灍\": \"𫞝\",\n \"灑\": \"洒\",\n \"灒\": \"𪷽\",\n \"灕\": \"漓\",\n \"灘\": \"滩\",\n \"灙\": \"𣺼\",\n \"灝\": \"灏\",\n \"灡\": \"㳕\",\n \"灣\": \"湾\",\n \"灤\": \"滦\",\n \"灧\": \"滟\",\n \"灩\": \"滟\",\n \"災\": \"灾\",\n \"為\": \"为\",\n \"烏\": \"乌\",\n \"烴\": \"烃\",\n \"無\": \"无\",\n \"煇\": \"𪸩\",\n \"煉\": \"炼\",\n \"煒\": \"炜\",\n \"煙\": \"烟\",\n \"煢\": \"茕\",\n \"煥\": \"焕\",\n \"煩\": \"烦\",\n \"煬\": \"炀\",\n \"煱\": \"㶽\",\n \"熂\": \"𪸕\",\n \"熅\": \"煴\",\n \"熉\": \"𤈶\",\n \"熌\": \"𤇄\",\n \"熒\": \"荧\",\n \"熓\": \"𤆡\",\n \"熗\": \"炝\",\n \"熚\": \"𤇹\",\n \"熡\": \"𤋏\",\n \"熰\": \"𬉼\",\n \"熱\": \"热\",\n \"熲\": \"颎\",\n \"熾\": \"炽\",\n \"燀\": \"𬊤\",\n \"燁\": \"烨\",\n \"燈\": \"灯\",\n \"燉\": \"炖\",\n \"燒\": \"烧\",\n \"燖\": \"𬊈\",\n \"燙\": \"烫\",\n \"燜\": \"焖\",\n \"營\": \"营\",\n \"燦\": \"灿\",\n \"燬\": \"毁\",\n \"燭\": \"烛\",\n \"燴\": \"烩\",\n \"燶\": \"㶶\",\n \"燻\": \"熏\",\n \"燼\": \"烬\",\n \"燾\": \"焘\",\n \"爃\": \"𫞡\",\n \"爄\": \"𤇃\",\n \"爇\": \"𦶟\",\n \"爍\": \"烁\",\n \"爐\": \"炉\",\n \"爖\": \"𤇭\",\n \"爛\": \"烂\",\n \"爥\": \"𪹳\",\n \"爧\": \"𫞠\",\n \"爭\": \"争\",\n \"爲\": \"为\",\n \"爺\": \"爷\",\n \"爾\": \"尔\",\n \"牀\": \"床\",\n \"牆\": \"墙\",\n \"牘\": \"牍\",\n \"牴\": \"牴\",\n \"牽\": \"牵\",\n \"犖\": \"荦\",\n \"犛\": \"牦\",\n \"犞\": \"𪺭\",\n \"犢\": \"犊\",\n \"犧\": \"牺\",\n \"狀\": \"状\",\n \"狹\": \"狭\",\n \"狽\": \"狈\",\n \"猌\": \"𪺽\",\n \"猙\": \"狰\",\n \"猶\": \"犹\",\n \"猻\": \"狲\",\n \"獁\": \"犸\",\n \"獃\": \"呆\",\n \"獄\": \"狱\",\n \"獅\": \"狮\",\n \"獊\": \"𪺷\",\n \"獎\": \"奖\",\n \"獨\": \"独\",\n \"獩\": \"𤞃\",\n \"獪\": \"狯\",\n \"獫\": \"猃\",\n \"獮\": \"狝\",\n \"獰\": \"狞\",\n \"獱\": \"㺍\",\n \"獲\": \"获\",\n \"獵\": \"猎\",\n \"獷\": \"犷\",\n \"獸\": \"兽\",\n \"獺\": \"獭\",\n \"獻\": \"献\",\n \"獼\": \"猕\",\n \"玀\": \"猡\",\n \"玁\": \"𤞤\",\n \"珼\": \"𫞥\",\n \"現\": \"现\",\n \"琱\": \"雕\",\n \"琺\": \"珐\",\n \"琿\": \"珲\",\n \"瑋\": \"玮\",\n \"瑒\": \"玚\",\n \"瑣\": \"琐\",\n \"瑤\": \"瑶\",\n \"瑩\": \"莹\",\n \"瑪\": \"玛\",\n \"瑲\": \"玱\",\n \"瑻\": \"𪻲\",\n \"瑽\": \"𪻐\",\n \"璉\": \"琏\",\n \"璊\": \"𫞩\",\n \"璕\": \"𬍤\",\n \"璗\": \"𬍡\",\n \"璝\": \"𪻺\",\n \"璡\": \"琎\",\n \"璣\": \"玑\",\n \"璦\": \"瑷\",\n \"璫\": \"珰\",\n \"璯\": \"㻅\",\n \"環\": \"环\",\n \"璵\": \"玙\",\n \"璸\": \"瑸\",\n \"璼\": \"𫞨\",\n \"璽\": \"玺\",\n \"璾\": \"𫞦\",\n \"璿\": \"璇\",\n \"瓄\": \"𪻨\",\n \"瓅\": \"𬍛\",\n \"瓊\": \"琼\",\n \"瓏\": \"珑\",\n \"瓔\": \"璎\",\n \"瓕\": \"𤦀\",\n \"瓚\": \"瓒\",\n \"瓛\": \"𤩽\",\n \"甌\": \"瓯\",\n \"甕\": \"瓮\",\n \"產\": \"产\",\n \"産\": \"产\",\n \"甦\": \"苏\",\n \"甯\": \"宁\",\n \"畝\": \"亩\",\n \"畢\": \"毕\",\n \"畫\": \"画\",\n \"異\": \"异\",\n \"畵\": \"画\",\n \"當\": \"当\",\n \"畼\": \"𪽈\",\n \"疇\": \"畴\",\n \"疊\": \"叠\",\n \"痙\": \"痉\",\n \"痠\": \"酸\",\n \"痮\": \"𪽪\",\n \"痾\": \"疴\",\n \"瘂\": \"痖\",\n \"瘋\": \"疯\",\n \"瘍\": \"疡\",\n \"瘓\": \"痪\",\n \"瘞\": \"瘗\",\n \"瘡\": \"疮\",\n \"瘧\": \"疟\",\n \"瘮\": \"瘆\",\n \"瘱\": \"𪽷\",\n \"瘲\": \"疭\",\n \"瘺\": \"瘘\",\n \"瘻\": \"瘘\",\n \"療\": \"疗\",\n \"癆\": \"痨\",\n \"癇\": \"痫\",\n \"癉\": \"瘅\",\n \"癐\": \"𤶊\",\n \"癒\": \"愈\",\n \"癘\": \"疠\",\n \"癟\": \"瘪\",\n \"癡\": \"痴\",\n \"癢\": \"痒\",\n \"癤\": \"疖\",\n \"癥\": \"症\",\n \"癧\": \"疬\",\n \"癩\": \"癞\",\n \"癬\": \"癣\",\n \"癭\": \"瘿\",\n \"癮\": \"瘾\",\n \"癰\": \"痈\",\n \"癱\": \"瘫\",\n \"癲\": \"癫\",\n \"發\": \"发\",\n \"皁\": \"皂\",\n \"皚\": \"皑\",\n \"皟\": \"𤾀\",\n \"皰\": \"疱\",\n \"皸\": \"皲\",\n \"皺\": \"皱\",\n \"盃\": \"杯\",\n \"盜\": \"盗\",\n \"盞\": \"盏\",\n \"盡\": \"尽\",\n \"監\": \"监\",\n \"盤\": \"盘\",\n \"盧\": \"卢\",\n \"盨\": \"𪾔\",\n \"盪\": \"荡\",\n \"眝\": \"𪾣\",\n \"眞\": \"真\",\n \"眥\": \"眦\",\n \"眾\": \"众\",\n \"睍\": \"𪾢\",\n \"睏\": \"困\",\n \"睜\": \"睁\",\n \"睞\": \"睐\",\n \"瞘\": \"眍\",\n \"瞜\": \"䁖\",\n \"瞞\": \"瞒\",\n \"瞤\": \"𥆧\",\n \"瞭\": \"瞭\",\n \"瞶\": \"瞆\",\n \"瞼\": \"睑\",\n \"矇\": \"蒙\",\n \"矉\": \"𪾸\",\n \"矑\": \"𪾦\",\n \"矓\": \"眬\",\n \"矚\": \"瞩\",\n \"矯\": \"矫\",\n \"硃\": \"朱\",\n \"硜\": \"硁\",\n \"硤\": \"硖\",\n \"硨\": \"砗\",\n \"硯\": \"砚\",\n \"碕\": \"埼\",\n \"碙\": \"𥐻\",\n \"碩\": \"硕\",\n \"碭\": \"砀\",\n \"碸\": \"砜\",\n \"確\": \"确\",\n \"碼\": \"码\",\n \"碽\": \"䂵\",\n \"磑\": \"硙\",\n \"磚\": \"砖\",\n \"磠\": \"硵\",\n \"磣\": \"碜\",\n \"磧\": \"碛\",\n \"磯\": \"矶\",\n \"磽\": \"硗\",\n \"磾\": \"䃅\",\n \"礄\": \"硚\",\n \"礆\": \"硷\",\n \"礎\": \"础\",\n \"礐\": \"𬒈\",\n \"礒\": \"𥐟\",\n \"礙\": \"碍\",\n \"礦\": \"矿\",\n \"礪\": \"砺\",\n \"礫\": \"砾\",\n \"礬\": \"矾\",\n \"礮\": \"𪿫\",\n \"礱\": \"砻\",\n \"祇\": \"祇\",\n \"祕\": \"秘\",\n \"祿\": \"禄\",\n \"禍\": \"祸\",\n \"禎\": \"祯\",\n \"禕\": \"祎\",\n \"禡\": \"祃\",\n \"禦\": \"御\",\n \"禪\": \"禅\",\n \"禮\": \"礼\",\n \"禰\": \"祢\",\n \"禱\": \"祷\",\n \"禿\": \"秃\",\n \"秈\": \"籼\",\n \"稅\": \"税\",\n \"稈\": \"秆\",\n \"稏\": \"䅉\",\n \"稜\": \"棱\",\n \"稟\": \"禀\",\n \"種\": \"种\",\n \"稱\": \"称\",\n \"穀\": \"谷\",\n \"穇\": \"䅟\",\n \"穌\": \"稣\",\n \"積\": \"积\",\n \"穎\": \"颖\",\n \"穠\": \"秾\",\n \"穡\": \"穑\",\n \"穢\": \"秽\",\n \"穩\": \"稳\",\n \"穫\": \"获\",\n \"穭\": \"穞\",\n \"窩\": \"窝\",\n \"窪\": \"洼\",\n \"窮\": \"穷\",\n \"窯\": \"窑\",\n \"窵\": \"窎\",\n \"窶\": \"窭\",\n \"窺\": \"窥\",\n \"竄\": \"窜\",\n \"竅\": \"窍\",\n \"竇\": \"窦\",\n \"竈\": \"灶\",\n \"竊\": \"窃\",\n \"竚\": \"𥩟\",\n \"竪\": \"竖\",\n \"竱\": \"𫁟\",\n \"競\": \"竞\",\n \"筆\": \"笔\",\n \"筍\": \"笋\",\n \"筧\": \"笕\",\n \"筴\": \"䇲\",\n \"箇\": \"个\",\n \"箋\": \"笺\",\n \"箏\": \"筝\",\n \"節\": \"节\",\n \"範\": \"范\",\n \"築\": \"筑\",\n \"篋\": \"箧\",\n \"篔\": \"筼\",\n \"篘\": \"𥬠\",\n \"篠\": \"筿\",\n \"篢\": \"𬕂\",\n \"篤\": \"笃\",\n \"篩\": \"筛\",\n \"篳\": \"筚\",\n \"篸\": \"𥮾\",\n \"簀\": \"箦\",\n \"簂\": \"𫂆\",\n \"簍\": \"篓\",\n \"簑\": \"蓑\",\n \"簞\": \"箪\",\n \"簡\": \"简\",\n \"簢\": \"𫂃\",\n \"簣\": \"篑\",\n \"簫\": \"箫\",\n \"簹\": \"筜\",\n \"簽\": \"签\",\n \"簾\": \"帘\",\n \"籃\": \"篮\",\n \"籅\": \"𥫣\",\n \"籋\": \"𥬞\",\n \"籌\": \"筹\",\n \"籔\": \"䉤\",\n \"籙\": \"箓\",\n \"籛\": \"篯\",\n \"籜\": \"箨\",\n \"籟\": \"籁\",\n \"籠\": \"笼\",\n \"籤\": \"签\",\n \"籩\": \"笾\",\n \"籪\": \"簖\",\n \"籬\": \"篱\",\n \"籮\": \"箩\",\n \"籲\": \"吁\",\n \"粵\": \"粤\",\n \"糉\": \"粽\",\n \"糝\": \"糁\",\n \"糞\": \"粪\",\n \"糧\": \"粮\",\n \"糰\": \"团\",\n \"糲\": \"粝\",\n \"糴\": \"籴\",\n \"糶\": \"粜\",\n \"糹\": \"纟\",\n \"糺\": \"𫄙\",\n \"糾\": \"纠\",\n \"紀\": \"纪\",\n \"紂\": \"纣\",\n \"紃\": \"𬘓\",\n \"約\": \"约\",\n \"紅\": \"红\",\n \"紆\": \"纡\",\n \"紇\": \"纥\",\n \"紈\": \"纨\",\n \"紉\": \"纫\",\n \"紋\": \"纹\",\n \"納\": \"纳\",\n \"紐\": \"纽\",\n \"紓\": \"纾\",\n \"純\": \"纯\",\n \"紕\": \"纰\",\n \"紖\": \"纼\",\n \"紗\": \"纱\",\n \"紘\": \"纮\",\n \"紙\": \"纸\",\n \"級\": \"级\",\n \"紛\": \"纷\",\n \"紜\": \"纭\",\n \"紝\": \"纴\",\n \"紞\": \"𬘘\",\n \"紟\": \"𫄛\",\n \"紡\": \"纺\",\n \"紬\": \"䌷\",\n \"紮\": \"扎\",\n \"細\": \"细\",\n \"紱\": \"绂\",\n \"紲\": \"绁\",\n \"紳\": \"绅\",\n \"紵\": \"纻\",\n \"紹\": \"绍\",\n \"紺\": \"绀\",\n \"紼\": \"绋\",\n \"紿\": \"绐\",\n \"絀\": \"绌\",\n \"絁\": \"𫄟\",\n \"終\": \"终\",\n \"絃\": \"弦\",\n \"組\": \"组\",\n \"絅\": \"䌹\",\n \"絆\": \"绊\",\n \"絍\": \"𫟃\",\n \"絎\": \"绗\",\n \"結\": \"结\",\n \"絕\": \"绝\",\n \"絙\": \"𫄠\",\n \"絛\": \"绦\",\n \"絝\": \"绔\",\n \"絞\": \"绞\",\n \"絡\": \"络\",\n \"絢\": \"绚\",\n \"絥\": \"𫄢\",\n \"給\": \"给\",\n \"絧\": \"𫄡\",\n \"絨\": \"绒\",\n \"絪\": \"𬘡\",\n \"絰\": \"绖\",\n \"統\": \"统\",\n \"絲\": \"丝\",\n \"絳\": \"绛\",\n \"絶\": \"绝\",\n \"絹\": \"绢\",\n \"絺\": \"𫄨\",\n \"綀\": \"𦈌\",\n \"綁\": \"绑\",\n \"綃\": \"绡\",\n \"綄\": \"𬘫\",\n \"綆\": \"绠\",\n \"綇\": \"𦈋\",\n \"綈\": \"绨\",\n \"綉\": \"绣\",\n \"綋\": \"𫟄\",\n \"綌\": \"绤\",\n \"綎\": \"𬘩\",\n \"綏\": \"绥\",\n \"綐\": \"䌼\",\n \"綑\": \"捆\",\n \"經\": \"经\",\n \"綖\": \"𫄧\",\n \"綜\": \"综\",\n \"綝\": \"𬘭\",\n \"綞\": \"缍\",\n \"綟\": \"𫄫\",\n \"綠\": \"绿\",\n \"綡\": \"𫟅\",\n \"綢\": \"绸\",\n \"綣\": \"绻\",\n \"綧\": \"𬘯\",\n \"綪\": \"𬘬\",\n \"綫\": \"线\",\n \"綬\": \"绶\",\n \"維\": \"维\",\n \"綯\": \"绹\",\n \"綰\": \"绾\",\n \"綱\": \"纲\",\n \"網\": \"网\",\n \"綳\": \"绷\",\n \"綴\": \"缀\",\n \"綵\": \"彩\",\n \"綸\": \"纶\",\n \"綹\": \"绺\",\n \"綺\": \"绮\",\n \"綻\": \"绽\",\n \"綽\": \"绰\",\n \"綾\": \"绫\",\n \"綿\": \"绵\",\n \"緄\": \"绲\",\n \"緇\": \"缁\",\n \"緊\": \"紧\",\n \"緋\": \"绯\",\n \"緍\": \"𦈏\",\n \"緑\": \"绿\",\n \"緒\": \"绪\",\n \"緓\": \"绬\",\n \"緔\": \"绱\",\n \"緗\": \"缃\",\n \"緘\": \"缄\",\n \"緙\": \"缂\",\n \"線\": \"线\",\n \"緝\": \"缉\",\n \"緞\": \"缎\",\n \"緟\": \"𫟆\",\n \"締\": \"缔\",\n \"緡\": \"缗\",\n \"緣\": \"缘\",\n \"緤\": \"𫄬\",\n \"緦\": \"缌\",\n \"編\": \"编\",\n \"緩\": \"缓\",\n \"緬\": \"缅\",\n \"緮\": \"𫄭\",\n \"緯\": \"纬\",\n \"緰\": \"𦈕\",\n \"緱\": \"缑\",\n \"緲\": \"缈\",\n \"練\": \"练\",\n \"緶\": \"缏\",\n \"緷\": \"𦈉\",\n \"緸\": \"𦈑\",\n \"緹\": \"缇\",\n \"緻\": \"致\",\n \"緼\": \"缊\",\n \"縈\": \"萦\",\n \"縉\": \"缙\",\n \"縊\": \"缢\",\n \"縋\": \"缒\",\n \"縍\": \"𫄰\",\n \"縎\": \"𦈔\",\n \"縐\": \"绉\",\n \"縑\": \"缣\",\n \"縕\": \"缊\",\n \"縗\": \"缞\",\n \"縛\": \"缚\",\n \"縝\": \"缜\",\n \"縞\": \"缟\",\n \"縟\": \"缛\",\n \"縣\": \"县\",\n \"縧\": \"绦\",\n \"縫\": \"缝\",\n \"縬\": \"𦈚\",\n \"縭\": \"缡\",\n \"縮\": \"缩\",\n \"縯\": \"𬙂\",\n \"縰\": \"𫄳\",\n \"縱\": \"纵\",\n \"縲\": \"缧\",\n \"縳\": \"䌸\",\n \"縴\": \"纤\",\n \"縵\": \"缦\",\n \"縶\": \"絷\",\n \"縷\": \"缕\",\n \"縸\": \"𫄲\",\n \"縹\": \"缥\",\n \"縺\": \"𦈐\",\n \"總\": \"总\",\n \"績\": \"绩\",\n \"繂\": \"𫄴\",\n \"繃\": \"绷\",\n \"繅\": \"缫\",\n \"繆\": \"缪\",\n \"繈\": \"𫄶\",\n \"繏\": \"𦈝\",\n \"繐\": \"𰬸\",\n \"繒\": \"缯\",\n \"繓\": \"𦈛\",\n \"織\": \"织\",\n \"繕\": \"缮\",\n \"繚\": \"缭\",\n \"繞\": \"绕\",\n \"繟\": \"𦈎\",\n \"繡\": \"绣\",\n \"繢\": \"缋\",\n \"繨\": \"𫄤\",\n \"繩\": \"绳\",\n \"繪\": \"绘\",\n \"繫\": \"系\",\n \"繬\": \"𫄱\",\n \"繭\": \"茧\",\n \"繮\": \"缰\",\n \"繯\": \"缳\",\n \"繰\": \"缲\",\n \"繳\": \"缴\",\n \"繶\": \"𫄷\",\n \"繷\": \"𫄣\",\n \"繸\": \"䍁\",\n \"繹\": \"绎\",\n \"繻\": \"𦈡\",\n \"繼\": \"继\",\n \"繽\": \"缤\",\n \"繾\": \"缱\",\n \"繿\": \"䍀\",\n \"纁\": \"𫄸\",\n \"纆\": \"𬙊\",\n \"纇\": \"颣\",\n \"纈\": \"缬\",\n \"纊\": \"纩\",\n \"續\": \"续\",\n \"纍\": \"累\",\n \"纏\": \"缠\",\n \"纓\": \"缨\",\n \"纔\": \"才\",\n \"纕\": \"𬙋\",\n \"纖\": \"纤\",\n \"纗\": \"𫄹\",\n \"纘\": \"缵\",\n \"纚\": \"𫄥\",\n \"纜\": \"缆\",\n \"缽\": \"钵\",\n \"罃\": \"䓨\",\n \"罈\": \"坛\",\n \"罌\": \"罂\",\n \"罎\": \"坛\",\n \"罰\": \"罚\",\n \"罵\": \"骂\",\n \"罷\": \"罢\",\n \"羅\": \"罗\",\n \"羆\": \"罴\",\n \"羈\": \"羁\",\n \"羋\": \"芈\",\n \"羣\": \"群\",\n \"羥\": \"羟\",\n \"羨\": \"羡\",\n \"義\": \"义\",\n \"羵\": \"𫅗\",\n \"羶\": \"膻\",\n \"習\": \"习\",\n \"翫\": \"玩\",\n \"翬\": \"翚\",\n \"翹\": \"翘\",\n \"翽\": \"翙\",\n \"耬\": \"耧\",\n \"耮\": \"耢\",\n \"聖\": \"圣\",\n \"聞\": \"闻\",\n \"聯\": \"联\",\n \"聰\": \"聪\",\n \"聲\": \"声\",\n \"聳\": \"耸\",\n \"聵\": \"聩\",\n \"聶\": \"聂\",\n \"職\": \"职\",\n \"聹\": \"聍\",\n \"聻\": \"𫆏\",\n \"聽\": \"听\",\n \"聾\": \"聋\",\n \"肅\": \"肃\",\n \"脅\": \"胁\",\n \"脈\": \"脉\",\n \"脛\": \"胫\",\n \"脣\": \"唇\",\n \"脥\": \"𣍰\",\n \"脩\": \"修\",\n \"脫\": \"脱\",\n \"脹\": \"胀\",\n \"腎\": \"肾\",\n \"腖\": \"胨\",\n \"腡\": \"脶\",\n \"腦\": \"脑\",\n \"腪\": \"𣍯\",\n \"腫\": \"肿\",\n \"腳\": \"脚\",\n \"腸\": \"肠\",\n \"膃\": \"腽\",\n \"膕\": \"腘\",\n \"膚\": \"肤\",\n \"膞\": \"䏝\",\n \"膠\": \"胶\",\n \"膢\": \"𦝼\",\n \"膩\": \"腻\",\n \"膹\": \"𪱥\",\n \"膽\": \"胆\",\n \"膾\": \"脍\",\n \"膿\": \"脓\",\n \"臉\": \"脸\",\n \"臍\": \"脐\",\n \"臏\": \"膑\",\n \"臗\": \"𣎑\",\n \"臘\": \"腊\",\n \"臚\": \"胪\",\n \"臟\": \"脏\",\n \"臠\": \"脔\",\n \"臢\": \"臜\",\n \"臥\": \"卧\",\n \"臨\": \"临\",\n \"臺\": \"台\",\n \"與\": \"与\",\n \"興\": \"兴\",\n \"舉\": \"举\",\n \"舊\": \"旧\",\n \"舘\": \"馆\",\n \"艙\": \"舱\",\n \"艣\": \"𫇛\",\n \"艤\": \"舣\",\n \"艦\": \"舰\",\n \"艫\": \"舻\",\n \"艱\": \"艰\",\n \"艷\": \"艳\",\n \"芻\": \"刍\",\n \"苧\": \"苎\",\n \"茲\": \"兹\",\n \"荊\": \"荆\",\n \"莊\": \"庄\",\n \"莖\": \"茎\",\n \"莢\": \"荚\",\n \"莧\": \"苋\",\n \"菕\": \"𰰨\",\n \"華\": \"华\",\n \"菴\": \"庵\",\n \"菸\": \"烟\",\n \"萇\": \"苌\",\n \"萊\": \"莱\",\n \"萬\": \"万\",\n \"萴\": \"荝\",\n \"萵\": \"莴\",\n \"葉\": \"叶\",\n \"葒\": \"荭\",\n \"葝\": \"𫈎\",\n \"葤\": \"荮\",\n \"葦\": \"苇\",\n \"葯\": \"药\",\n \"葷\": \"荤\",\n \"蒍\": \"𫇭\",\n \"蒐\": \"搜\",\n \"蒓\": \"莼\",\n \"蒔\": \"莳\",\n \"蒕\": \"蒀\",\n \"蒞\": \"莅\",\n \"蒭\": \"𫇴\",\n \"蒼\": \"苍\",\n \"蓀\": \"荪\",\n \"蓆\": \"席\",\n \"蓋\": \"盖\",\n \"蓧\": \"𦰏\",\n \"蓮\": \"莲\",\n \"蓯\": \"苁\",\n \"蓴\": \"莼\",\n \"蓽\": \"荜\",\n \"蔄\": \"𬜬\",\n \"蔔\": \"卜\",\n \"蔘\": \"参\",\n \"蔞\": \"蒌\",\n \"蔣\": \"蒋\",\n \"蔥\": \"葱\",\n \"蔦\": \"茑\",\n \"蔭\": \"荫\",\n \"蔯\": \"𫈟\",\n \"蔿\": \"𫇭\",\n \"蕁\": \"荨\",\n \"蕆\": \"蒇\",\n \"蕎\": \"荞\",\n \"蕒\": \"荬\",\n \"蕓\": \"芸\",\n \"蕕\": \"莸\",\n \"蕘\": \"荛\",\n \"蕝\": \"𫈵\",\n \"蕢\": \"蒉\",\n \"蕩\": \"荡\",\n \"蕪\": \"芜\",\n \"蕭\": \"萧\",\n \"蕳\": \"𫈉\",\n \"蕷\": \"蓣\",\n \"蕽\": \"𫇽\",\n \"薀\": \"蕰\",\n \"薆\": \"𫉁\",\n \"薈\": \"荟\",\n \"薊\": \"蓟\",\n \"薌\": \"芗\",\n \"薑\": \"姜\",\n \"薔\": \"蔷\",\n \"薘\": \"荙\",\n \"薟\": \"莶\",\n \"薦\": \"荐\",\n \"薩\": \"萨\",\n \"薳\": \"䓕\",\n \"薴\": \"苧\",\n \"薵\": \"䓓\",\n \"薹\": \"苔\",\n \"薺\": \"荠\",\n \"藉\": \"藉\",\n \"藍\": \"蓝\",\n \"藎\": \"荩\",\n \"藝\": \"艺\",\n \"藥\": \"药\",\n \"藪\": \"薮\",\n \"藭\": \"䓖\",\n \"藴\": \"蕴\",\n \"藶\": \"苈\",\n \"藷\": \"𫉄\",\n \"藹\": \"蔼\",\n \"藺\": \"蔺\",\n \"蘀\": \"萚\",\n \"蘄\": \"蕲\",\n \"蘆\": \"芦\",\n \"蘇\": \"苏\",\n \"蘊\": \"蕴\",\n \"蘋\": \"苹\",\n \"蘚\": \"藓\",\n \"蘞\": \"蔹\",\n \"蘟\": \"𦻕\",\n \"蘢\": \"茏\",\n \"蘭\": \"兰\",\n \"蘺\": \"蓠\",\n \"蘿\": \"萝\",\n \"虆\": \"蔂\",\n \"虉\": \"𬟁\",\n \"處\": \"处\",\n \"虛\": \"虚\",\n \"虜\": \"虏\",\n \"號\": \"号\",\n \"虧\": \"亏\",\n \"虯\": \"虬\",\n \"蛺\": \"蛱\",\n \"蛻\": \"蜕\",\n \"蜆\": \"蚬\",\n \"蝀\": \"𬟽\",\n \"蝕\": \"蚀\",\n \"蝟\": \"猬\",\n \"蝦\": \"虾\",\n \"蝨\": \"虱\",\n \"蝸\": \"蜗\",\n \"螄\": \"蛳\",\n \"螞\": \"蚂\",\n \"螢\": \"萤\",\n \"螮\": \"䗖\",\n \"螻\": \"蝼\",\n \"螿\": \"螀\",\n \"蟂\": \"𫋇\",\n \"蟄\": \"蛰\",\n \"蟈\": \"蝈\",\n \"蟎\": \"螨\",\n \"蟘\": \"𫋌\",\n \"蟜\": \"𫊸\",\n \"蟣\": \"虮\",\n \"蟬\": \"蝉\",\n \"蟯\": \"蛲\",\n \"蟲\": \"虫\",\n \"蟳\": \"𫊻\",\n \"蟶\": \"蛏\",\n \"蟻\": \"蚁\",\n \"蠀\": \"𧏗\",\n \"蠁\": \"蚃\",\n \"蠅\": \"蝇\",\n \"蠆\": \"虿\",\n \"蠍\": \"蝎\",\n \"蠐\": \"蛴\",\n \"蠑\": \"蝾\",\n \"蠔\": \"蚝\",\n \"蠙\": \"𧏖\",\n \"蠟\": \"蜡\",\n \"蠣\": \"蛎\",\n \"蠦\": \"𫊮\",\n \"蠨\": \"蟏\",\n \"蠱\": \"蛊\",\n \"蠶\": \"蚕\",\n \"蠻\": \"蛮\",\n \"蠾\": \"𧑏\",\n \"衆\": \"众\",\n \"衊\": \"蔑\",\n \"術\": \"术\",\n \"衕\": \"同\",\n \"衚\": \"胡\",\n \"衛\": \"卫\",\n \"衝\": \"冲\",\n \"衹\": \"衹\",\n \"袞\": \"衮\",\n \"裊\": \"袅\",\n \"裏\": \"里\",\n \"補\": \"补\",\n \"裝\": \"装\",\n \"裡\": \"里\",\n \"製\": \"制\",\n \"複\": \"复\",\n \"褌\": \"裈\",\n \"褘\": \"袆\",\n \"褲\": \"裤\",\n \"褳\": \"裢\",\n \"褸\": \"褛\",\n \"褻\": \"亵\",\n \"襀\": \"𫌀\",\n \"襇\": \"裥\",\n \"襉\": \"裥\",\n \"襏\": \"袯\",\n \"襓\": \"𫋹\",\n \"襖\": \"袄\",\n \"襗\": \"𫋷\",\n \"襘\": \"𫋻\",\n \"襝\": \"裣\",\n \"襠\": \"裆\",\n \"襤\": \"褴\",\n \"襪\": \"袜\",\n \"襬\": \"摆\",\n \"襯\": \"衬\",\n \"襰\": \"𧝝\",\n \"襲\": \"袭\",\n \"襴\": \"襕\",\n \"襵\": \"𫌇\",\n \"覆\": \"覆\",\n \"覈\": \"核\",\n \"見\": \"见\",\n \"覎\": \"觃\",\n \"規\": \"规\",\n \"覓\": \"觅\",\n \"視\": \"视\",\n \"覘\": \"觇\",\n \"覛\": \"𫌪\",\n \"覡\": \"觋\",\n \"覥\": \"觍\",\n \"覦\": \"觎\",\n \"親\": \"亲\",\n \"覬\": \"觊\",\n \"覯\": \"觏\",\n \"覲\": \"觐\",\n \"覷\": \"觑\",\n \"覹\": \"𫌭\",\n \"覺\": \"觉\",\n \"覼\": \"𫌨\",\n \"覽\": \"览\",\n \"覿\": \"觌\",\n \"觀\": \"观\",\n \"觴\": \"觞\",\n \"觶\": \"觯\",\n \"觸\": \"触\",\n \"訁\": \"讠\",\n \"訂\": \"订\",\n \"訃\": \"讣\",\n \"計\": \"计\",\n \"訊\": \"讯\",\n \"訌\": \"讧\",\n \"討\": \"讨\",\n \"訏\": \"𬣙\",\n \"訐\": \"讦\",\n \"訑\": \"𫍙\",\n \"訒\": \"讱\",\n \"訓\": \"训\",\n \"訕\": \"讪\",\n \"訖\": \"讫\",\n \"託\": \"托\",\n \"記\": \"记\",\n \"訛\": \"讹\",\n \"訜\": \"𫍛\",\n \"訝\": \"讶\",\n \"訞\": \"𫍚\",\n \"訟\": \"讼\",\n \"訢\": \"䜣\",\n \"訣\": \"诀\",\n \"訥\": \"讷\",\n \"訨\": \"𫟞\",\n \"訩\": \"讻\",\n \"訪\": \"访\",\n \"設\": \"设\",\n \"許\": \"许\",\n \"訴\": \"诉\",\n \"訶\": \"诃\",\n \"診\": \"诊\",\n \"註\": \"注\",\n \"証\": \"证\",\n \"詀\": \"𧮪\",\n \"詁\": \"诂\",\n \"詆\": \"诋\",\n \"詊\": \"𫟟\",\n \"詎\": \"讵\",\n \"詐\": \"诈\",\n \"詑\": \"𫍡\",\n \"詒\": \"诒\",\n \"詓\": \"𫍜\",\n \"詔\": \"诏\",\n \"評\": \"评\",\n \"詖\": \"诐\",\n \"詗\": \"诇\",\n \"詘\": \"诎\",\n \"詛\": \"诅\",\n \"詝\": \"𬣞\",\n \"詞\": \"词\",\n \"詠\": \"咏\",\n \"詡\": \"诩\",\n \"詢\": \"询\",\n \"詣\": \"诣\",\n \"試\": \"试\",\n \"詩\": \"诗\",\n \"詪\": \"𬣳\",\n \"詫\": \"诧\",\n \"詬\": \"诟\",\n \"詭\": \"诡\",\n \"詮\": \"诠\",\n \"詰\": \"诘\",\n \"話\": \"话\",\n \"該\": \"该\",\n \"詳\": \"详\",\n \"詵\": \"诜\",\n \"詷\": \"𫍣\",\n \"詼\": \"诙\",\n \"詿\": \"诖\",\n \"誂\": \"𫍥\",\n \"誄\": \"诔\",\n \"誅\": \"诛\",\n \"誆\": \"诓\",\n \"誇\": \"夸\",\n \"誋\": \"𫍪\",\n \"誌\": \"志\",\n \"認\": \"认\",\n \"誑\": \"诳\",\n \"誒\": \"诶\",\n \"誕\": \"诞\",\n \"誘\": \"诱\",\n \"誚\": \"诮\",\n \"語\": \"语\",\n \"誠\": \"诚\",\n \"誡\": \"诫\",\n \"誣\": \"诬\",\n \"誤\": \"误\",\n \"誥\": \"诰\",\n \"誦\": \"诵\",\n \"誨\": \"诲\",\n \"說\": \"说\",\n \"誫\": \"𫍨\",\n \"説\": \"说\",\n \"誰\": \"谁\",\n \"課\": \"课\",\n \"誳\": \"𫍮\",\n \"誴\": \"𫟡\",\n \"誶\": \"谇\",\n \"誷\": \"𫍬\",\n \"誹\": \"诽\",\n \"誺\": \"𫍧\",\n \"誼\": \"谊\",\n \"誾\": \"訚\",\n \"調\": \"调\",\n \"諂\": \"谄\",\n \"諄\": \"谆\",\n \"談\": \"谈\",\n \"諉\": \"诿\",\n \"請\": \"请\",\n \"諍\": \"诤\",\n \"諏\": \"诹\",\n \"諑\": \"诼\",\n \"諒\": \"谅\",\n \"諓\": \"𬣡\",\n \"論\": \"论\",\n \"諗\": \"谂\",\n \"諛\": \"谀\",\n \"諜\": \"谍\",\n \"諝\": \"谞\",\n \"諞\": \"谝\",\n \"諟\": \"𬤊\",\n \"諡\": \"谥\",\n \"諢\": \"诨\",\n \"諣\": \"𫍩\",\n \"諤\": \"谔\",\n \"諥\": \"𫍳\",\n \"諦\": \"谛\",\n \"諧\": \"谐\",\n \"諫\": \"谏\",\n \"諭\": \"谕\",\n \"諮\": \"咨\",\n \"諯\": \"𫍱\",\n \"諰\": \"𫍰\",\n \"諱\": \"讳\",\n \"諲\": \"𬤇\",\n \"諳\": \"谙\",\n \"諴\": \"𫍯\",\n \"諶\": \"谌\",\n \"諷\": \"讽\",\n \"諸\": \"诸\",\n \"諺\": \"谚\",\n \"諼\": \"谖\",\n \"諾\": \"诺\",\n \"謀\": \"谋\",\n \"謁\": \"谒\",\n \"謂\": \"谓\",\n \"謄\": \"誊\",\n \"謅\": \"诌\",\n \"謆\": \"𫍸\",\n \"謉\": \"𫍷\",\n \"謊\": \"谎\",\n \"謎\": \"谜\",\n \"謏\": \"𫍲\",\n \"謐\": \"谧\",\n \"謔\": \"谑\",\n \"謖\": \"谡\",\n \"謗\": \"谤\",\n \"謙\": \"谦\",\n \"謚\": \"谥\",\n \"講\": \"讲\",\n \"謝\": \"谢\",\n \"謠\": \"谣\",\n \"謡\": \"谣\",\n \"謨\": \"谟\",\n \"謫\": \"谪\",\n \"謬\": \"谬\",\n \"謭\": \"谫\",\n \"謯\": \"𫍹\",\n \"謱\": \"𫍴\",\n \"謳\": \"讴\",\n \"謸\": \"𫍵\",\n \"謹\": \"谨\",\n \"謾\": \"谩\",\n \"譁\": \"哗\",\n \"譂\": \"𫟠\",\n \"譅\": \"𰶎\",\n \"譆\": \"𫍻\",\n \"證\": \"证\",\n \"譊\": \"𫍢\",\n \"譎\": \"谲\",\n \"譏\": \"讥\",\n \"譑\": \"𫍤\",\n \"譓\": \"𬤝\",\n \"譖\": \"谮\",\n \"識\": \"识\",\n \"譙\": \"谯\",\n \"譚\": \"谭\",\n \"譜\": \"谱\",\n \"譞\": \"𫍽\",\n \"譟\": \"噪\",\n \"譨\": \"𫍦\",\n \"譫\": \"谵\",\n \"譭\": \"毁\",\n \"譯\": \"译\",\n \"議\": \"议\",\n \"譴\": \"谴\",\n \"護\": \"护\",\n \"譸\": \"诪\",\n \"譽\": \"誉\",\n \"譾\": \"谫\",\n \"讀\": \"读\",\n \"讅\": \"谉\",\n \"變\": \"变\",\n \"讋\": \"詟\",\n \"讌\": \"䜩\",\n \"讎\": \"雠\",\n \"讒\": \"谗\",\n \"讓\": \"让\",\n \"讕\": \"谰\",\n \"讖\": \"谶\",\n \"讚\": \"赞\",\n \"讜\": \"谠\",\n \"讞\": \"谳\",\n \"豈\": \"岂\",\n \"豎\": \"竖\",\n \"豐\": \"丰\",\n \"豔\": \"艳\",\n \"豬\": \"猪\",\n \"豵\": \"𫎆\",\n \"豶\": \"豮\",\n \"貓\": \"猫\",\n \"貗\": \"𫎌\",\n \"貙\": \"䝙\",\n \"貝\": \"贝\",\n \"貞\": \"贞\",\n \"貟\": \"贠\",\n \"負\": \"负\",\n \"財\": \"财\",\n \"貢\": \"贡\",\n \"貧\": \"贫\",\n \"貨\": \"货\",\n \"販\": \"贩\",\n \"貪\": \"贪\",\n \"貫\": \"贯\",\n \"責\": \"责\",\n \"貯\": \"贮\",\n \"貰\": \"贳\",\n \"貲\": \"赀\",\n \"貳\": \"贰\",\n \"貴\": \"贵\",\n \"貶\": \"贬\",\n \"買\": \"买\",\n \"貸\": \"贷\",\n \"貺\": \"贶\",\n \"費\": \"费\",\n \"貼\": \"贴\",\n \"貽\": \"贻\",\n \"貿\": \"贸\",\n \"賀\": \"贺\",\n \"賁\": \"贲\",\n \"賂\": \"赂\",\n \"賃\": \"赁\",\n \"賄\": \"贿\",\n \"賅\": \"赅\",\n \"資\": \"资\",\n \"賈\": \"贾\",\n \"賊\": \"贼\",\n \"賑\": \"赈\",\n \"賒\": \"赊\",\n \"賓\": \"宾\",\n \"賕\": \"赇\",\n \"賙\": \"赒\",\n \"賚\": \"赉\",\n \"賜\": \"赐\",\n \"賝\": \"𫎩\",\n \"賞\": \"赏\",\n \"賟\": \"𧹖\",\n \"賠\": \"赔\",\n \"賡\": \"赓\",\n \"賢\": \"贤\",\n \"賣\": \"卖\",\n \"賤\": \"贱\",\n \"賦\": \"赋\",\n \"賧\": \"赕\",\n \"質\": \"质\",\n \"賫\": \"赍\",\n \"賬\": \"账\",\n \"賭\": \"赌\",\n \"賰\": \"䞐\",\n \"賴\": \"赖\",\n \"賵\": \"赗\",\n \"賺\": \"赚\",\n \"賻\": \"赙\",\n \"購\": \"购\",\n \"賽\": \"赛\",\n \"賾\": \"赜\",\n \"贃\": \"𧹗\",\n \"贄\": \"贽\",\n \"贅\": \"赘\",\n \"贇\": \"赟\",\n \"贈\": \"赠\",\n \"贉\": \"𫎫\",\n \"贊\": \"赞\",\n \"贋\": \"赝\",\n \"贍\": \"赡\",\n \"贏\": \"赢\",\n \"贐\": \"赆\",\n \"贑\": \"𫎬\",\n \"贓\": \"赃\",\n \"贔\": \"赑\",\n \"贖\": \"赎\",\n \"贗\": \"赝\",\n \"贚\": \"𫎦\",\n \"贛\": \"赣\",\n \"贜\": \"赃\",\n \"赬\": \"赪\",\n \"趕\": \"赶\",\n \"趙\": \"赵\",\n \"趨\": \"趋\",\n \"趲\": \"趱\",\n \"跡\": \"迹\",\n \"踐\": \"践\",\n \"踰\": \"逾\",\n \"踴\": \"踊\",\n \"蹌\": \"跄\",\n \"蹔\": \"𫏐\",\n \"蹕\": \"跸\",\n \"蹟\": \"迹\",\n \"蹠\": \"跖\",\n \"蹣\": \"蹒\",\n \"蹤\": \"踪\",\n \"蹳\": \"𫏆\",\n \"蹺\": \"跷\",\n \"蹻\": \"𫏋\",\n \"躂\": \"跶\",\n \"躉\": \"趸\",\n \"躊\": \"踌\",\n \"躋\": \"跻\",\n \"躍\": \"跃\",\n \"躎\": \"䟢\",\n \"躑\": \"踯\",\n \"躒\": \"跞\",\n \"躓\": \"踬\",\n \"躕\": \"蹰\",\n \"躘\": \"𨀁\",\n \"躚\": \"跹\",\n \"躝\": \"𨅬\",\n \"躡\": \"蹑\",\n \"躥\": \"蹿\",\n \"躦\": \"躜\",\n \"躪\": \"躏\",\n \"軀\": \"躯\",\n \"軉\": \"𨉗\",\n \"車\": \"车\",\n \"軋\": \"轧\",\n \"軌\": \"轨\",\n \"軍\": \"军\",\n \"軏\": \"𫐄\",\n \"軑\": \"轪\",\n \"軒\": \"轩\",\n \"軔\": \"轫\",\n \"軕\": \"𫐅\",\n \"軗\": \"𨐅\",\n \"軛\": \"轭\",\n \"軜\": \"𫐇\",\n \"軝\": \"𬨂\",\n \"軟\": \"软\",\n \"軤\": \"轷\",\n \"軨\": \"𫐉\",\n \"軫\": \"轸\",\n \"軬\": \"𫐊\",\n \"軲\": \"轱\",\n \"軷\": \"𫐈\",\n \"軸\": \"轴\",\n \"軹\": \"轵\",\n \"軺\": \"轺\",\n \"軻\": \"轲\",\n \"軼\": \"轶\",\n \"軾\": \"轼\",\n \"軿\": \"𫐌\",\n \"較\": \"较\",\n \"輄\": \"𨐈\",\n \"輅\": \"辂\",\n \"輇\": \"辁\",\n \"輈\": \"辀\",\n \"載\": \"载\",\n \"輊\": \"轾\",\n \"輋\": \"𪨶\",\n \"輒\": \"辄\",\n \"輓\": \"挽\",\n \"輔\": \"辅\",\n \"輕\": \"轻\",\n \"輖\": \"𫐏\",\n \"輗\": \"𫐐\",\n \"輛\": \"辆\",\n \"輜\": \"辎\",\n \"輝\": \"辉\",\n \"輞\": \"辋\",\n \"輟\": \"辍\",\n \"輢\": \"𫐎\",\n \"輥\": \"辊\",\n \"輦\": \"辇\",\n \"輨\": \"𫐑\",\n \"輩\": \"辈\",\n \"輪\": \"轮\",\n \"輬\": \"辌\",\n \"輮\": \"𫐓\",\n \"輯\": \"辑\",\n \"輳\": \"辏\",\n \"輶\": \"𬨎\",\n \"輷\": \"𫐒\",\n \"輸\": \"输\",\n \"輻\": \"辐\",\n \"輼\": \"辒\",\n \"輾\": \"辗\",\n \"輿\": \"舆\",\n \"轀\": \"辒\",\n \"轂\": \"毂\",\n \"轄\": \"辖\",\n \"轅\": \"辕\",\n \"轆\": \"辘\",\n \"轇\": \"𫐖\",\n \"轉\": \"转\",\n \"轊\": \"𫐕\",\n \"轍\": \"辙\",\n \"轎\": \"轿\",\n \"轐\": \"𫐗\",\n \"轔\": \"辚\",\n \"轗\": \"𫐘\",\n \"轟\": \"轰\",\n \"轠\": \"𫐙\",\n \"轡\": \"辔\",\n \"轢\": \"轹\",\n \"轣\": \"𫐆\",\n \"轤\": \"轳\",\n \"辦\": \"办\",\n \"辭\": \"辞\",\n \"辮\": \"辫\",\n \"辯\": \"辩\",\n \"農\": \"农\",\n \"迴\": \"回\",\n \"逕\": \"迳\",\n \"這\": \"这\",\n \"連\": \"连\",\n \"週\": \"周\",\n \"進\": \"进\",\n \"遊\": \"游\",\n \"運\": \"运\",\n \"過\": \"过\",\n \"達\": \"达\",\n \"違\": \"违\",\n \"遙\": \"遥\",\n \"遜\": \"逊\",\n \"遞\": \"递\",\n \"遠\": \"远\",\n \"遡\": \"溯\",\n \"適\": \"适\",\n \"遱\": \"𫐷\",\n \"遲\": \"迟\",\n \"遷\": \"迁\",\n \"選\": \"选\",\n \"遺\": \"遗\",\n \"遼\": \"辽\",\n \"邁\": \"迈\",\n \"還\": \"还\",\n \"邇\": \"迩\",\n \"邊\": \"边\",\n \"邏\": \"逻\",\n \"邐\": \"逦\",\n \"郟\": \"郏\",\n \"郵\": \"邮\",\n \"鄆\": \"郓\",\n \"鄉\": \"乡\",\n \"鄒\": \"邹\",\n \"鄔\": \"邬\",\n \"鄖\": \"郧\",\n \"鄟\": \"𫑘\",\n \"鄧\": \"邓\",\n \"鄩\": \"𬩽\",\n \"鄭\": \"郑\",\n \"鄰\": \"邻\",\n \"鄲\": \"郸\",\n \"鄳\": \"𫑡\",\n \"鄴\": \"邺\",\n \"鄶\": \"郐\",\n \"鄺\": \"邝\",\n \"酇\": \"酂\",\n \"酈\": \"郦\",\n \"醃\": \"腌\",\n \"醖\": \"酝\",\n \"醜\": \"丑\",\n \"醞\": \"酝\",\n \"醟\": \"蒏\",\n \"醣\": \"糖\",\n \"醫\": \"医\",\n \"醬\": \"酱\",\n \"醱\": \"酦\",\n \"醲\": \"𬪩\",\n \"醶\": \"𫑷\",\n \"釀\": \"酿\",\n \"釁\": \"衅\",\n \"釃\": \"酾\",\n \"釅\": \"酽\",\n \"釋\": \"释\",\n \"釐\": \"厘\",\n \"釒\": \"钅\",\n \"釓\": \"钆\",\n \"釔\": \"钇\",\n \"釕\": \"钌\",\n \"釗\": \"钊\",\n \"釘\": \"钉\",\n \"釙\": \"钋\",\n \"釚\": \"𫟲\",\n \"針\": \"针\",\n \"釟\": \"𫓥\",\n \"釣\": \"钓\",\n \"釤\": \"钐\",\n \"釦\": \"扣\",\n \"釧\": \"钏\",\n \"釨\": \"𫓦\",\n \"釩\": \"钒\",\n \"釲\": \"𫟳\",\n \"釳\": \"𨰿\",\n \"釴\": \"𬬩\",\n \"釵\": \"钗\",\n \"釷\": \"钍\",\n \"釹\": \"钕\",\n \"釺\": \"钎\",\n \"釾\": \"䥺\",\n \"釿\": \"𬬱\",\n \"鈀\": \"钯\",\n \"鈁\": \"钫\",\n \"鈃\": \"钘\",\n \"鈄\": \"钭\",\n \"鈅\": \"钥\",\n \"鈆\": \"𫓪\",\n \"鈇\": \"𫓧\",\n \"鈈\": \"钚\",\n \"鈉\": \"钠\",\n \"鈋\": \"𨱂\",\n \"鈍\": \"钝\",\n \"鈎\": \"钩\",\n \"鈐\": \"钤\",\n \"鈑\": \"钣\",\n \"鈒\": \"钑\",\n \"鈔\": \"钞\",\n \"鈕\": \"钮\",\n \"鈖\": \"𫟴\",\n \"鈗\": \"𫟵\",\n \"鈛\": \"𫓨\",\n \"鈞\": \"钧\",\n \"鈠\": \"𨱁\",\n \"鈡\": \"钟\",\n \"鈣\": \"钙\",\n \"鈥\": \"钬\",\n \"鈦\": \"钛\",\n \"鈧\": \"钪\",\n \"鈮\": \"铌\",\n \"鈯\": \"𨱄\",\n \"鈰\": \"铈\",\n \"鈲\": \"𨱃\",\n \"鈳\": \"钶\",\n \"鈴\": \"铃\",\n \"鈷\": \"钴\",\n \"鈸\": \"钹\",\n \"鈹\": \"铍\",\n \"鈺\": \"钰\",\n \"鈽\": \"钸\",\n \"鈾\": \"铀\",\n \"鈿\": \"钿\",\n \"鉀\": \"钾\",\n \"鉁\": \"𨱅\",\n \"鉅\": \"巨\",\n \"鉆\": \"钻\",\n \"鉈\": \"铊\",\n \"鉉\": \"铉\",\n \"鉊\": \"𬬿\",\n \"鉋\": \"铇\",\n \"鉍\": \"铋\",\n \"鉑\": \"铂\",\n \"鉔\": \"𫓬\",\n \"鉕\": \"钷\",\n \"鉗\": \"钳\",\n \"鉚\": \"铆\",\n \"鉛\": \"铅\",\n \"鉝\": \"𫟷\",\n \"鉞\": \"钺\",\n \"鉠\": \"𫓭\",\n \"鉢\": \"钵\",\n \"鉤\": \"钩\",\n \"鉥\": \"𬬸\",\n \"鉦\": \"钲\",\n \"鉧\": \"𬭁\",\n \"鉬\": \"钼\",\n \"鉭\": \"钽\",\n \"鉮\": \"𬬹\",\n \"鉳\": \"锫\",\n \"鉶\": \"铏\",\n \"鉷\": \"𫟹\",\n \"鉸\": \"铰\",\n \"鉺\": \"铒\",\n \"鉻\": \"铬\",\n \"鉽\": \"𫟸\",\n \"鉾\": \"𫓴\",\n \"鉿\": \"铪\",\n \"銀\": \"银\",\n \"銁\": \"𫓲\",\n \"銂\": \"𫟻\",\n \"銃\": \"铳\",\n \"銅\": \"铜\",\n \"銈\": \"𫓯\",\n \"銊\": \"𫓰\",\n \"銍\": \"铚\",\n \"銏\": \"𫟶\",\n \"銑\": \"铣\",\n \"銓\": \"铨\",\n \"銖\": \"铢\",\n \"銘\": \"铭\",\n \"銚\": \"铫\",\n \"銛\": \"铦\",\n \"銜\": \"衔\",\n \"銠\": \"铑\",\n \"銣\": \"铷\",\n \"銥\": \"铱\",\n \"銦\": \"铟\",\n \"銨\": \"铵\",\n \"銩\": \"铥\",\n \"銪\": \"铕\",\n \"銫\": \"铯\",\n \"銬\": \"铐\",\n \"銱\": \"铞\",\n \"銳\": \"锐\",\n \"銶\": \"𨱇\",\n \"銷\": \"销\",\n \"銹\": \"锈\",\n \"銻\": \"锑\",\n \"銼\": \"锉\",\n \"鋁\": \"铝\",\n \"鋂\": \"𰾄\",\n \"鋃\": \"锒\",\n \"鋅\": \"锌\",\n \"鋇\": \"钡\",\n \"鋉\": \"𨱈\",\n \"鋌\": \"铤\",\n \"鋏\": \"铗\",\n \"鋐\": \"𬭎\",\n \"鋒\": \"锋\",\n \"鋗\": \"𫓶\",\n \"鋙\": \"铻\",\n \"鋝\": \"锊\",\n \"鋟\": \"锓\",\n \"鋠\": \"𫓵\",\n \"鋣\": \"铘\",\n \"鋤\": \"锄\",\n \"鋥\": \"锃\",\n \"鋦\": \"锔\",\n \"鋨\": \"锇\",\n \"鋩\": \"铓\",\n \"鋪\": \"铺\",\n \"鋭\": \"锐\",\n \"鋮\": \"铖\",\n \"鋯\": \"锆\",\n \"鋰\": \"锂\",\n \"鋱\": \"铽\",\n \"鋶\": \"锍\",\n \"鋸\": \"锯\",\n \"鋹\": \"𬬮\",\n \"鋼\": \"钢\",\n \"錀\": \"𬬭\",\n \"錁\": \"锞\",\n \"錂\": \"𨱋\",\n \"錄\": \"录\",\n \"錆\": \"锖\",\n \"錇\": \"锫\",\n \"錈\": \"锩\",\n \"錏\": \"铔\",\n \"錐\": \"锥\",\n \"錒\": \"锕\",\n \"錕\": \"锟\",\n \"錘\": \"锤\",\n \"錙\": \"锱\",\n \"錚\": \"铮\",\n \"錛\": \"锛\",\n \"錜\": \"𫓻\",\n \"錝\": \"𫓽\",\n \"錞\": \"𬭚\",\n \"錟\": \"锬\",\n \"錠\": \"锭\",\n \"錡\": \"锜\",\n \"錢\": \"钱\",\n \"錤\": \"𫓹\",\n \"錥\": \"𫓾\",\n \"錦\": \"锦\",\n \"錨\": \"锚\",\n \"錩\": \"锠\",\n \"錫\": \"锡\",\n \"錮\": \"锢\",\n \"錯\": \"错\",\n \"録\": \"录\",\n \"錳\": \"锰\",\n \"錶\": \"表\",\n \"錸\": \"铼\",\n \"錼\": \"镎\",\n \"錽\": \"𫓸\",\n \"鍀\": \"锝\",\n \"鍁\": \"锨\",\n \"鍃\": \"锪\",\n \"鍄\": \"𨱉\",\n \"鍅\": \"钫\",\n \"鍆\": \"钔\",\n \"鍇\": \"锴\",\n \"鍈\": \"锳\",\n \"鍉\": \"𫔂\",\n \"鍊\": \"炼\",\n \"鍋\": \"锅\",\n \"鍍\": \"镀\",\n \"鍒\": \"𫔄\",\n \"鍔\": \"锷\",\n \"鍘\": \"铡\",\n \"鍚\": \"钖\",\n \"鍛\": \"锻\",\n \"鍠\": \"锽\",\n \"鍤\": \"锸\",\n \"鍥\": \"锲\",\n \"鍩\": \"锘\",\n \"鍬\": \"锹\",\n \"鍭\": \"𬭤\",\n \"鍮\": \"𨱎\",\n \"鍰\": \"锾\",\n \"鍵\": \"键\",\n \"鍶\": \"锶\",\n \"鍺\": \"锗\",\n \"鍼\": \"针\",\n \"鍾\": \"钟\",\n \"鎂\": \"镁\",\n \"鎄\": \"锿\",\n \"鎇\": \"镅\",\n \"鎈\": \"𫟿\",\n \"鎊\": \"镑\",\n \"鎌\": \"镰\",\n \"鎍\": \"𫔅\",\n \"鎓\": \"𬭩\",\n \"鎔\": \"镕\",\n \"鎖\": \"锁\",\n \"鎘\": \"镉\",\n \"鎙\": \"𫔈\",\n \"鎚\": \"锤\",\n \"鎛\": \"镈\",\n \"鎝\": \"𨱏\",\n \"鎞\": \"𫔇\",\n \"鎡\": \"镃\",\n \"鎢\": \"钨\",\n \"鎣\": \"蓥\",\n \"鎦\": \"镏\",\n \"鎧\": \"铠\",\n \"鎩\": \"铩\",\n \"鎪\": \"锼\",\n \"鎬\": \"镐\",\n \"鎭\": \"镇\",\n \"鎮\": \"镇\",\n \"鎯\": \"𨱍\",\n \"鎰\": \"镒\",\n \"鎲\": \"镋\",\n \"鎳\": \"镍\",\n \"鎵\": \"镓\",\n \"鎶\": \"鿔\",\n \"鎷\": \"𨰾\",\n \"鎸\": \"镌\",\n \"鎿\": \"镎\",\n \"鏃\": \"镞\",\n \"鏆\": \"𨱌\",\n \"鏇\": \"旋\",\n \"鏈\": \"链\",\n \"鏉\": \"𨱒\",\n \"鏌\": \"镆\",\n \"鏍\": \"镙\",\n \"鏏\": \"𬭬\",\n \"鏐\": \"镠\",\n \"鏑\": \"镝\",\n \"鏗\": \"铿\",\n \"鏘\": \"锵\",\n \"鏚\": \"𬭭\",\n \"鏜\": \"镗\",\n \"鏝\": \"镘\",\n \"鏞\": \"镛\",\n \"鏟\": \"铲\",\n \"鏡\": \"镜\",\n \"鏢\": \"镖\",\n \"鏤\": \"镂\",\n \"鏥\": \"𫔊\",\n \"鏦\": \"𫓩\",\n \"鏨\": \"錾\",\n \"鏰\": \"镚\",\n \"鏵\": \"铧\",\n \"鏷\": \"镤\",\n \"鏹\": \"镪\",\n \"鏺\": \"䥽\",\n \"鏻\": \"𬭸\",\n \"鏽\": \"锈\",\n \"鏾\": \"𫔌\",\n \"鐃\": \"铙\",\n \"鐄\": \"𨱑\",\n \"鐇\": \"𫔍\",\n \"鐈\": \"𫓱\",\n \"鐋\": \"铴\",\n \"鐍\": \"𫔎\",\n \"鐎\": \"𨱓\",\n \"鐏\": \"𨱔\",\n \"鐐\": \"镣\",\n \"鐒\": \"铹\",\n \"鐓\": \"镦\",\n \"鐔\": \"镡\",\n \"鐘\": \"钟\",\n \"鐙\": \"镫\",\n \"鐝\": \"镢\",\n \"鐠\": \"镨\",\n \"鐥\": \"䦅\",\n \"鐦\": \"锎\",\n \"鐧\": \"锏\",\n \"鐨\": \"镄\",\n \"鐩\": \"𬭼\",\n \"鐪\": \"𫓺\",\n \"鐫\": \"镌\",\n \"鐮\": \"镰\",\n \"鐯\": \"䦃\",\n \"鐲\": \"镯\",\n \"鐳\": \"镭\",\n \"鐵\": \"铁\",\n \"鐶\": \"镮\",\n \"鐸\": \"铎\",\n \"鐺\": \"铛\",\n \"鐼\": \"𫔁\",\n \"鐽\": \"𫟼\",\n \"鐿\": \"镱\",\n \"鑀\": \"𰾭\",\n \"鑄\": \"铸\",\n \"鑉\": \"𫠁\",\n \"鑊\": \"镬\",\n \"鑌\": \"镔\",\n \"鑑\": \"鉴\",\n \"鑒\": \"鉴\",\n \"鑔\": \"镲\",\n \"鑕\": \"锧\",\n \"鑞\": \"镴\",\n \"鑠\": \"铄\",\n \"鑣\": \"镳\",\n \"鑥\": \"镥\",\n \"鑪\": \"𬬻\",\n \"鑭\": \"镧\",\n \"鑰\": \"钥\",\n \"鑱\": \"镵\",\n \"鑲\": \"镶\",\n \"鑴\": \"𫔔\",\n \"鑷\": \"镊\",\n \"鑹\": \"镩\",\n \"鑼\": \"锣\",\n \"鑽\": \"钻\",\n \"鑾\": \"銮\",\n \"鑿\": \"凿\",\n \"钁\": \"镢\",\n \"钂\": \"镋\",\n \"長\": \"长\",\n \"門\": \"门\",\n \"閂\": \"闩\",\n \"閃\": \"闪\",\n \"閆\": \"闫\",\n \"閈\": \"闬\",\n \"閉\": \"闭\",\n \"開\": \"开\",\n \"閌\": \"闶\",\n \"閍\": \"𨸂\",\n \"閎\": \"闳\",\n \"閏\": \"闰\",\n \"閐\": \"𨸃\",\n \"閑\": \"闲\",\n \"閒\": \"闲\",\n \"間\": \"间\",\n \"閔\": \"闵\",\n \"閗\": \"𫔯\",\n \"閘\": \"闸\",\n \"閝\": \"𫠂\",\n \"閞\": \"𫔰\",\n \"閡\": \"阂\",\n \"閣\": \"阁\",\n \"閤\": \"合\",\n \"閥\": \"阀\",\n \"閨\": \"闺\",\n \"閩\": \"闽\",\n \"閫\": \"阃\",\n \"閬\": \"阆\",\n \"閭\": \"闾\",\n \"閱\": \"阅\",\n \"閲\": \"阅\",\n \"閵\": \"𫔴\",\n \"閶\": \"阊\",\n \"閹\": \"阉\",\n \"閻\": \"阎\",\n \"閼\": \"阏\",\n \"閽\": \"阍\",\n \"閾\": \"阈\",\n \"閿\": \"阌\",\n \"闃\": \"阒\",\n \"闆\": \"板\",\n \"闇\": \"暗\",\n \"闈\": \"闱\",\n \"闉\": \"𬮱\",\n \"闊\": \"阔\",\n \"闋\": \"阕\",\n \"闌\": \"阑\",\n \"闍\": \"阇\",\n \"闐\": \"阗\",\n \"闑\": \"𫔶\",\n \"闒\": \"阘\",\n \"闓\": \"闿\",\n \"闔\": \"阖\",\n \"闕\": \"阙\",\n \"闖\": \"闯\",\n \"關\": \"关\",\n \"闞\": \"阚\",\n \"闠\": \"阓\",\n \"闡\": \"阐\",\n \"闢\": \"辟\",\n \"闤\": \"阛\",\n \"闥\": \"闼\",\n \"阪\": \"阪\",\n \"陘\": \"陉\",\n \"陝\": \"陕\",\n \"陞\": \"升\",\n \"陣\": \"阵\",\n \"陰\": \"阴\",\n \"陳\": \"陈\",\n \"陸\": \"陆\",\n \"陽\": \"阳\",\n \"隉\": \"陧\",\n \"隊\": \"队\",\n \"階\": \"阶\",\n \"隑\": \"𬮿\",\n \"隕\": \"陨\",\n \"際\": \"际\",\n \"隤\": \"𬯎\",\n \"隨\": \"随\",\n \"險\": \"险\",\n \"隮\": \"𬯀\",\n \"隯\": \"陦\",\n \"隱\": \"隐\",\n \"隴\": \"陇\",\n \"隸\": \"隶\",\n \"隻\": \"只\",\n \"雋\": \"隽\",\n \"雖\": \"虽\",\n \"雙\": \"双\",\n \"雛\": \"雏\",\n \"雜\": \"杂\",\n \"雞\": \"鸡\",\n \"離\": \"离\",\n \"難\": \"难\",\n \"雲\": \"云\",\n \"電\": \"电\",\n \"霑\": \"沾\",\n \"霢\": \"霡\",\n \"霣\": \"𫕥\",\n \"霧\": \"雾\",\n \"霼\": \"𪵣\",\n \"霽\": \"霁\",\n \"靂\": \"雳\",\n \"靄\": \"霭\",\n \"靆\": \"叇\",\n \"靈\": \"灵\",\n \"靉\": \"叆\",\n \"靚\": \"靓\",\n \"靜\": \"静\",\n \"靝\": \"靔\",\n \"靦\": \"腼\",\n \"靧\": \"𫖃\",\n \"靨\": \"靥\",\n \"鞏\": \"巩\",\n \"鞝\": \"绱\",\n \"鞦\": \"秋\",\n \"鞽\": \"鞒\",\n \"鞾\": \"𫖇\",\n \"韁\": \"缰\",\n \"韃\": \"鞑\",\n \"韆\": \"千\",\n \"韉\": \"鞯\",\n \"韋\": \"韦\",\n \"韌\": \"韧\",\n \"韍\": \"韨\",\n \"韓\": \"韩\",\n \"韙\": \"韪\",\n \"韚\": \"𫠅\",\n \"韛\": \"𫖔\",\n \"韜\": \"韬\",\n \"韝\": \"鞲\",\n \"韞\": \"韫\",\n \"韠\": \"𫖒\",\n \"韻\": \"韵\",\n \"響\": \"响\",\n \"頁\": \"页\",\n \"頂\": \"顶\",\n \"頃\": \"顷\",\n \"項\": \"项\",\n \"順\": \"顺\",\n \"頇\": \"顸\",\n \"須\": \"须\",\n \"頊\": \"顼\",\n \"頌\": \"颂\",\n \"頍\": \"𫠆\",\n \"頎\": \"颀\",\n \"頏\": \"颃\",\n \"預\": \"预\",\n \"頑\": \"顽\",\n \"頒\": \"颁\",\n \"頓\": \"顿\",\n \"頔\": \"𬱖\",\n \"頗\": \"颇\",\n \"領\": \"领\",\n \"頜\": \"颌\",\n \"頠\": \"𬱟\",\n \"頡\": \"颉\",\n \"頤\": \"颐\",\n \"頦\": \"颏\",\n \"頫\": \"𫖯\",\n \"頭\": \"头\",\n \"頮\": \"颒\",\n \"頰\": \"颊\",\n \"頲\": \"颋\",\n \"頴\": \"颕\",\n \"頵\": \"𫖳\",\n \"頷\": \"颔\",\n \"頸\": \"颈\",\n \"頹\": \"颓\",\n \"頻\": \"频\",\n \"頽\": \"颓\",\n \"顂\": \"𩓋\",\n \"顃\": \"𩖖\",\n \"顅\": \"𫖶\",\n \"顆\": \"颗\",\n \"題\": \"题\",\n \"額\": \"额\",\n \"顎\": \"颚\",\n \"顏\": \"颜\",\n \"顒\": \"颙\",\n \"顓\": \"颛\",\n \"顔\": \"颜\",\n \"顗\": \"𫖮\",\n \"願\": \"愿\",\n \"顙\": \"颡\",\n \"顛\": \"颠\",\n \"類\": \"类\",\n \"顢\": \"颟\",\n \"顣\": \"𫖹\",\n \"顥\": \"颢\",\n \"顧\": \"顾\",\n \"顫\": \"颤\",\n \"顬\": \"颥\",\n \"顯\": \"显\",\n \"顰\": \"颦\",\n \"顱\": \"颅\",\n \"顳\": \"颞\",\n \"顴\": \"颧\",\n \"風\": \"风\",\n \"颭\": \"飐\",\n \"颮\": \"飑\",\n \"颯\": \"飒\",\n \"颰\": \"𩙥\",\n \"颱\": \"台\",\n \"颳\": \"刮\",\n \"颶\": \"飓\",\n \"颷\": \"𩙪\",\n \"颸\": \"飔\",\n \"颺\": \"飏\",\n \"颻\": \"飖\",\n \"颼\": \"飕\",\n \"颾\": \"𩙫\",\n \"飀\": \"飗\",\n \"飄\": \"飘\",\n \"飆\": \"飙\",\n \"飈\": \"飚\",\n \"飋\": \"𫗋\",\n \"飛\": \"飞\",\n \"飠\": \"饣\",\n \"飢\": \"饥\",\n \"飣\": \"饤\",\n \"飥\": \"饦\",\n \"飦\": \"𫗞\",\n \"飩\": \"饨\",\n \"飪\": \"饪\",\n \"飫\": \"饫\",\n \"飭\": \"饬\",\n \"飯\": \"饭\",\n \"飱\": \"飧\",\n \"飲\": \"饮\",\n \"飴\": \"饴\",\n \"飵\": \"𫗢\",\n \"飶\": \"𫗣\",\n \"飼\": \"饲\",\n \"飽\": \"饱\",\n \"飾\": \"饰\",\n \"飿\": \"饳\",\n \"餃\": \"饺\",\n \"餄\": \"饸\",\n \"餅\": \"饼\",\n \"餈\": \"糍\",\n \"餉\": \"饷\",\n \"養\": \"养\",\n \"餌\": \"饵\",\n \"餎\": \"饹\",\n \"餏\": \"饻\",\n \"餑\": \"饽\",\n \"餒\": \"馁\",\n \"餓\": \"饿\",\n \"餔\": \"𫗦\",\n \"餕\": \"馂\",\n \"餖\": \"饾\",\n \"餗\": \"𫗧\",\n \"餘\": \"余\",\n \"餚\": \"肴\",\n \"餛\": \"馄\",\n \"餜\": \"馃\",\n \"餞\": \"饯\",\n \"餡\": \"馅\",\n \"餦\": \"𫗠\",\n \"餧\": \"𫗪\",\n \"館\": \"馆\",\n \"餪\": \"𫗬\",\n \"餫\": \"𫗥\",\n \"餬\": \"糊\",\n \"餭\": \"𫗮\",\n \"餱\": \"糇\",\n \"餳\": \"饧\",\n \"餵\": \"喂\",\n \"餶\": \"馉\",\n \"餷\": \"馇\",\n \"餸\": \"𩠌\",\n \"餺\": \"馎\",\n \"餼\": \"饩\",\n \"餾\": \"馏\",\n \"餿\": \"馊\",\n \"饁\": \"馌\",\n \"饃\": \"馍\",\n \"饅\": \"馒\",\n \"饈\": \"馐\",\n \"饉\": \"馑\",\n \"饊\": \"馓\",\n \"饋\": \"馈\",\n \"饌\": \"馔\",\n \"饑\": \"饥\",\n \"饒\": \"饶\",\n \"饗\": \"飨\",\n \"饘\": \"𫗴\",\n \"饜\": \"餍\",\n \"饞\": \"馋\",\n \"饟\": \"𫗵\",\n \"饠\": \"𫗩\",\n \"饢\": \"馕\",\n \"馬\": \"马\",\n \"馭\": \"驭\",\n \"馮\": \"冯\",\n \"馯\": \"𫘛\",\n \"馱\": \"驮\",\n \"馳\": \"驰\",\n \"馴\": \"驯\",\n \"馹\": \"驲\",\n \"馼\": \"𫘜\",\n \"駁\": \"驳\",\n \"駃\": \"𫘝\",\n \"駉\": \"𬳶\",\n \"駊\": \"𫘟\",\n \"駎\": \"𩧨\",\n \"駐\": \"驻\",\n \"駑\": \"驽\",\n \"駒\": \"驹\",\n \"駓\": \"𬳵\",\n \"駔\": \"驵\",\n \"駕\": \"驾\",\n \"駘\": \"骀\",\n \"駙\": \"驸\",\n \"駚\": \"𩧫\",\n \"駛\": \"驶\",\n \"駝\": \"驼\",\n \"駞\": \"𫘞\",\n \"駟\": \"驷\",\n \"駡\": \"骂\",\n \"駢\": \"骈\",\n \"駤\": \"𫘠\",\n \"駧\": \"𩧲\",\n \"駩\": \"𩧴\",\n \"駪\": \"𬳽\",\n \"駫\": \"𫘡\",\n \"駭\": \"骇\",\n \"駰\": \"骃\",\n \"駱\": \"骆\",\n \"駶\": \"𩧺\",\n \"駸\": \"骎\",\n \"駻\": \"𫘣\",\n \"駼\": \"𬳿\",\n \"駿\": \"骏\",\n \"騁\": \"骋\",\n \"騂\": \"骍\",\n \"騃\": \"𫘤\",\n \"騄\": \"𫘧\",\n \"騅\": \"骓\",\n \"騉\": \"𫘥\",\n \"騊\": \"𫘦\",\n \"騌\": \"骔\",\n \"騍\": \"骒\",\n \"騎\": \"骑\",\n \"騏\": \"骐\",\n \"騑\": \"𬴂\",\n \"騔\": \"𩨀\",\n \"騖\": \"骛\",\n \"騙\": \"骗\",\n \"騚\": \"𩨊\",\n \"騜\": \"𫘩\",\n \"騝\": \"𩨃\",\n \"騞\": \"𬴃\",\n \"騟\": \"𩨈\",\n \"騠\": \"𫘨\",\n \"騤\": \"骙\",\n \"騧\": \"䯄\",\n \"騪\": \"𩨄\",\n \"騫\": \"骞\",\n \"騭\": \"骘\",\n \"騮\": \"骝\",\n \"騰\": \"腾\",\n \"騱\": \"𫘬\",\n \"騴\": \"𫘫\",\n \"騵\": \"𫘪\",\n \"騶\": \"驺\",\n \"騷\": \"骚\",\n \"騸\": \"骟\",\n \"騻\": \"𫘭\",\n \"騼\": \"𫠋\",\n \"騾\": \"骡\",\n \"驀\": \"蓦\",\n \"驁\": \"骜\",\n \"驂\": \"骖\",\n \"驃\": \"骠\",\n \"驄\": \"骢\",\n \"驅\": \"驱\",\n \"驊\": \"骅\",\n \"驋\": \"𩧯\",\n \"驌\": \"骕\",\n \"驍\": \"骁\",\n \"驎\": \"𬴊\",\n \"驏\": \"骣\",\n \"驓\": \"𫘯\",\n \"驕\": \"骄\",\n \"驗\": \"验\",\n \"驙\": \"𫘰\",\n \"驚\": \"惊\",\n \"驛\": \"驿\",\n \"驟\": \"骤\",\n \"驢\": \"驴\",\n \"驤\": \"骧\",\n \"驥\": \"骥\",\n \"驦\": \"骦\",\n \"驨\": \"𫘱\",\n \"驪\": \"骊\",\n \"驫\": \"骉\",\n \"骯\": \"肮\",\n \"髏\": \"髅\",\n \"髒\": \"脏\",\n \"體\": \"体\",\n \"髕\": \"髌\",\n \"髖\": \"髋\",\n \"髮\": \"发\",\n \"鬆\": \"松\",\n \"鬍\": \"胡\",\n \"鬖\": \"𩭹\",\n \"鬚\": \"须\",\n \"鬠\": \"𫘽\",\n \"鬢\": \"鬓\",\n \"鬥\": \"斗\",\n \"鬧\": \"闹\",\n \"鬨\": \"哄\",\n \"鬩\": \"阋\",\n \"鬮\": \"阄\",\n \"鬱\": \"郁\",\n \"鬹\": \"鬶\",\n \"魎\": \"魉\",\n \"魘\": \"魇\",\n \"魚\": \"鱼\",\n \"魛\": \"鱽\",\n \"魟\": \"𫚉\",\n \"魢\": \"鱾\",\n \"魥\": \"𩽹\",\n \"魦\": \"𫚌\",\n \"魨\": \"鲀\",\n \"魯\": \"鲁\",\n \"魴\": \"鲂\",\n \"魵\": \"𫚍\",\n \"魷\": \"鱿\",\n \"魺\": \"鲄\",\n \"魽\": \"𫠐\",\n \"鮀\": \"𬶍\",\n \"鮁\": \"鲅\",\n \"鮃\": \"鲆\",\n \"鮄\": \"𫚒\",\n \"鮅\": \"𫚑\",\n \"鮆\": \"𫚖\",\n \"鮈\": \"𬶋\",\n \"鮊\": \"鲌\",\n \"鮋\": \"鲉\",\n \"鮍\": \"鲏\",\n \"鮎\": \"鲇\",\n \"鮐\": \"鲐\",\n \"鮑\": \"鲍\",\n \"鮒\": \"鲋\",\n \"鮓\": \"鲊\",\n \"鮚\": \"鲒\",\n \"鮜\": \"鲘\",\n \"鮝\": \"鲞\",\n \"鮞\": \"鲕\",\n \"鮟\": \"𩽾\",\n \"鮠\": \"𬶏\",\n \"鮡\": \"𬶐\",\n \"鮣\": \"䲟\",\n \"鮤\": \"𫚓\",\n \"鮦\": \"鲖\",\n \"鮪\": \"鲔\",\n \"鮫\": \"鲛\",\n \"鮭\": \"鲑\",\n \"鮮\": \"鲜\",\n \"鮯\": \"𫚗\",\n \"鮰\": \"𫚔\",\n \"鮳\": \"鲓\",\n \"鮵\": \"𫚛\",\n \"鮶\": \"鲪\",\n \"鮸\": \"𩾃\",\n \"鮺\": \"鲝\",\n \"鮿\": \"𫚚\",\n \"鯀\": \"鲧\",\n \"鯁\": \"鲠\",\n \"鯄\": \"𩾁\",\n \"鯆\": \"𫚙\",\n \"鯇\": \"鲩\",\n \"鯉\": \"鲤\",\n \"鯊\": \"鲨\",\n \"鯒\": \"鲬\",\n \"鯔\": \"鲻\",\n \"鯕\": \"鲯\",\n \"鯖\": \"鲭\",\n \"鯗\": \"鲞\",\n \"鯛\": \"鲷\",\n \"鯝\": \"鲴\",\n \"鯞\": \"𫚡\",\n \"鯡\": \"鲱\",\n \"鯢\": \"鲵\",\n \"鯤\": \"鲲\",\n \"鯧\": \"鲳\",\n \"鯨\": \"鲸\",\n \"鯪\": \"鲮\",\n \"鯫\": \"鲰\",\n \"鯬\": \"𫚞\",\n \"鯰\": \"鲶\",\n \"鯱\": \"𩾇\",\n \"鯴\": \"鲺\",\n \"鯶\": \"𩽼\",\n \"鯷\": \"鳀\",\n \"鯻\": \"𬶟\",\n \"鯽\": \"鲫\",\n \"鯾\": \"𫚣\",\n \"鯿\": \"鳊\",\n \"鰁\": \"鳈\",\n \"鰂\": \"鲗\",\n \"鰃\": \"鳂\",\n \"鰆\": \"䲠\",\n \"鰈\": \"鲽\",\n \"鰉\": \"鳇\",\n \"鰊\": \"𬶠\",\n \"鰋\": \"𫚢\",\n \"鰌\": \"䲡\",\n \"鰍\": \"鳅\",\n \"鰏\": \"鲾\",\n \"鰐\": \"鳄\",\n \"鰑\": \"𫚊\",\n \"鰒\": \"鳆\",\n \"鰓\": \"鳃\",\n \"鰕\": \"𫚥\",\n \"鰛\": \"鳁\",\n \"鰜\": \"鳒\",\n \"鰟\": \"鳑\",\n \"鰠\": \"鳋\",\n \"鰣\": \"鲥\",\n \"鰤\": \"𫚕\",\n \"鰥\": \"鳏\",\n \"鰦\": \"𫚤\",\n \"鰧\": \"䲢\",\n \"鰨\": \"鳎\",\n \"鰩\": \"鳐\",\n \"鰫\": \"𫚦\",\n \"鰭\": \"鳍\",\n \"鰮\": \"鳁\",\n \"鰱\": \"鲢\",\n \"鰲\": \"鳌\",\n \"鰳\": \"鳓\",\n \"鰵\": \"鳘\",\n \"鰶\": \"𬶭\",\n \"鰷\": \"鲦\",\n \"鰹\": \"鲣\",\n \"鰺\": \"鲹\",\n \"鰻\": \"鳗\",\n \"鰼\": \"鳛\",\n \"鰽\": \"𫚧\",\n \"鰾\": \"鳔\",\n \"鱀\": \"𬶨\",\n \"鱂\": \"鳉\",\n \"鱄\": \"𫚋\",\n \"鱅\": \"鳙\",\n \"鱆\": \"𫠒\",\n \"鱇\": \"𩾌\",\n \"鱈\": \"鳕\",\n \"鱉\": \"鳖\",\n \"鱊\": \"𫚪\",\n \"鱒\": \"鳟\",\n \"鱔\": \"鳝\",\n \"鱖\": \"鳜\",\n \"鱗\": \"鳞\",\n \"鱘\": \"鲟\",\n \"鱚\": \"𬶮\",\n \"鱝\": \"鲼\",\n \"鱟\": \"鲎\",\n \"鱠\": \"鲙\",\n \"鱢\": \"𫚫\",\n \"鱣\": \"鳣\",\n \"鱤\": \"鳡\",\n \"鱧\": \"鳢\",\n \"鱨\": \"鲿\",\n \"鱭\": \"鲚\",\n \"鱮\": \"𫚈\",\n \"鱯\": \"鳠\",\n \"鱲\": \"𫚭\",\n \"鱷\": \"鳄\",\n \"鱸\": \"鲈\",\n \"鱺\": \"鲡\",\n \"鳥\": \"鸟\",\n \"鳧\": \"凫\",\n \"鳩\": \"鸠\",\n \"鳬\": \"凫\",\n \"鳲\": \"鸤\",\n \"鳳\": \"凤\",\n \"鳴\": \"鸣\",\n \"鳶\": \"鸢\",\n \"鳷\": \"𫛛\",\n \"鳼\": \"𪉃\",\n \"鳽\": \"𫛚\",\n \"鳾\": \"䴓\",\n \"鴀\": \"𫛜\",\n \"鴃\": \"𫛞\",\n \"鴅\": \"𫛝\",\n \"鴆\": \"鸩\",\n \"鴇\": \"鸨\",\n \"鴉\": \"鸦\",\n \"鴐\": \"𫛤\",\n \"鴒\": \"鸰\",\n \"鴔\": \"𫛡\",\n \"鴕\": \"鸵\",\n \"鴗\": \"𫁡\",\n \"鴛\": \"鸳\",\n \"鴜\": \"𪉈\",\n \"鴝\": \"鸲\",\n \"鴞\": \"鸮\",\n \"鴟\": \"鸱\",\n \"鴣\": \"鸪\",\n \"鴥\": \"𫛣\",\n \"鴦\": \"鸯\",\n \"鴨\": \"鸭\",\n \"鴮\": \"𫛦\",\n \"鴯\": \"鸸\",\n \"鴰\": \"鸹\",\n \"鴲\": \"𪉆\",\n \"鴳\": \"𫛩\",\n \"鴴\": \"鸻\",\n \"鴷\": \"䴕\",\n \"鴻\": \"鸿\",\n \"鴽\": \"𫛪\",\n \"鴿\": \"鸽\",\n \"鵁\": \"䴔\",\n \"鵂\": \"鸺\",\n \"鵃\": \"鸼\",\n \"鵊\": \"𫛥\",\n \"鵏\": \"𬷕\",\n \"鵐\": \"鹀\",\n \"鵑\": \"鹃\",\n \"鵒\": \"鹆\",\n \"鵓\": \"鹁\",\n \"鵚\": \"𪉍\",\n \"鵜\": \"鹈\",\n \"鵝\": \"鹅\",\n \"鵟\": \"𫛭\",\n \"鵠\": \"鹄\",\n \"鵡\": \"鹉\",\n \"鵧\": \"𫛨\",\n \"鵩\": \"𫛳\",\n \"鵪\": \"鹌\",\n \"鵫\": \"𫛱\",\n \"鵬\": \"鹏\",\n \"鵮\": \"鹐\",\n \"鵯\": \"鹎\",\n \"鵰\": \"雕\",\n \"鵲\": \"鹊\",\n \"鵷\": \"鹓\",\n \"鵾\": \"鹍\",\n \"鶄\": \"䴖\",\n \"鶇\": \"鸫\",\n \"鶉\": \"鹑\",\n \"鶊\": \"鹒\",\n \"鶌\": \"𫛵\",\n \"鶒\": \"𫛶\",\n \"鶓\": \"鹋\",\n \"鶖\": \"鹙\",\n \"鶗\": \"𫛸\",\n \"鶘\": \"鹕\",\n \"鶚\": \"鹗\",\n \"鶠\": \"𬸘\",\n \"鶡\": \"鹖\",\n \"鶥\": \"鹛\",\n \"鶦\": \"𫛷\",\n \"鶩\": \"鹜\",\n \"鶪\": \"䴗\",\n \"鶬\": \"鸧\",\n \"鶭\": \"𫛯\",\n \"鶯\": \"莺\",\n \"鶰\": \"𫛫\",\n \"鶱\": \"𬸣\",\n \"鶲\": \"鹟\",\n \"鶴\": \"鹤\",\n \"鶹\": \"鹠\",\n \"鶺\": \"鹡\",\n \"鶻\": \"鹘\",\n \"鶼\": \"鹣\",\n \"鶿\": \"鹚\",\n \"鷀\": \"鹚\",\n \"鷁\": \"鹢\",\n \"鷂\": \"鹞\",\n \"鷄\": \"鸡\",\n \"鷅\": \"𫛽\",\n \"鷉\": \"䴘\",\n \"鷊\": \"鹝\",\n \"鷐\": \"𫜀\",\n \"鷓\": \"鹧\",\n \"鷔\": \"𪉑\",\n \"鷖\": \"鹥\",\n \"鷗\": \"鸥\",\n \"鷙\": \"鸷\",\n \"鷚\": \"鹨\",\n \"鷟\": \"𬸦\",\n \"鷣\": \"𫜃\",\n \"鷤\": \"𫛴\",\n \"鷥\": \"鸶\",\n \"鷦\": \"鹪\",\n \"鷨\": \"𪉊\",\n \"鷩\": \"𫜁\",\n \"鷫\": \"鹔\",\n \"鷭\": \"𬸪\",\n \"鷯\": \"鹩\",\n \"鷲\": \"鹫\",\n \"鷳\": \"鹇\",\n \"鷴\": \"鹇\",\n \"鷷\": \"𫜄\",\n \"鷸\": \"鹬\",\n \"鷹\": \"鹰\",\n \"鷺\": \"鹭\",\n \"鷽\": \"鸴\",\n \"鷿\": \"𬸯\",\n \"鸂\": \"㶉\",\n \"鸇\": \"鹯\",\n \"鸊\": \"䴙\",\n \"鸋\": \"𫛢\",\n \"鸌\": \"鹱\",\n \"鸏\": \"鹲\",\n \"鸑\": \"𬸚\",\n \"鸕\": \"鸬\",\n \"鸗\": \"𫛟\",\n \"鸘\": \"鹴\",\n \"鸚\": \"鹦\",\n \"鸛\": \"鹳\",\n \"鸝\": \"鹂\",\n \"鸞\": \"鸾\",\n \"鹵\": \"卤\",\n \"鹹\": \"咸\",\n \"鹺\": \"鹾\",\n \"鹼\": \"碱\",\n \"鹽\": \"盐\",\n \"麗\": \"丽\",\n \"麥\": \"麦\",\n \"麨\": \"𪎊\",\n \"麩\": \"麸\",\n \"麪\": \"面\",\n \"麫\": \"面\",\n \"麬\": \"𤿲\",\n \"麯\": \"曲\",\n \"麲\": \"𪎉\",\n \"麳\": \"𪎌\",\n \"麴\": \"曲\",\n \"麵\": \"面\",\n \"麷\": \"𫜑\",\n \"麼\": \"么\",\n \"麽\": \"么\",\n \"黃\": \"黄\",\n \"黌\": \"黉\",\n \"點\": \"点\",\n \"黨\": \"党\",\n \"黲\": \"黪\",\n \"黴\": \"霉\",\n \"黶\": \"黡\",\n \"黷\": \"黩\",\n \"黽\": \"黾\",\n \"黿\": \"鼋\",\n \"鼂\": \"鼌\",\n \"鼉\": \"鼍\",\n \"鼕\": \"冬\",\n \"鼴\": \"鼹\",\n \"齊\": \"齐\",\n \"齋\": \"斋\",\n \"齎\": \"赍\",\n \"齏\": \"齑\",\n \"齒\": \"齿\",\n \"齔\": \"龀\",\n \"齕\": \"龁\",\n \"齗\": \"龂\",\n \"齘\": \"𬹼\",\n \"齙\": \"龅\",\n \"齜\": \"龇\",\n \"齟\": \"龃\",\n \"齠\": \"龆\",\n \"齡\": \"龄\",\n \"齣\": \"出\",\n \"齦\": \"龈\",\n \"齧\": \"啮\",\n \"齩\": \"𫜪\",\n \"齪\": \"龊\",\n \"齬\": \"龉\",\n \"齭\": \"𫜭\",\n \"齮\": \"𬺈\",\n \"齯\": \"𫠜\",\n \"齰\": \"𫜬\",\n \"齲\": \"龋\",\n \"齴\": \"𫜮\",\n \"齶\": \"腭\",\n \"齷\": \"龌\",\n \"齼\": \"𬺓\",\n \"齾\": \"𫜰\",\n \"龍\": \"龙\",\n \"龎\": \"厐\",\n \"龐\": \"庞\",\n \"龑\": \"䶮\",\n \"龓\": \"𫜲\",\n \"龔\": \"龚\",\n \"龕\": \"龛\",\n \"龜\": \"龟\",\n \"龭\": \"𩨎\",\n \"龯\": \"𨱆\",\n \"鿁\": \"䜤\",\n \"鿓\": \"鿒\",\n \"𠁞\": \"𠀾\",\n \"𠌥\": \"𠆿\",\n \"𠏢\": \"𠉗\",\n \"𠐊\": \"𫝋\",\n \"𠗣\": \"㓆\",\n \"𠞆\": \"𠛆\",\n \"𠠎\": \"𠚳\",\n \"𠬙\": \"𪠡\",\n \"𠽃\": \"𪠺\",\n \"𠿕\": \"𪜎\",\n \"𡂡\": \"𪢒\",\n \"𡃄\": \"𪡺\",\n \"𡃕\": \"𠴛\",\n \"𡃤\": \"𪢐\",\n \"𡄔\": \"𠴢\",\n \"𡄣\": \"𠵸\",\n \"𡅏\": \"𠲥\",\n \"𡅯\": \"𪢖\",\n \"𡑍\": \"𫭼\",\n \"𡑭\": \"𡋗\",\n \"𡓁\": \"𪤄\",\n \"𡓾\": \"𡋀\",\n \"𡔖\": \"𡍣\",\n \"𡞵\": \"㛟\",\n \"𡟫\": \"𫝪\",\n \"𡠹\": \"㛿\",\n \"𡢃\": \"㛠\",\n \"𡮉\": \"𡭜\",\n \"𡮣\": \"𡭬\",\n \"𡳳\": \"𡳃\",\n \"𡸗\": \"𪨩\",\n \"𡹬\": \"𪨹\",\n \"𡻕\": \"岁\",\n \"𡽗\": \"𡸃\",\n \"𡾱\": \"㟜\",\n \"𡿖\": \"𪩛\",\n \"𢍰\": \"𪪴\",\n \"𢠼\": \"𢙑\",\n \"𢣐\": \"𪬚\",\n \"𢣚\": \"𢘝\",\n \"𢣭\": \"𢘞\",\n \"𢤩\": \"𪫡\",\n \"𢤱\": \"𢘙\",\n \"𢤿\": \"𪬯\",\n \"𢯷\": \"𪭝\",\n \"𢶒\": \"𪭯\",\n \"𢶫\": \"𢫞\",\n \"𢷮\": \"𢫊\",\n \"𢹿\": \"𢬦\",\n \"𢺳\": \"𪮳\",\n \"𣈶\": \"暅\",\n \"𣋋\": \"𣈣\",\n \"𣍐\": \"𫧃\",\n \"𣙎\": \"㭣\",\n \"𣜬\": \"𪳗\",\n \"𣝕\": \"𣘷\",\n \"𣞻\": \"𣘓\",\n \"𣠩\": \"𣞎\",\n \"𣠲\": \"𣑶\",\n \"𣯩\": \"𣯣\",\n \"𣯴\": \"𣭤\",\n \"𣯶\": \"毶\",\n \"𣽏\": \"𪶮\",\n \"𣾷\": \"㳢\",\n \"𣿉\": \"𣶫\",\n \"𤁣\": \"𣺽\",\n \"𤄷\": \"𪶒\",\n \"𤅶\": \"𣷷\",\n \"𤑳\": \"𤎻\",\n \"𤑹\": \"𪹀\",\n \"𤒎\": \"𤊀\",\n \"𤒻\": \"𪹹\",\n \"𤓌\": \"𪹠\",\n \"𤓎\": \"𤎺\",\n \"𤓩\": \"𤊰\",\n \"𤘀\": \"𪺣\",\n \"𤛮\": \"𤙯\",\n \"𤛱\": \"𫞢\",\n \"𤜆\": \"𪺪\",\n \"𤠮\": \"𪺸\",\n \"𤢟\": \"𤝢\",\n \"𤢻\": \"𢢐\",\n \"𤩂\": \"𫞧\",\n \"𤪺\": \"㻘\",\n \"𤫩\": \"㻏\",\n \"𤬅\": \"𪼴\",\n \"𤳷\": \"𪽝\",\n \"𤳸\": \"𤳄\",\n \"𤷃\": \"𪽭\",\n \"𤸫\": \"𤶧\",\n \"𤺔\": \"𪽴\",\n \"𥊝\": \"𥅿\",\n \"𥌃\": \"𥅘\",\n \"𥏝\": \"𪿊\",\n \"𥕥\": \"𥐰\",\n \"𥖅\": \"𥐯\",\n \"𥖲\": \"𪿞\",\n \"𥗇\": \"𪿵\",\n \"𥗽\": \"𬒗\",\n \"𥜐\": \"𫀓\",\n \"𥜰\": \"𫀌\",\n \"𥞵\": \"𥞦\",\n \"𥢢\": \"䅪\",\n \"𥢶\": \"𫞷\",\n \"𥢷\": \"𫀮\",\n \"𥨐\": \"𥧂\",\n \"𥪂\": \"𥩺\",\n \"𥯤\": \"𫁳\",\n \"𥴨\": \"𫂖\",\n \"𥴼\": \"𫁺\",\n \"𥵃\": \"𥱔\",\n \"𥵊\": \"𥭉\",\n \"𥶽\": \"𫁱\",\n \"𥸠\": \"𥮋\",\n \"𥻦\": \"𫂿\",\n \"𥼽\": \"𥹥\",\n \"𥽖\": \"𥺇\",\n \"𥾯\": \"𫄝\",\n \"𥿊\": \"𦈈\",\n \"𦀖\": \"𫄦\",\n \"𦂅\": \"𦈒\",\n \"𦃄\": \"𦈗\",\n \"𦃩\": \"𫄯\",\n \"𦅇\": \"𫄪\",\n \"𦅈\": \"𫄵\",\n \"𦆲\": \"𫟇\",\n \"𦒀\": \"𫅥\",\n \"𦔖\": \"𫅼\",\n \"𦘧\": \"𡳒\",\n \"𦟼\": \"𫆝\",\n \"𦠅\": \"𫞅\",\n \"𦡝\": \"𫆫\",\n \"𦢈\": \"𣍨\",\n \"𦣎\": \"𦟗\",\n \"𦧺\": \"𫇘\",\n \"𦪙\": \"䑽\",\n \"𦪽\": \"𦨩\",\n \"𦱌\": \"𫇪\",\n \"𦾟\": \"𦶻\",\n \"𧎈\": \"𧌥\",\n \"𧒯\": \"𫊹\",\n \"𧔥\": \"𧒭\",\n \"𧕟\": \"𧉐\",\n \"𧜗\": \"䘞\",\n \"𧜵\": \"䙊\",\n \"𧝞\": \"䘛\",\n \"𧞫\": \"𫌋\",\n \"𧟀\": \"𧝧\",\n \"𧡴\": \"𫌫\",\n \"𧢄\": \"𫌬\",\n \"𧦝\": \"𫍞\",\n \"𧦧\": \"𫍟\",\n \"𧩕\": \"𫍭\",\n \"𧩙\": \"䜥\",\n \"𧩼\": \"𫍶\",\n \"𧫝\": \"𫍺\",\n \"𧬤\": \"𫍼\",\n \"𧭈\": \"𫍾\",\n \"𧭹\": \"𫍐\",\n \"𧳟\": \"𧳕\",\n \"𧵳\": \"䞌\",\n \"𧶔\": \"𧹓\",\n \"𧶧\": \"䞎\",\n \"𧷎\": \"𪠀\",\n \"𧸘\": \"𫎨\",\n \"𧹈\": \"𪥠\",\n \"𧽯\": \"𫎸\",\n \"𨂐\": \"𫏌\",\n \"𨄣\": \"𨀱\",\n \"𨅍\": \"𨁴\",\n \"𨆪\": \"𫏕\",\n \"𨇁\": \"𧿈\",\n \"𨇞\": \"𨅫\",\n \"𨇤\": \"𫏨\",\n \"𨇰\": \"𫏞\",\n \"𨇽\": \"𫏑\",\n \"𨈊\": \"𨂺\",\n \"𨈌\": \"𨄄\",\n \"𨊰\": \"䢀\",\n \"𨊸\": \"䢁\",\n \"𨊻\": \"𨐆\",\n \"𨋢\": \"䢂\",\n \"𨌈\": \"𫐍\",\n \"𨍰\": \"𫐔\",\n \"𨎌\": \"𫐋\",\n \"𨎮\": \"𨐉\",\n \"𨏠\": \"𨐇\",\n \"𨏥\": \"𨐊\",\n \"𨞺\": \"𫟫\",\n \"𨟊\": \"𫟬\",\n \"𨢿\": \"𨡙\",\n \"𨣈\": \"𨡺\",\n \"𨣞\": \"𨟳\",\n \"𨣧\": \"𨠨\",\n \"𨤻\": \"𨤰\",\n \"𨥛\": \"𨱀\",\n \"𨥟\": \"𫓫\",\n \"𨦫\": \"䦀\",\n \"𨧀\": \"𬭊\",\n \"𨧜\": \"䦁\",\n \"𨧰\": \"𫟽\",\n \"𨧱\": \"𨱊\",\n \"𨨏\": \"𬭛\",\n \"𨨛\": \"𫓼\",\n \"𨨢\": \"𫓿\",\n \"𨩰\": \"𫟾\",\n \"𨪕\": \"𫓮\",\n \"𨫒\": \"𨱐\",\n \"𨬖\": \"𫔏\",\n \"𨭆\": \"𬭶\",\n \"𨭎\": \"𬭳\",\n \"𨭖\": \"𫔑\",\n \"𨭸\": \"𫔐\",\n \"𨮂\": \"𨱕\",\n \"𨮳\": \"𫔒\",\n \"𨯅\": \"䥿\",\n \"𨯟\": \"𫔓\",\n \"𨰃\": \"𫔉\",\n \"𨰋\": \"𫓳\",\n \"𨰥\": \"𫔕\",\n \"𨰲\": \"𫔃\",\n \"𨲳\": \"𫔖\",\n \"𨳑\": \"𨸁\",\n \"𨳕\": \"𨸀\",\n \"𨴗\": \"𨸅\",\n \"𨴹\": \"𫔲\",\n \"𨵩\": \"𨸆\",\n \"𨵸\": \"𨸇\",\n \"𨶀\": \"𨸉\",\n \"𨶏\": \"𨸊\",\n \"𨶮\": \"𨸌\",\n \"𨶲\": \"𨸋\",\n \"𨷲\": \"𨸎\",\n \"𨼳\": \"𫔽\",\n \"𨽏\": \"𨸘\",\n \"𩀨\": \"𫕚\",\n \"𩅙\": \"𫕨\",\n \"𩎖\": \"𫖑\",\n \"𩎢\": \"𩏾\",\n \"𩏂\": \"𫖓\",\n \"𩏠\": \"𫖖\",\n \"𩏪\": \"𩏽\",\n \"𩏷\": \"𫃗\",\n \"𩑔\": \"𫖪\",\n \"𩒎\": \"𫖭\",\n \"𩓣\": \"𩖕\",\n \"𩓥\": \"𫖵\",\n \"𩔑\": \"𫖷\",\n \"𩔳\": \"𫖴\",\n \"𩖰\": \"𫠇\",\n \"𩗀\": \"𩙦\",\n \"𩗓\": \"𫗈\",\n \"𩗴\": \"𫗉\",\n \"𩘀\": \"𩙩\",\n \"𩘝\": \"𩙭\",\n \"𩘹\": \"𩙨\",\n \"𩘺\": \"𩙬\",\n \"𩙈\": \"𩙰\",\n \"𩚛\": \"𩟿\",\n \"𩚥\": \"𩠀\",\n \"𩚩\": \"𫗡\",\n \"𩚵\": \"𩠁\",\n \"𩛆\": \"𩠂\",\n \"𩛌\": \"𫗤\",\n \"𩛡\": \"𫗨\",\n \"𩛩\": \"𩠃\",\n \"𩜇\": \"𩠉\",\n \"𩜦\": \"𩠆\",\n \"𩜵\": \"𩠊\",\n \"𩝔\": \"𩠋\",\n \"𩝽\": \"𫗳\",\n \"𩞄\": \"𩠎\",\n \"𩞦\": \"𩠏\",\n \"𩞯\": \"䭪\",\n \"𩟐\": \"𩠅\",\n \"𩟗\": \"𫗚\",\n \"𩠴\": \"𩠠\",\n \"𩡣\": \"𩡖\",\n \"𩡺\": \"𩧦\",\n \"𩢡\": \"𩧬\",\n \"𩢴\": \"𩧵\",\n \"𩢸\": \"𩧳\",\n \"𩢾\": \"𩧮\",\n \"𩣏\": \"𩧶\",\n \"𩣑\": \"䯃\",\n \"𩣫\": \"𩧸\",\n \"𩣵\": \"𩧻\",\n \"𩣺\": \"𩧼\",\n \"𩤊\": \"𩧩\",\n \"𩤙\": \"𩨆\",\n \"𩤲\": \"𩨉\",\n \"𩤸\": \"𩨅\",\n \"𩥄\": \"𩨋\",\n \"𩥇\": \"𩨍\",\n \"𩥉\": \"𩧱\",\n \"𩥑\": \"𩨌\",\n \"𩦠\": \"𫠌\",\n \"𩧆\": \"𩨐\",\n \"𩭙\": \"𩬣\",\n \"𩯁\": \"𫙂\",\n \"𩯳\": \"𩯒\",\n \"𩰀\": \"𩬤\",\n \"𩰹\": \"𩰰\",\n \"𩳤\": \"𩲒\",\n \"𩴵\": \"𩴌\",\n \"𩵦\": \"𫠏\",\n \"𩵩\": \"𩽺\",\n \"𩵹\": \"𩽻\",\n \"𩶁\": \"𫚎\",\n \"𩶘\": \"䲞\",\n \"𩶰\": \"𩽿\",\n \"𩶱\": \"𩽽\",\n \"𩷰\": \"𩾄\",\n \"𩸃\": \"𩾅\",\n \"𩸄\": \"𫚝\",\n \"𩸡\": \"𫚟\",\n \"𩸦\": \"𩾆\",\n \"𩻗\": \"𫚨\",\n \"𩻬\": \"𫚩\",\n \"𩻮\": \"𫚘\",\n \"𩼶\": \"𫚬\",\n \"𩽇\": \"𩾎\",\n \"𩿅\": \"𫠖\",\n \"𩿤\": \"𫛠\",\n \"𩿪\": \"𪉄\",\n \"𪀖\": \"𫛧\",\n \"𪀦\": \"𪉅\",\n \"𪀾\": \"𪉋\",\n \"𪁈\": \"𪉉\",\n \"𪁖\": \"𪉌\",\n \"𪂆\": \"𪉎\",\n \"𪃍\": \"𪉐\",\n \"𪃏\": \"𪉏\",\n \"𪃒\": \"𫛻\",\n \"𪃧\": \"𫛹\",\n \"𪄆\": \"𪉔\",\n \"𪄕\": \"𪉒\",\n \"𪅂\": \"𫜂\",\n \"𪆷\": \"𫛾\",\n \"𪇳\": \"𪉕\",\n \"𪈼\": \"𱊜\",\n \"𪉸\": \"𫜊\",\n \"𪋿\": \"𫧮\",\n \"𪌭\": \"𫜓\",\n \"𪍠\": \"𫜕\",\n \"𪓰\": \"𫜟\",\n \"𪔵\": \"𪔭\",\n \"𪘀\": \"𪚏\",\n \"𪘯\": \"𪚐\",\n \"𪙏\": \"𫜯\",\n \"𪟖\": \"𠛾\",\n \"𪷓\": \"𣶭\",\n \"𫒡\": \"𫓷\",\n \"𫜦\": \"𫜫\"\n}\n\n\ndef t2s(text: str) -> str:\n \"\"\"\n 实现繁体字到简体字的转换,ts_dic 是繁体到简体的字符映射表\n\n :param text: 需要转换的繁体字文本内容,可以是单行、多行、包含转义\n :type text: 仅字符串.\n :return: 转换后的\n \"\"\"\n result_chars = []\n\n for character in text:\n ch_convert = ts_dic.get(character, character)\n result_chars.append(ch_convert)\n\n return ''.join(result_chars)\n\n\nif __name__ == \"__main__\":\n print(t2s(\"中文簡繁轉換開源項目,支持詞彙級別的轉換、異體字轉換和地區習慣用詞轉換(中國大陸、臺灣、香港、日本新字體)。不提供普通話與粵語的轉換。\"))\n","content_type":"text/x-python; charset=utf-8","language":"python","size":76393,"content_sha256":"8368f327a89405b4163bdb991b3ab4e5bbc0bdde483d430d5fd2e38985559be9"},{"filename":"scripts/LrcApi/README_EN.md","content":"\u003cdiv align=\"center\">\n \u003cimg alt=\"LOGO\" src=\"https://cdn.jsdelivr.net/gh/HisAtri/LrcAPI@main/src/img/LrcAPI-Text-Extra.png\" width=\"313\" height=\"400\" />\n\u003c/div>\n\n# LrcApi\n\nA Flask API For [StreamMusic](https://github.com/gitbobobo/StreamMusic)\n\n> Welcome more music services to integrate with this API, and frontend developers are welcome to propose new API adaptation requirements.\n\n> [JetBrains](https://www.jetbrains.com/) provides free open-source licenses for this project.\n\n\u003cp align=\"center\">\n \u003ca href=\"https://www.python.org/downloads/\">\u003cimg src=\"https://img.shields.io/badge/Python-3.10|3.11|3.12-blue.svg\" alt=\"\">\u003c/a>\n \u003ca href=\"https://hub.docker.com/r/hisatri/lrcapi\">\u003cimg src=\"https://img.shields.io/badge/Docker-Quick%20Start-0077ED.svg\" alt=\"\">\u003c/a>\n \u003cbr>\n \u003cimg src=\"https://img.shields.io/github/license/HisAtri/LrcApi?color=%23f280bf\" alt=\"\">\n \u003cimg src=\"https://img.shields.io/github/commit-activity/m/HisAtri/LrcApi?color=%23bf4215\" alt=\"\">\n \u003cimg src=\"https://img.shields.io/github/stars/HisAtri/LrcApi?style=social\" alt=\"\">\n\u003c/p>\n\n\u003cdiv align=\"center\">\n \u003ca href=\"README.md\">中文\u003c/a> | \u003ca href=\"README_EN.md\">English\u003c/a>\n\u003c/div>\n\n## Features\n\nSupports fetching LRC lyrics via Kugou/Aggregated API\n\nSupports text/json API\n\nSupports fetching music/album/artist covers\n\nListens on port 28883 by default, API address `http://0.0.0.0:28883/lyrics`; new API address `http://0.0.0.0:28883/jsonapi`; cover API address `http://0.0.0.0:28883/cover`.\n\n### Startup Parameters\n\n| Parameter | Type | Default Value |\n|-----------|------|---------------|\n| `--port` | int | 28883 |\n| `--auth` | str | |\n\nThe `--auth` parameter is used for header authentication. If left empty, authentication is skipped. It verifies the `Authorization` or `Authentication` field in the header. If authentication fails, a 403 response is returned.\n\nYou can also define it using the environment variable `API_AUTH`, which has lower priority than the `--auth` parameter but is easier to deploy in Docker. `-e API_AUTH=custom_auth_key`\n\n## Usage\n\n### Public API\n\nIf private deployment is not possible, you can try using the public API first. Note: The public API fetches lyrics via Kugou and other interfaces, which may be slow and not entirely accurate.\n\nLyrics API address: `https://api.lrc.cx/lyrics`\n\nCover API address: `https://api.lrc.cx/cover`\n\n### Binary File\n\nUpload to the runtime directory, `./lrcapi --port 8080 --auth custom_auth_key`\n\n### Python Source File\n\nPull this project; or download and upload to the runtime directory, then unzip the tar.gz\n\nInstall dependencies: `pip install -r requirements.txt`\n\nStart the service: `python3 app.py --port 8080 --auth custom_auth_key`\n\n### Docker Deployment\n\n```bash\ndocker run -d \\\n -p 28883:28883 \\\n -v /home/user/music:/music \\\n -e API_AUTH=custom_auth_key \\\n hisatri/lrcapi:latest\n```\n\nAlternatively, specify a tag (recommended)\n\n```bash\ndocker run -d \\\n -p 28883:28883 \\\n -v /home/user/music:/music \\\n -e API_AUTH=custom_auth_key \\\n hisatri/lrcapi:1.5.2\n```\n\nA Docker-compose configuration is as follows\n\n```yaml\nservices:\n lrcapi:\n image: hisatri/lrcapi:latest\n container_name: lrcapi\n ports:\n - \"28883:28883\"\n volumes:\n - /home/user/music:/music\n environment:\n - API_AUTH=custom_auth_key\n restart: always\n```\n\nIf you are using Navidrome Docker, modify `/home/user/music:/music` to the host path you mapped in Navidrome;\n\nIn other words, keep the `-v` parameter consistent with Navidrome.\n\nIf you are using Navidrome, map your music file directory to the Docker internal directory; for example, if your music storage directory is `/www/path/music`, modify the mapping in the startup command to `/www/path/music:/www/path/music`\n\nThen access `http://0.0.0.0:28883/lyrics` or the new API `http://0.0.0.0:28883/jsonapi`\n\nThe image API address is `http://0.0.0.0:28883/cover`\n\nNote: Image returns currently use a reverse proxy strategy, which may incur some upstream and downstream traffic consumption and latency.\n\nSupports reverse proxy and SSL using Nginx or Apache.\n\n## Music Metadata Modification Interface\n\n### Interface Details\n\n- Request Method: POST\n- Request Path: /tag\n- Data Type: application/json\n\n### Supported Formats\n\nTested:\n\n- FLAC(flac)\n- ID3v2(mp3)\n- VorbisComment(ogg)\n\n### Supported Tags\n\n- title\n- artist\n- album\n- lyrics\n\n### Status Codes\n\n- 200 Success\n- 404 File not found\n- 421 No permission\n- 422 Parsing error\n- 5xx Execution error\n\n### Simple Test Environment\n\n```python\nimport requests\njson_data = {\n \"path\": \"/path/to/music/file\",\n \"title\": \"title\",\n \"artist\": \"artist\",\n \"album\": \"album\",\n \"lyrics\": \"lyrics\"\n}\nurl = 'http://127.0.0.1:28883/tag'\nresponse = requests.post(url, json=json_data)\nprint(response.status_code)\nprint(response.text)\n```\n\n## Secondary Development Instructions\n\nThis program is based on the GPL-3.0 open-source license, and you are free to use, modify, and distribute this program. When developing secondary versions, please comply with the following requirements:\n1. Retain the original copyright and license notices in your derivative works.\n2. If you have modified this program, clearly state your modifications.\n3. When distributing, you need to provide the complete source code and distribute your derivative works under the GPL-3.0 license.\n4. Any commercial use based on this program needs to comply with the GPL-3.0 license and remain freely accessible.\n5. Other parts of this project (including logos, services, or slogans, etc.) are not open-sourced under the GPL 3.0 agreement.\n\nEnsure you fully understand the requirements of the GPL-3.0 license and comply with the relevant regulations.\n\n# Appreciation\n\nWeChat\n\n\u003cimg alt=\"reward\" class=\"rounded\" src=\"https://cdn.jsdelivr.net/gh/HisAtri/LrcAPI@main/src/img/qrcode.png\" width=\"512\" height=\"512\" />\n\n[![Star History Chart](https://api.star-history.com/svg?repos=HisAtri/LrcApi&type=Date)](https://star-history.com/#HisAtri/LrcApi&Date)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6007,"content_sha256":"57412e7bdf6a34c78203fb6e8f8b4e83ccd0e09ad3efce0418b23c761cf7b39f"},{"filename":"scripts/LrcApi/README.md","content":"\u003cdiv align=\"center\">\n \u003cimg alt=\"LOGO\" src=\"https://cdn.jsdelivr.net/gh/HisAtri/LrcAPI@main/src/img/LrcAPI-Text-Extra.png\" width=\"313\" height=\"400\" />\n\u003c/div>\n\n# LrcApi\n\nA Flask API For [StreamMusic](https://github.com/gitbobobo/StreamMusic)\n\n> 欢迎更多的音乐服务接入本API,也欢迎各位前端开发者提出新的API适配需求。\n\n> [JetBrains](https://www.jetbrains.com/) 为本项目提供免费的开源许可证。\n\n\u003cp align=\"center\">\n \u003ca href=\"https://www.python.org/downloads/\">\u003cimg src=\"https://img.shields.io/badge/Python-3.10|3.11|3.12-blue.svg\" alt=\"\">\u003c/a>\n \u003ca href=\"https://hub.docker.com/r/hisatri/lrcapi\">\u003cimg src=\"https://img.shields.io/badge/Docker-Quick%20Start-0077ED.svg\" alt=\"\">\u003c/a>\n \u003cbr>\n \u003cimg src=\"https://img.shields.io/github/license/HisAtri/LrcApi?color=%23f280bf\" alt=\"\">\n \u003cimg src=\"https://img.shields.io/github/commit-activity/m/HisAtri/LrcApi?color=%23bf4215\" alt=\"\">\n \u003cimg src=\"https://img.shields.io/github/stars/HisAtri/LrcApi?style=social\" alt=\"\">\n\u003c/p>\n\n\u003cdiv align=\"center\">\n \u003ca href=\"README.md\">中文\u003c/a> | \u003ca href=\"README_EN.md\">English\u003c/a>\n \u003cbr>\n \u003ca href=\"https://docs.lrc.cx/\" target=\"_blank\">查阅文档\u003c/a>\n\u003c/div>\n\n## 功能\n\n支持酷狗/聚合API获取LRC歌词\n\n支持text/json API\n\n支持获取音乐/专辑/艺术家封面\n\n默认监听28883端口,API地址 `http://0.0.0.0:28883/lyrics` ;新版API地址 `http://0.0.0.0:28883/jsonapi` ;封面API地址 `http://0.0.0.0:28883/cover` 。\n\n### 启动参数\n\n| 参数 | 类型 | 默认值 |\n|----------|-----|-------|\n| `--port` | int | 28883 |\n| `--auth` | str | |\n\n`--auth`参数用于header鉴权,留空则跳过鉴权。验证header中的`Authorization`或`Authentication`字段。如果鉴权不符合,则返回403响应。\n\n也可以使用环境变量`API_AUTH`定义,其优先性低于`--auth`参数,但是更容易在Docker中部署。`-e API_AUTH=自定义一个鉴权key`\n\n## 使用方法\n\n### 公开API\n\n如果无法私有部署,可以先尝试使用公开API。注意:公开API通过酷狗等接口获取歌词,可能响应较慢且并不完全准确。\n\n歌词API地址:`https://api.lrc.cx/lyrics`\n\n封面API地址: `https://api.lrc.cx/cover`\n\n### 二进制文件\n\n上传至运行目录,`./lrcapi --port 8080 --auth 自定义一个鉴权key`\n\n### Python源文件\n\n拉取本项目;或者下载后上传至运行目录,解压tar.gz\n\n安装依赖:`pip install -r requirements.txt`\n\n启动服务:`python3 app.py --port 8080 --auth 自定义一个鉴权key`\n\n### Docker部署方式\n\n```bash\ndocker run -d \\\n -p 28883:28883 \\\n -v /home/user/music:/music \\\n -e API_AUTH=自定义一个鉴权key \\\n hisatri/lrcapi:latest\n```\n\n或者,请指定一个Tag(推荐)\n\n```bash\ndocker run -d \\\n -p 28883:28883 \\\n -v /home/user/music:/music \\\n -e API_AUTH=自定义一个鉴权key \\\n hisatri/lrcapi:1.5.2\n```\n\n一个Docker-compose配置如下\n\n```yaml\nservices:\n lrcapi:\n image: hisatri/lrcapi:latest\n container_name: lrcapi\n ports:\n - \"28883:28883\"\n volumes:\n - /home/user/music:/music\n environment:\n - API_AUTH=自定义一个鉴权key\n restart: always\n```\n\n如果你正在使用Navidrome Docker,请将 `/home/user/music:/music` 中的 `/home/user/music` 修改为你在Navidrome中映射的主机路径;\n\n换句话说,`-v` 参数与Navidrome保持一致即可。\n\n如果你正在使用Navidrome,请将你的音乐文件目录映射到Docker内目录;例如如果你音乐存储的目录是`/www/path/music`,请将启动命令中的映射修改为 `/www/path/music:/www/path/music`\n\n然后访问 `http://0.0.0.0:28883/lyrics` 或新版API `http://0.0.0.0:28883/jsonapi` \n\n图片API地址为 `http://0.0.0.0:28883/cover`\n\n注意:图片返回目前采用反向代理策略,可能存在一定的上下行流量消耗和延迟。\n\n支持使用Nginx或Apache进行反向代理与SSL。\n\n## 音乐元数据修改接口\n\n### 接口详情\n\n- 请求方法:POST\n- 请求路径:/tag\n- 数据类型:application/json\n\n### 支持格式\n\n已测试:\n\n- FLAC(flac)\n- ID3v2(mp3)\n- VorbisComment(ogg)\n\n### 支持标签\n\n- 标题:title\n- 艺术家:artist\n- 专辑:album\n- 歌词:lyrics\n\n### 状态码\n\n- 200 成功\n- 404 未找到文件\n- 421 无权限\n- 422 解析错误\n- 5xx 执行出错\n\n### 简易测试环境\n\n```python\nimport requests\njson_data = {\n \"path\": \"/path/to/music/file\",\n \"title\": \"title\",\n \"artist\": \"artist\",\n \"album\": \"album\",\n \"lyrics\": \"lyrics\"\n}\nurl = 'http://127.0.0.1:28883/tag'\nresponse = requests.post(url, json=json_data)\nprint(response.status_code)\nprint(response.text)\n```\n\n## 二次开发说明\n\n本程序基于GPL-3.0开源许可证,您可以自由免费地使用、修改和分发本程序。在二次开发时,请遵守以下要求:\n1. 在您的衍生作品中保留原始版权和许可声明。\n2. 如果您对本程序进行了修改,请清楚地说明您的修改。\n3. 在进行分发时,您需要提供完整的源代码,并以GPL-3.0许可证分发您的衍生作品。\n4. 任何以本程序为基础的商业用途都需要遵守GPL-3.0许可证,并保持免费开放访问。\n5. 除源代码外,本项目的其他部分(包括Logo、服务或标语等)并非由 GPL 3.0 协议开源。\n\n请确保您详细了解GPL-3.0许可证的要求并遵守相关规定。\n\n[![Star History Chart](https://api.star-history.com/svg?repos=HisAtri/LrcApi&type=Date)](https://star-history.com/#HisAtri/LrcApi&Date)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":5533,"content_sha256":"5c292f4a583f97b17d53fa9995124e6b2df9847315c74cabe54148fd7bbb233d"},{"filename":"scripts/LrcApi/requirements.txt","content":"Flask~=3.0.0\nFlask-Caching~=2.1.0\nrequests~=2.31.0\ntinytag~=1.9.0\nwaitress~=2.1.2\nmutagen~=1.46.0\naiohttp~=3.9.1\nPillow~=10.1.0\npyaes~=1.6.1\nWerkzeug~=3.0.1\nmygo~=1.0.0\nPyYAML~=6.0.2\nopenai~=1.59.8","content_type":"text/plain; charset=utf-8","language":null,"size":197,"content_sha256":"5bd5c8c1ff843989d5e2fa0df2dcbdc9ff062affb8383c4fbad3c25f7947cbab"},{"filename":"scripts/LrcApi/src/acknowledgments.html","content":"\u003c!DOCTYPE html>\n\u003chtml lang=\"zh\">\n\u003chead>\n \u003cmeta charset=\"UTF-8\">\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n \u003ctitle>致谢名单\u003c/title>\n \u003clink rel=\"stylesheet\" href=\"/src/css/v50.css\">\n \u003cstyle>\n .barrage-container {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 100;\n overflow: hidden;\n }\n \n .financial-status {\n opacity: 0;\n transform: translateY(20px);\n animation: fadeInUp 0.8s ease forwards;\n }\n\n @keyframes fadeInUp {\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n \n .barrage-item {\n position: fixed;\n white-space: nowrap;\n font-family: \"Microsoft YaHei\", sans-serif;\n font-weight: 500;\n text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n opacity: 0.9;\n transform: translateX(100vw);\n }\n \u003c/style>\n \u003cscript src=\"/src/js/site-config.js\">\u003c/script>\n \u003cscript src=\"/src/js/common-elements.js\">\u003c/script>\n \u003cscript>\n document.addEventListener('DOMContentLoaded', () => {\n document.title = `${siteConfig.site.name} - 致谢名单`;\n });\n \u003c/script>\n\u003c/head>\n\u003cbody>\n \u003cheader>\u003c/header>\n\n \u003cdiv class=\"barrage-container\" id=\"barrageContainer\">\u003c/div>\n\n \u003cmain>\n \u003ch1>致谢名单\u003c/h1>\n \u003cdiv class=\"acknowledgment-content\">\n \u003cp style=\"text-align: center\">感谢所有支持 LrcAPI 项目发展的朋友们。LrcAPI 是一个完全免费的开源项目,它的发展离不开社区成员的支持。在此特别感谢以下支持者的慷慨赞助\u003c/p>\n \u003cp class=\"subtitle\" style=\"text-align: center\">*排名不分先后。如果我们遗漏了您的名字,请您随时通过赞助渠道联系我们,我们将及时更新。\u003c/p>\n \u003cdiv id=\"financialStatus\" class=\"financial-status\" style=\"text-align: center; margin-bottom: 30px;\">\n \u003cp style=\"color: #666; margin-bottom: 10px;\">项目运营状况\u003c/p>\n \u003ch1 id=\"financialAmount\" style=\"font-weight: bold; display: inline-block; margin: 10px 0;\">\u003c/h1>\n \u003cp style=\"color: #666; font-size: 0.9em;\">\n \u003cspan style=\"color: #2ecc71;\">正值\u003c/span>代表项目有结余 | \n \u003cspan style=\"color: #e74c3c;\">负值\u003c/span>代表项目需要赞助\n \u003c/p>\n \u003c/div>\n \u003cdiv class=\"supporters-list\">\n \u003cdiv class=\"supporter-card\">\n \u003ch3>项目赞助者\u003c/h3>\n \u003cul class=\"supporters-grid\" id=\"supportersGrid\">\n \u003c!-- js生成 -->\n \u003c/ul>\n \u003c/div>\n \u003c/div>\n \u003c/div>\n \u003c/main>\n\n \u003cfooter>\u003c/footer>\n\n \u003cscript>\n class BarrageSystem {\n constructor() {\n this.container = document.getElementById('barrageContainer');\n this.viewportHeight = window.innerHeight;\n // 在这里定义你的弹幕颜色\n this.colors = [\n '#FF6B6B',\n '#4ECDC4',\n '#45B7D1',\n '#96CEB4',\n '#FFEEAD',\n '#D4A5A5',\n '#9B59B6'\n ];\n \n // 弹幕区域范围\n this.topMargin = 50; // 顶部边距\n this.bottomMargin = 100; // 底部边距\n \n // 监听窗口大小变化\n window.addEventListener('resize', () => {\n this.viewportHeight = window.innerHeight;\n });\n }\n\n getColorByText(text) {\n return this.colors[Math.floor(Math.random() * this.colors.length)];\n }\n\n // 生成随机动画时长(12-20秒,用于调整弹幕滚动速度)\n getRandomDuration() {\n return 12000 + Math.random() * 8000;\n }\n\n // 生成随机垂直位置\n getRandomVerticalPosition() {\n const availableHeight = this.viewportHeight - this.topMargin - this.bottomMargin;\n return this.topMargin + Math.random() * availableHeight;\n }\n\n // 生成随机字体大小(14-24px)\n getRandomFontSize() {\n return 14 + Math.random() * 10;\n }\n\n addMessage(text) {\n const item = document.createElement('div');\n item.className = 'barrage-item';\n item.textContent = text;\n \n // 设置基本样式\n const fontSize = this.getRandomFontSize();\n const verticalPos = this.getRandomVerticalPosition();\n item.style.cssText = `\n font-size: ${fontSize}px;\n color: ${this.getColorByText(text)};\n top: ${verticalPos}px;\n `;\n\n // 添加到容器\n this.container.appendChild(item);\n\n // 获取元素宽度(用于计算动画终点位置)\n const itemWidth = item.offsetWidth;\n const duration = this.getRandomDuration();\n\n // 创建并应用动画\n const animation = item.animate([\n { transform: 'translateX(100vw)' },\n { transform: `translateX(-${itemWidth}px)` }\n ], {\n duration: duration,\n easing: 'linear'\n });\n // 动画结束后移除元素\n animation.onfinish = () => item.remove();\n }\n }\n\n // 定义支持者卡片组件\n class SupporterCard extends HTMLElement {\n constructor() {\n super();\n }\n\n set supporter(data) {\n this.innerHTML = `\n \u003cdiv class=\"supporter-info\">\n \u003cspan class=\"supporter-name\">${data.name}\u003c/span>\n \u003cspan class=\"support-amount\">¥${data.amount}\u003c/span>\n \u003c/div>\n `;\n }\n }\n\n customElements.define('supporter-card', SupporterCard);\n\n // 模块控制器\n class ModuleController {\n constructor(config) {\n this.config = config;\n this.init();\n }\n\n init() {\n // 初始化财务状况显示\n if (this.config.financial.enabled) {\n this.initFinancial();\n } else {\n document.getElementById('financialStatus').style.display = 'none';\n }\n\n // 初始化弹幕系统\n if (this.config.barrage.enabled) {\n this.initBarrage();\n } else {\n document.getElementById('barrageContainer').style.display = 'none';\n }\n\n // 初始化支持者列表\n if (this.config.supporters.enabled) {\n this.initSupporters();\n } else {\n document.querySelector('.supporters-list').style.display = 'none';\n }\n }\n\n initFinancial() {\n const financial = this.config.financial;\n const element = document.getElementById('financialAmount');\n const startValue = 0;\n const endValue = financial.amount;\n const duration = financial.duration;\n const currency = financial.currency;\n \n // 设置颜色\n element.style.color = endValue >= 0 ? '#2ecc71' : '#e74c3c';\n \n // 使用 CSS cubic-bezier 实现动画效果\n const startTime = performance.now();\n \n function update(currentTime) {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n \n // 使用缓动函数使动画更自然\n const easeProgress = progress \u003c 0.5 \n ? 4 * progress * progress * progress \n : 1 - Math.pow(-2 * progress + 2, 3) / 2;\n \n const currentValue = startValue + (endValue - startValue) * easeProgress;\n element.textContent = `${currency}${currentValue.toFixed(2)}`;\n \n if (progress \u003c 1) {\n requestAnimationFrame(update);\n }\n }\n \n requestAnimationFrame(update);\n }\n\n initBarrage() {\n const barrageSystem = new BarrageSystem();\n const sendRandomMessage = () => {\n const messages = this.config.barrage.messages;\n const msg = messages[Math.floor(Math.random() * messages.length)];\n barrageSystem.addMessage(msg);\n setTimeout(sendRandomMessage, 500 + Math.random() * 1500);\n };\n sendRandomMessage();\n }\n\n initSupporters() {\n const supportersGrid = document.getElementById('supportersGrid');\n this.config.supporters.data.forEach(supporter => {\n const li = document.createElement('li');\n li.className = 'supporter-box';\n const card = document.createElement('supporter-card');\n card.supporter = supporter;\n li.appendChild(card);\n supportersGrid.appendChild(li);\n });\n }\n }\n\n // 初始化模块控制器\n document.addEventListener('DOMContentLoaded', () => {\n new ModuleController(siteConfig.acknowledgments);\n });\n \u003c/script>\n\u003c/body>\n\u003c/html>\n","content_type":"text/html; charset=utf-8","language":"markup","size":10255,"content_sha256":"fdaa8a3faced23c848cc7159b6923d1c6aba42421a1e7ea2206923cafa9d56f7"},{"filename":"scripts/LrcApi/src/css/mod.css","content":"body {\n background-image: url(\"/src/img/bg.jpg\");\n background-size: cover;\n background-repeat: no-repeat;\n background-attachment: fixed;\n text-align: center;\n}\n\ncode {\n display: inline-block;\n padding: 2px;\n font-family: Consolas, monospace;\n font-size: 14px;\n background-color: #f2f2f2;\n color: #333333;\n border-radius: 4px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n line-height: 2;\n}\n\nhr {\n margin-left: 0;\n width: 10%;\n color: rgba(255, 160, 0, 1);\n box-shadow: 0 0 10px rgba(255, 160, 0, 0.8);\n}\n\n.no-select {\n user-select: none;\n}\n\n.filebox {\n min-height: 70vh;\n margin-top: 20px;\n}\n\n.footer {\n position: fixed;\n left: 0;\n bottom: 0;\n width: 100%;\n backdrop-filter: blur(10px);\n background-image: linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5));\n color: #333;\n text-align: center;\n padding: 20px;\n background-size: cover;\n background-repeat: no-repeat;\n}\n\n.footer a {\n text-decoration: none;\n color: inherit;\n}\n\n.footer a:hover {\n font-weight: bold;\n}\n\n.tooltip-x {\n position: fixed;\n top: 80px;\n right: 20px;\n backdrop-filter: blur(10px);\n background-image: linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5));\n padding: 10px;\n border-radius: 4px;\n font-size: 14px;\n opacity: 1;\n animation: fadeIn 3s;\n}\n\n/* 定义动画,从透明度0到透明度1,持续时间2秒 */\n@keyframes fadeIn {\n 0% {\n opacity: 1;\n }\n 33% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n","content_type":"text/css; charset=utf-8","language":"css","size":1539,"content_sha256":"31796a050d87dbee1bea1e0b975798916b74990afe7b827d7c09e4f95015c41d"},{"filename":"scripts/LrcApi/src/css/v50.css","content":"* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n line-height: 1.6;\n color: #333;\n background: linear-gradient(135deg, #f8f9ff 0%, #f0f2ff 50%, #eef0ff 100%);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n}\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 2rem;\n background-color: white;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n}\n\n.logo-container img {\n height: 40px;\n}\n\n.github-button {\n display: inline-block;\n padding: 0.5rem 1rem;\n color: #24292e;\n text-decoration: none;\n border: 1px solid #e1e4e8;\n border-radius: 6px;\n background-color: #fafbfc;\n transition: 0.2s ease;\n}\n\n.github-button:hover {\n background-color: #f3f4f6;\n}\n\nmain {\n max-width: 1200px;\n margin: 0 auto;\n padding: 3rem 2rem;\n text-align: center;\n flex: 1;\n}\n\nh1 {\n font-size: 2.5rem;\n margin-bottom: 1rem;\n color: #24292e;\n}\n\n.subtitle {\n color: #586069;\n margin-bottom: 3rem;\n}\n\n.cards-container {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n margin-top: 2rem;\n}\n\n.card {\n background: rgba(255, 255, 255, 0.9);\n border-radius: 8px;\n padding: 2rem;\n box-shadow: 0 4px 6px rgba(108, 99, 255, 0.1);\n transition: transform 0.2s ease;\n backdrop-filter: blur(10px);\n}\n\n.card:hover {\n transform: translateY(-5px);\n}\n\n.card-icon {\n margin-bottom: 1.5rem;\n}\n\n.card-icon svg {\n width: 48px;\n height: 48px;\n fill: #6c63ff;\n}\n\n.card h3 {\n margin-bottom: 1rem;\n color: #24292e;\n}\n\n.input-group {\n display: flex;\n align-items: center;\n margin: 1.5rem 0;\n border: 1px solid #e1e4e8;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.prefix {\n padding: 0.5rem;\n background: #f6f8fa;\n color: #586069;\n border-right: 1px solid #e1e4e8;\n}\n\ninput {\n flex: 1;\n padding: 0.5rem;\n border: none;\n outline: none;\n}\n\n.analyze-button {\n width: 100%;\n padding: 0.75rem;\n background: #6c63ff;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: 0.2s ease;\n}\n\n.analyze-button:hover {\n background: #5b54d6;\n}\n\n.upload-zone {\n margin-top: 1.5rem;\n padding: 2rem;\n border: 2px dashed #e1e4e8;\n border-radius: 6px;\n background: #f6f8fa;\n cursor: pointer;\n transition: 0.2s ease;\n}\n\n.upload-zone:hover {\n border-color: #6c63ff;\n background: #f8f9ff;\n}\n\n.support-button {\n display: block;\n width: 100%;\n padding: 0.75rem;\n background: #6c63ff;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: 0.2s ease;\n text-decoration: none;\n margin-top: 1.5rem;\n text-align: center;\n}\n\n.support-button:hover {\n background: #5b54d6;\n}\n\n.partner-links {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-top: 1.5rem;\n}\n\n.partner-link {\n display: block;\n padding: 0.75rem;\n background: rgba(255, 255, 255, 0.8);\n color: #24292e;\n text-decoration: none;\n border-radius: 6px;\n transition: 0.2s ease;\n border: 1px solid #e1e4e8;\n backdrop-filter: blur(5px);\n}\n\n.partner-link:hover {\n background: #f0f1f4;\n border-color: #6c63ff;\n color: #6c63ff;\n}\n\n.logo-container {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.project-name {\n font-size: 24px;\n font-weight: bold;\n color: #333;\n}\n\n.github-button {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 14px;\n border-radius: 6px;\n}\n\n.github-icon {\n margin-right: 4px;\n}\n\nfooter {\n margin-top: auto;\n padding: 20px 0;\n text-align: center;\n border-top: 1px solid rgba(108, 99, 255, 0.1);\n background-color: rgba(255, 255, 255, 0.8);\n backdrop-filter: blur(10px);\n}\n\n.license-text {\n color: #666;\n font-size: 14px;\n}\n\n.license-text a {\n color: gray;\n text-decoration: none;\n}\n\n.license-text a:visited {\n color: gray;\n}\n\n.license-text a:hover {\n color: gray;\n text-decoration: underline;\n}\n\n/* 赞助者列表样式 */\n.supporters-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n list-style: none;\n padding: 0;\n margin: 2rem 0;\n}\n\n.supporter-box {\n background: white;\n border-radius: 8px;\n padding: 1.5rem;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.supporter-box:hover {\n transform: translateY(-3px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n.supporter-info {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.supporter-name {\n font-size: 1.1rem;\n color: #333;\n}\n\n.support-amount {\n font-weight: bold;\n color: #2ecc71;\n font-size: 1.2rem;\n}\n\n.supporter-card h3 {\n text-align: left;\n margin-bottom: 1rem;\n color: #333;\n font-size: 1.5rem;\n}\n\n/* 调整主要内容区域的样式 */\n.acknowledgment-content {\n max-width: 1000px;\n margin: 0 auto;\n text-align: left;\n}\n\n.acknowledgment-content > p {\n margin-bottom: 2rem;\n font-size: 1.1rem;\n color: #666;\n}\n","content_type":"text/css; charset=utf-8","language":"css","size":5315,"content_sha256":"4c7c97cac3c00936d8a08788d4c23ff5092578a8b37c5339f54b949e58b2e99f"},{"filename":"scripts/LrcApi/src/index.html","content":"\u003c!DOCTYPE html>\n\u003chtml lang=\"zh\">\n\u003chead>\n \u003cmeta charset=\"UTF-8\">\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n \u003ctitle>支持我们\u003c/title>\n \u003clink rel=\"stylesheet\" href=\"/src/css/v50.css\">\n \u003cscript src=\"/src/js/site-config.js\">\u003c/script>\n \u003cscript src=\"/src/js/common-elements.js\">\u003c/script>\n \u003cscript>\n document.addEventListener('DOMContentLoaded', () => {\n document.title = `${siteConfig.site.name} - 支持我们`;\n });\n \u003c/script>\n\u003c/head>\n\u003cbody>\n \u003cheader>\u003c/header>\n\n \u003cmain>\n \u003ch1>支持我们的开源项目\u003c/h1>\n \u003cp class=\"subtitle\">您的赞助将帮助我们持续改进和维护这个项目\u003c/p>\n \u003cp>LrcAPI 是一个开源项目,旨在帮助音乐爱好者们通过简单、快捷、免费的方式,获取海量的音乐歌词。\u003c/p>\n \u003cp>迄今为止,LrcAPI已经存储了超过100万首歌曲的信息,向上万名活跃的音乐爱好者免费提供了超过1亿次响应。\u003c/p>\n \u003cdiv class=\"cards-container\">\n \u003cdiv class=\"card\">\n \u003cdiv class=\"card-icon\">\n \u003csvg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\n \u003cpath d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n \u003c/svg>\n \u003c/div>\n \u003ch3>直接赞助支持\u003c/h3>\n \u003cp>通过爱发电平台为我们提供直接的资金支持,帮助项目持续发展。每一份赞助都将用于改进服务质量。\u003c/p>\n \u003cbr>\n \u003cp class=\"subtitle\">*通过爱发电支持的用户,在遇到部署或开发问题时可获得开发者力所能及的帮助。同时,我们也会优先考虑支持者对项目功能的建议。但请注意,赞助行为完全基于自愿,不构成任何服务承诺。\u003c/p>\n \u003ca href=\"https://afdian.com/a/ghacg\" class=\"support-button\" target=\"_blank\">\n 在爱发电支持我们\n \u003c/a>\n \u003c/div>\n\n \u003cdiv class=\"card\">\n \u003cdiv class=\"card-icon\">\n \u003csvg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\n \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H11.5C15.2712 4 17.1569 4 18.3284 5.17157C19.2715 6.11466 19.4554 7.52043 19.4913 10H19.9999C20.9427 10 21.4141 10 21.707 10.2929C21.9999 10.5858 21.9999 11.0572 21.9999 12C21.9999 12.9428 21.9999 13.4142 21.707 13.7071C21.4141 14 20.9427 14 19.9999 14H19.4913C19.4554 16.4796 19.2715 17.8853 18.3284 18.8284C17.1569 20 15.2712 20 11.5 20H10C6.22876 20 4.34315 20 3.17157 18.8284C2 17.6569 2 15.7712 2 12ZM11.9801 8.42383C12.2983 8.68901 12.3413 9.16193 12.0762 9.48014L10.6013 11.25H12.5C12.791 11.25 13.0558 11.4183 13.1792 11.6819C13.3026 11.9454 13.2625 12.2566 13.0762 12.4801L10.5762 15.4801C10.311 15.7983 9.83807 15.8413 9.51986 15.5762C9.20165 15.311 9.15866 14.8381 9.42383 14.5199L10.8987 12.75H9C8.70899 12.75 8.44424 12.5817 8.32081 12.3181C8.19737 12.0546 8.23753 11.7434 8.42383 11.5199L10.9238 8.51986C11.189 8.20165 11.6619 8.15866 11.9801 8.42383Z\"/>\n \u003c/svg>\n \u003c/div>\n \u003ch3>合作伙伴支持\u003c/h3>\n \u003cp>通过我们的合作链接购买服务,在享受质优价廉的产品的同时,支持开发者获得收入,实现互利共赢。\u003c/p>\n \u003cdiv class=\"partner-links\">\n \u003ca href=\"https://my.yecaoyun.com/aff.php?aff=3296\" class=\"partner-link\" target=\"_blank\">年付99元-香港服务器\u003c/a>\n \u003ca href=\"https://cloud.jdidc.cn/aff/WYZYENLI\" class=\"partner-link\" target=\"_blank\">月付99元起-16核32G高配服务器\u003c/a>\n \u003ca href=\"https://syyn.1.passwallwall.life/#/register?code=Ijz3jX5v\" class=\"partner-link\" target=\"_blank\">299元终身无限流量-流媒体专线\u003c/a>\n \u003c/div>\n \u003c/div>\n \u003c/div>\n \u003c/main>\n\n \u003cfooter>\u003c/footer>\n\u003c/body>\n\u003c/html>\n","content_type":"text/html; charset=utf-8","language":"markup","size":4146,"content_sha256":"a31bddab41097abfb96f4c4bd9750b7f0a36435eabccec7aa1b9e5623541b957"},{"filename":"scripts/LrcApi/tests/__init__.py","content":"","content_type":"text/x-python; charset=utf-8","language":"python","size":0,"content_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"filename":"scripts/LrcApi/tests/test_app.py","content":"from app import app\n\n\ndef test_home_route():\n # Use Flask test client to simulate requests\n with app.test_client() as client:\n response = client.get('/')\n assert response.status_code \u003c 400\n\n\ndef test_source_route():\n with app.test_client() as client:\n response = client.get('/src')\n assert response.status_code \u003c 300\n\n\ndef test_lyrics_route():\n with app.test_client() as client:\n response = client.get('/lyrics?title=使一颗心免于哀伤')\n assert response.status_code \u003c 500\n","content_type":"text/x-python; charset=utf-8","language":"python","size":533,"content_sha256":"a4db7087c9f2710c4de33d1f95000535a1b1d668e8afdd50c1b93f90006e1ced"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"LyricSense 歌词技能","type":"text"}]},{"type":"paragraph","content":[{"text":"让 AI 通过歌词「听」音乐的 OpenClaw 技能。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"功能","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"搜索歌词","type":"text","marks":[{"type":"strong"}]},{"text":" — 通过歌手 + 歌名获取 LRC 格式歌词","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"展示歌词","type":"text","marks":[{"type":"strong"}]},{"text":" — 格式化输出,高亮当前句","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"获取封面","type":"text","marks":[{"type":"strong"}]},{"text":" — 返回专辑封面图片 URL","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"快速跳转","type":"text","marks":[{"type":"strong"}]},{"text":" — 生成 LyricSense 网页界面链接,点击即可同步播放","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"联动日推","type":"text","marks":[{"type":"strong"}]},{"text":" — 与 netease-daily-v3 配合,为日推歌单每首歌添加歌词入口","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"API 说明","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"公共 API(无需部署)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"歌词: GET https://api.lrc.cx/lyrics?artist={歌手}&title={歌名}\n封面: GET https://api.lrc.cx/cover?artist={歌手}&title={歌名}","type":"text"}]},{"type":"paragraph","content":[{"text":"响应格式:纯文本 LRC 格式","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"[ti:晚安]\n[ar:颜人中]\n[00:19.00]我站在 青春的尾巴上\n[00:24.00]望着 那盏路灯发呆","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"本地 API(自部署,无限制)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"歌词: GET http://localhost:8080/lyrics?artist={歌手}&title={歌名}\n封面: GET http://localhost:8080/cover?artist={歌手}&title={歌名}","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"网页界面(带同步高亮)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"https://adminlove520.github.io/lyric-sense/?artist={歌手}&title={歌名}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"龙虾使用示例","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"示例 1:搜索并展示歌词","type":"text"}]},{"type":"paragraph","content":[{"text":"用户:","type":"text","marks":[{"type":"strong"}]},{"text":" 帮我查一下《晚安》颜人中的歌词","type":"text"}]},{"type":"paragraph","content":[{"text":"龙虾:","type":"text","marks":[{"type":"strong"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"javascript"},"content":[{"text":"// 调用 LrcApi 获取歌词\nconst resp = await fetch('https://corsproxy.io/?' + encodeURIComponent(\n 'https://api.lrc.cx/lyrics?artist=颜人中&title=晚安'\n));\nconst lrc = await resp.text();","type":"text"}]},{"type":"paragraph","content":[{"text":"返回后解析 LRC 并展示:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"🎵 晚安 — 颜人中\n─────────────────────────────\n[00:19] 我站在 青春的尾巴上\n[00:24] 望着 那盏路灯发呆\n[00:29] 时光它 不等人 悄悄走\n[00:33] 只剩我 一个人 慢慢熬\n─────────────────────────────\n🔗 同步界面: https://adminlove520.github.io/lyric-sense/?artist=颜人中&title=晚安","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"示例 2:只知道歌名","type":"text"}]},{"type":"paragraph","content":[{"text":"用户:","type":"text","marks":[{"type":"strong"}]},{"text":" 夜空中最亮的星 歌词给我","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"javascript"},"content":[{"text":"const resp = await fetch('https://corsproxy.io/?' + encodeURIComponent(\n 'https://api.lrc.cx/lyrics?title=夜空中最亮的星'\n));","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"示例 3:联动 netease-daily-v3 日推","type":"text"}]},{"type":"paragraph","content":[{"text":"当龙虾获取到日推歌单时,为每首歌自动生成歌词链接:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"javascript"},"content":[{"text":"// songs 来自 netease-daily-v3 输出的歌单\nconst withLyrics = songs.map(song => ({\n ...song,\n lyricsUrl: `https://adminlove520.github.io/lyric-sense/?artist=${encodeURIComponent(song.artist)}&title=${encodeURIComponent(song.name)}`,\n lrcApi: `https://api.lrc.cx/lyrics?artist=${encodeURIComponent(song.artist)}&title=${encodeURIComponent(song.name)}`\n}));","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"示例 4:格式化输出(供龙虾直接展示)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"javascript"},"content":[{"text":"function parseLRC(lrcText) {\n return lrcText.split('\\n')\n .map(line => line.match(/\\[(\\d{2}):(\\d{2})[.:]\\d+\\](.*)/))\n .filter(Boolean)\n .map(([, m, s, text]) => ({\n time: parseInt(m) * 60 + parseInt(s),\n text: text.trim()\n }))\n .filter(l => l.text);\n}\n\nfunction formatLyricsForAI(parsed, maxLines = 20) {\n const lines = parsed.slice(0, maxLines);\n return lines.map(l => {\n const m = Math.floor(l.time / 60).toString().padStart(2, '0');\n const s = (l.time % 60).toString().padStart(2, '0');\n return `[${m}:${s}] ${l.text}`;\n }).join('\\n');\n}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"错误处理","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"情况","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"处理方式","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"歌词为空","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"提示用户换关键词,或只用歌名/歌手单独搜索","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"CORS 跨域","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"自动通过 ","type":"text"},{"text":"corsproxy.io","type":"text","marks":[{"type":"code_inline"}]},{"text":" 代理转发","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API 超时","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"重试 1 次,仍失败则提示使用本地部署","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"LRC 格式异常","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"尝试按行分割,过滤无效行","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"部署方式","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"在线(默认,零配置)","type":"text"}]},{"type":"paragraph","content":[{"text":"直接使用公共 API ","type":"text"},{"text":"https://api.lrc.cx","type":"text","marks":[{"type":"code_inline"}]},{"text":",无需任何部署。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"本地可执行文件(Windows)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"powershell"},"content":[{"text":".\\scripts\\LrcApi\\lrcapi-1.6.0-Windows-AMD64.exe --port 8080","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Docker","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"docker run -d -p 8080:8080 hisatri/lrcapi:latest","type":"text"}]},{"type":"paragraph","content":[{"text":"使用本地 API 时,将请求地址改为 ","type":"text"},{"text":"http://localhost:8080","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"与 netease-daily-v3 联动","type":"text"}]},{"type":"paragraph","content":[{"text":"两个技能配合使用效果最佳:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"netease-daily-v3","type":"text","marks":[{"type":"strong"}]},{"text":" 每天自动获取日推歌单,推送到 GitHub Discussion","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"日推内容中每首歌都携带 ","type":"text"},{"text":"lyric-sense","type":"text","marks":[{"type":"strong"}]},{"text":" 跳转链接","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户点击链接即可在 lyric-sense 界面实时同步歌词","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"相关项目:","type":"text"},{"text":"netease-daily-v3","type":"text","marks":[{"type":"link","attrs":{"href":"https://github.com/adminlove520/netease-daily-v3","title":null}}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"注意事项","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"公共 API ","type":"text"},{"text":"api.lrc.cx","type":"text","marks":[{"type":"code_inline"}]},{"text":" 有请求频率限制,高频使用请自部署","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"LRC 格式包含时间戳,可用于进度同步","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"部分冷门歌曲可能无歌词,可尝试英文歌名或不填歌手","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"网页界面支持 ","type":"text"},{"text":"?artist=","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"?title=","type":"text","marks":[{"type":"code_inline"}]},{"text":" URL 参数直接加载","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"🦞 Skill for OpenClaw | Made by 小溪 | v2.0.0","type":"text"}]}]},"metadata":{"date":"2026-06-05","demo":"https://adminlove520.github.io/lyric-sense","name":"lyric-sense","author":"@skillopedia","source":{"stars":1,"repo_name":"lyric-sense","origin_url":"https://github.com/adminlove520/lyric-sense/blob/HEAD/SKILL.md","repo_owner":"adminlove520","body_sha256":"ee1ef5275c158b0f00112a8721ae123ed5b1b2f0e28749f53879834fd655bdc0","cluster_key":"d9d25e433845f9e9cc8a56df15a8ca84bccdbf52c5ca83da9a81a3d153defb23","clean_bundle":{"format":"clean-skill-bundle-v1","source":"adminlove520/lyric-sense/SKILL.md","attachments":[{"id":"86c319cf-31ed-5b01-ac80-14f655205dc9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/86c319cf-31ed-5b01-ac80-14f655205dc9/attachment","path":".gitignore","size":147,"sha256":"c6710dc61f96204d67cbdde00a1b4c35e10e88934c267809922dc041ddf4ae1d","contentType":"text/plain; charset=utf-8"},{"id":"55ccb944-1661-5648-bb58-f2ebacdfdfda","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/55ccb944-1661-5648-bb58-f2ebacdfdfda/attachment.md","path":"CHANGELOG.md","size":652,"sha256":"5f3b10914fc6046a7a518215f447e3430e2e7086d6530769f4bcfaf41c01ba86","contentType":"text/markdown; charset=utf-8"},{"id":"09a4f129-b8a9-5856-b8ae-51e3bb261c42","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09a4f129-b8a9-5856-b8ae-51e3bb261c42/attachment.md","path":"README.md","size":5813,"sha256":"6c5972e7679756129a94d5b182547e0dcd922a902667c62f45c610f9f7a8fefd","contentType":"text/markdown; charset=utf-8"},{"id":"09c48b00-e06d-58ae-ae26-6bc16536239a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09c48b00-e06d-58ae-ae26-6bc16536239a/attachment.html","path":"index.html","size":32077,"sha256":"be2b88f2354c4e4d40e98069bc7c5829e645ca780671617d56a3938c17a1dd7a","contentType":"text/html; charset=utf-8"},{"id":"aaa6a41d-3a1d-572c-8466-c2b4a425d58a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aaa6a41d-3a1d-572c-8466-c2b4a425d58a/attachment","path":"scripts/LrcApi/.dockerignore","size":36,"sha256":"67dd6f406d33a71e77be927a6ac81c6975b64fdcea9a4f1c9b87813c58b2cb02","contentType":"text/plain; charset=utf-8"},{"id":"df1e3159-fc4e-57d7-a0c2-d09ef38f80de","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/df1e3159-fc4e-57d7-a0c2-d09ef38f80de/attachment.yaml","path":"scripts/LrcApi/.github/ISSUE_TEMPLATE/bug-report.yaml","size":1546,"sha256":"6fe045540f16230f8372d9d7cbb2bf73440884ba230b6b8a943cffb8d463d2cb","contentType":"application/yaml; charset=utf-8"},{"id":"1335ddb8-abb4-5b5f-9dbb-11e6078c105b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1335ddb8-abb4-5b5f-9dbb-11e6078c105b/attachment.yaml","path":"scripts/LrcApi/.github/ISSUE_TEMPLATE/feature-request.yaml","size":1155,"sha256":"f1a37fd653a28f7440f5076b098c515a13b437e04565aaae5105e4dadb3a1d6f","contentType":"application/yaml; charset=utf-8"},{"id":"d678a201-9f60-5824-a3c8-2190200358e5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d678a201-9f60-5824-a3c8-2190200358e5/attachment.yml","path":"scripts/LrcApi/.github/workflows/docker-build.yml","size":1764,"sha256":"7acdc5c3c54fd5e0e75c73a9664648285d57dd8e0d7a553ec1227541ba05b695","contentType":"application/yaml; charset=utf-8"},{"id":"098c3a5f-0143-5c55-9fb9-799f1aa7078b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/098c3a5f-0143-5c55-9fb9-799f1aa7078b/attachment.yml","path":"scripts/LrcApi/.github/workflows/python-app.yml","size":1202,"sha256":"4f362bb1827cc02d06b60ecd70984bcf8e40abd7c1646725627bff00e478b7e9","contentType":"application/yaml; charset=utf-8"},{"id":"b4cbcf35-997f-5afe-a071-b27b9817e25a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b4cbcf35-997f-5afe-a071-b27b9817e25a/attachment.yml","path":"scripts/LrcApi/.github/workflows/release.yml","size":1680,"sha256":"d9206a66e8316e49bdbfc23466d2b4f2d892dc119d7c881f41105b2f30851dfa","contentType":"application/yaml; charset=utf-8"},{"id":"1b3fdc3e-7a9c-5ed4-b553-d389a89a31ab","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1b3fdc3e-7a9c-5ed4-b553-d389a89a31ab/attachment","path":"scripts/LrcApi/.gitignore","size":3210,"sha256":"a9f9028ed54ba8efbc94cb0e74607d1153f3c1ca5feec3cffe9ce4632ea71f88","contentType":"text/plain; charset=utf-8"},{"id":"0aab9d80-c666-5eb5-b323-b1bf787821cf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0aab9d80-c666-5eb5-b323-b1bf787821cf/attachment","path":"scripts/LrcApi/Dockerfile","size":862,"sha256":"e652f2edee40c9c4e9161ec21608097903ad26a0d9c9fa8d0b1a021b01c24ce9","contentType":"text/plain; charset=utf-8"},{"id":"147303df-20ec-502c-b8c0-a1d92b1e4861","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/147303df-20ec-502c-b8c0-a1d92b1e4861/attachment.md","path":"scripts/LrcApi/README.md","size":5533,"sha256":"5c292f4a583f97b17d53fa9995124e6b2df9847315c74cabe54148fd7bbb233d","contentType":"text/markdown; charset=utf-8"},{"id":"a8dd8894-80e8-57dc-a481-a803d709d242","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a8dd8894-80e8-57dc-a481-a803d709d242/attachment.md","path":"scripts/LrcApi/README_EN.md","size":6007,"sha256":"57412e7bdf6a34c78203fb6e8f8b4e83ccd0e09ad3efce0418b23c761cf7b39f","contentType":"text/markdown; charset=utf-8"},{"id":"55b94421-013a-5d2f-a85c-6ebec9c67268","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/55b94421-013a-5d2f-a85c-6ebec9c67268/attachment.py","path":"scripts/LrcApi/api/__import__.py","size":153,"sha256":"2d8aee6573d68877118f7004be487be4a6053092988f4b4340e34141a350528c","contentType":"text/x-python; charset=utf-8"},{"id":"a4351b08-bf18-53e2-87a0-d4edd456b8b0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a4351b08-bf18-53e2-87a0-d4edd456b8b0/attachment.py","path":"scripts/LrcApi/api/__init__.py","size":2594,"sha256":"f83f8b2442602b8ec8994a03c2f021e5ae65a9488486448d2e428f324638d633","contentType":"text/x-python; charset=utf-8"},{"id":"332505da-1d7f-5fc5-8bea-d5304e17514b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/332505da-1d7f-5fc5-8bea-d5304e17514b/attachment.py","path":"scripts/LrcApi/api/cover.py","size":2672,"sha256":"7e918aa3f0c9702d4916524ba3993a045cd3d512c78d8ae69d45ca7149655f1e","contentType":"text/x-python; charset=utf-8"},{"id":"4d135462-07a1-5f6a-ae58-4eb320bec98e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4d135462-07a1-5f6a-ae58-4eb320bec98e/attachment.py","path":"scripts/LrcApi/api/db.py","size":6894,"sha256":"ca7cbaa2f62bbf4637385508c176bcc17ff2221e6af0e3cb96b5234e302735d0","contentType":"text/x-python; charset=utf-8"},{"id":"09d55b17-ff67-5e31-bb57-19fd874c382b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09d55b17-ff67-5e31-bb57-19fd874c382b/attachment.py","path":"scripts/LrcApi/api/file.py","size":5369,"sha256":"b840f0cfb2175c536e1e172d28ab0bf25ac578322d793f72568ec92a04864b30","contentType":"text/x-python; charset=utf-8"},{"id":"0122e4fd-a828-591e-a43d-c70c958377f1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0122e4fd-a828-591e-a43d-c70c958377f1/attachment.py","path":"scripts/LrcApi/api/login.py","size":1039,"sha256":"63523d8bc628f1bfce5369d66fb9d300f8463a25a95c6aedb80350fbc480c56e","contentType":"text/x-python; charset=utf-8"},{"id":"3d227913-370a-54a5-92fe-cda4004803f3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3d227913-370a-54a5-92fe-cda4004803f3/attachment.py","path":"scripts/LrcApi/api/lyrics.py","size":8384,"sha256":"e9808ba44cc2a8405e4a357b91af01c2c693fbb70af6ae998d64a93967d23086","contentType":"text/x-python; charset=utf-8"},{"id":"936c9b44-2336-5c5e-a814-e3b3e0c2b0eb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/936c9b44-2336-5c5e-a814-e3b3e0c2b0eb/attachment.py","path":"scripts/LrcApi/api/source.py","size":2322,"sha256":"1997f0a2c07703487f33f19acdc634b3341e343df2c4df5b36167ff4318250e6","contentType":"text/x-python; charset=utf-8"},{"id":"2d76cf58-6842-5972-b8dd-05d5ac9a8be5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2d76cf58-6842-5972-b8dd-05d5ac9a8be5/attachment.py","path":"scripts/LrcApi/api/tag.py","size":2636,"sha256":"78bab8798318c206734c0513c7646ae3beba5db5a3a14e155116285993ac7a62","contentType":"text/x-python; charset=utf-8"},{"id":"29a18b4f-4421-5c0e-a648-92c747593fe1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/29a18b4f-4421-5c0e-a648-92c747593fe1/attachment.py","path":"scripts/LrcApi/api/time.py","size":291,"sha256":"ab4e12abe520a971366d56c51646708aab48255236dbca509c04e592bea0e6ee","contentType":"text/x-python; charset=utf-8"},{"id":"b42a9137-3922-5e72-9e85-b1cdf4fa6f15","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b42a9137-3922-5e72-9e85-b1cdf4fa6f15/attachment.py","path":"scripts/LrcApi/api/waf.py","size":2938,"sha256":"69025c4cb6ca5ac01565eda50b4f67ff7062664d1ef6568d57ae34a6456a0ccb","contentType":"text/x-python; charset=utf-8"},{"id":"b6c28e55-607b-5571-98dd-fb7071961242","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b6c28e55-607b-5571-98dd-fb7071961242/attachment.py","path":"scripts/LrcApi/app.py","size":2089,"sha256":"a33af1e5c385c7c54b88928b28efbea4b08ce6128022e807ceb001be1bcc0b60","contentType":"text/x-python; charset=utf-8"},{"id":"695b6950-6aa9-5408-a280-96700bbda836","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/695b6950-6aa9-5408-a280-96700bbda836/attachment.sh","path":"scripts/LrcApi/build.sh","size":74,"sha256":"d5a0712bd0f54a911948bdc5ef70f9666f85552ec4b109b80d471e3c6fea054b","contentType":"application/x-sh; charset=utf-8"},{"id":"7ec268e6-1eb7-56f4-9150-decf70e97e15","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7ec268e6-1eb7-56f4-9150-decf70e97e15/attachment.py","path":"scripts/LrcApi/buildup.py","size":1573,"sha256":"fc4ffaca9da5df17e38eb9931c73a8fa3c819c4f4ef5135e92bfdac619559c03","contentType":"text/x-python; charset=utf-8"},{"id":"7a984a93-a068-5771-a4a8-df7bfc9d75e9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7a984a93-a068-5771-a4a8-df7bfc9d75e9/attachment.py","path":"scripts/LrcApi/devtools/__init__.py","size":1548,"sha256":"ebf14c0655a7c169dd920ec68824f8cb88aeb6b100fe374ee6eef83b5257b85c","contentType":"text/x-python; charset=utf-8"},{"id":"343e33e1-4366-5a03-98a8-9e7aaf10468a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/343e33e1-4366-5a03-98a8-9e7aaf10468a/attachment.png","path":"scripts/LrcApi/logo.png","size":71199,"sha256":"7693c04b717be150fad8bf27d781a9ea43596c80419116878cd4c51b7cbc98bc","contentType":"image/png"},{"id":"109b4df5-a368-5319-b199-85bc5dd7728c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/109b4df5-a368-5319-b199-85bc5dd7728c/attachment.py","path":"scripts/LrcApi/make_release.py","size":766,"sha256":"2e03423a214344074af6f6e233f876e161aa1247e9b5c23198b72b65488a8762","contentType":"text/x-python; charset=utf-8"},{"id":"a919d610-8974-5b97-96e1-93a480a144e8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a919d610-8974-5b97-96e1-93a480a144e8/attachment.py","path":"scripts/LrcApi/mod/__init__.py","size":0,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contentType":"text/x-python; charset=utf-8"},{"id":"35021950-7f20-5aae-91a7-fb3e0f5d7fa0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/35021950-7f20-5aae-91a7-fb3e0f5d7fa0/attachment.py","path":"scripts/LrcApi/mod/args/__init__.py","size":6313,"sha256":"b797f2cfcc3dba06ad1d8a5f96cdf8d0ea0bec6674c0245418fce5278701b96b","contentType":"text/x-python; charset=utf-8"},{"id":"c17be63c-5b10-5704-b5f8-a1e475a9152c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c17be63c-5b10-5704-b5f8-a1e475a9152c/attachment.py","path":"scripts/LrcApi/mod/auth/__init__.py","size":987,"sha256":"ff4019f5a90796dd9d7dabfa87755b1f5915c5501b204af2c54a06979c51ea2b","contentType":"text/x-python; charset=utf-8"},{"id":"732b0fa7-a105-56be-aff6-3ae8e2eb108e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/732b0fa7-a105-56be-aff6-3ae8e2eb108e/attachment.py","path":"scripts/LrcApi/mod/auth/authentication.py","size":1662,"sha256":"a4501f532d9730ae2fa44d0de98a8fedc3092809eac2d041aa2d73c5d6914d4d","contentType":"text/x-python; charset=utf-8"},{"id":"e6040423-0ab7-5d90-994b-ff3520ea6b6f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e6040423-0ab7-5d90-994b-ff3520ea6b6f/attachment.py","path":"scripts/LrcApi/mod/auth/cookie.py","size":1022,"sha256":"35d62cc21b324955a635b25a5f17c0d468af5a7689df8af2566bf7d0be38451c","contentType":"text/x-python; charset=utf-8"},{"id":"43dd86a0-f96f-56d0-a976-f8f269cf7482","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/43dd86a0-f96f-56d0-a976-f8f269cf7482/attachment.py","path":"scripts/LrcApi/mod/auth/crypto.py","size":1149,"sha256":"a962a21d150a8dccab8dd619e0f2270e8bf84c9d24567695ebf2baeee0dbcba6","contentType":"text/x-python; charset=utf-8"},{"id":"7e946fb6-017b-54f5-9715-bd4e21ddc2c1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7e946fb6-017b-54f5-9715-bd4e21ddc2c1/attachment.py","path":"scripts/LrcApi/mod/auth/webui.py","size":2897,"sha256":"9be92cb71f2c96ad739f05ee62bbac01895d6b9488dd18d3beb88b721c648491","contentType":"text/x-python; charset=utf-8"},{"id":"ff8bbfb7-53ab-579d-bf71-54a15f653359","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ff8bbfb7-53ab-579d-bf71-54a15f653359/attachment.py","path":"scripts/LrcApi/mod/check_update.py","size":2315,"sha256":"14b36eb88088c3eff9039745cb719f5cbb71c54a60df22cf0d040b1dbfe2633a","contentType":"text/x-python; charset=utf-8"},{"id":"277d62a4-a88d-50e7-84e1-37cb148fe6ce","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/277d62a4-a88d-50e7-84e1-37cb148fe6ce/attachment.py","path":"scripts/LrcApi/mod/db/__init__.py","size":26043,"sha256":"7fb5c1fb272f76662bcef56251ff912145d7a56053e4758f32f8ae153b234ad0","contentType":"text/x-python; charset=utf-8"},{"id":"a0d438e5-7a63-5424-9e0c-55538a7c7b5f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a0d438e5-7a63-5424-9e0c-55538a7c7b5f/attachment.py","path":"scripts/LrcApi/mod/lrc.py","size":4168,"sha256":"1e8b81d60c85589f7fc5779843e8b41f331ad137826c26b61a6420d91f19cc74","contentType":"text/x-python; charset=utf-8"},{"id":"255b9d63-fd41-5331-bd27-eecfbd89d567","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/255b9d63-fd41-5331-bd27-eecfbd89d567/attachment.py","path":"scripts/LrcApi/mod/music_tag/__init__.py","size":2105,"sha256":"be715159d0158903b45c422f75623b71c3c82fc9c71b05851b11412cddace3e7","contentType":"text/x-python; charset=utf-8"},{"id":"60f0fad3-b558-573e-b503-f4eba7d77fe8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/60f0fad3-b558-573e-b503-f4eba7d77fe8/attachment.py","path":"scripts/LrcApi/mod/music_tag/__main__.py","size":6425,"sha256":"ab9d34a3e0aeaf9a5d727d51cde76a35df471721e8cba8a3abbf4f261fe215da","contentType":"text/x-python; charset=utf-8"},{"id":"1fa4b1a8-1a86-5f5f-b5a5-77623f767057","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1fa4b1a8-1a86-5f5f-b5a5-77623f767057/attachment.py","path":"scripts/LrcApi/mod/music_tag/aac.py","size":276,"sha256":"56151189eb25133e660a572e4e0b3e24eb1b3e6683bf9a41307343b7146c8b43","contentType":"text/x-python; charset=utf-8"},{"id":"1e0b13b5-3e25-510b-b549-7b1a63cc4efa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1e0b13b5-3e25-510b-b549-7b1a63cc4efa/attachment.py","path":"scripts/LrcApi/mod/music_tag/aiff.py","size":592,"sha256":"e3058d460998f0fdfdc649f234098c357fa5164a38c1a6ad3ec335420f5c74dd","contentType":"text/x-python; charset=utf-8"},{"id":"0c6c9cf2-2ff0-52dd-b822-0011d3d193ad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0c6c9cf2-2ff0-52dd-b822-0011d3d193ad/attachment.py","path":"scripts/LrcApi/mod/music_tag/apev2.py","size":5990,"sha256":"80b84ef5ce58b7e8c56908b2f5d18793c4f702fe1992175d6339e43d79c92a73","contentType":"text/x-python; charset=utf-8"},{"id":"f48decb5-fc1a-5f6b-a787-a2ba55712baa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f48decb5-fc1a-5f6b-a787-a2ba55712baa/attachment.py","path":"scripts/LrcApi/mod/music_tag/asf.py","size":3236,"sha256":"052cb87dd44a01e532bba949086bcb280f12129feb3b7328ea2738220144405f","contentType":"text/x-python; charset=utf-8"},{"id":"6b972015-6857-5e3f-91f7-45abcb24efa0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6b972015-6857-5e3f-91f7-45abcb24efa0/attachment.py","path":"scripts/LrcApi/mod/music_tag/dsf.py","size":508,"sha256":"7f9009c42a68e10d7238ed252c2686e44cc61ee8a8d6543d38a3a571bc420ca1","contentType":"text/x-python; charset=utf-8"},{"id":"e3ba5889-d568-55f4-bb41-8b3036951203","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e3ba5889-d568-55f4-bb41-8b3036951203/attachment.py","path":"scripts/LrcApi/mod/music_tag/file.py","size":20236,"sha256":"46922c8c92ed335bf54f72c2326bc5080429c079f29810644953f945027dab85","contentType":"text/x-python; charset=utf-8"},{"id":"7fea0bee-854a-5de8-a0c7-04af29c0a4bc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7fea0bee-854a-5de8-a0c7-04af29c0a4bc/attachment.py","path":"scripts/LrcApi/mod/music_tag/flac.py","size":3353,"sha256":"a27c9394d69a6ef2ad897153d4060995b68f62e3f581079a5d176c82b56f78e6","contentType":"text/x-python; charset=utf-8"},{"id":"9c109540-5b14-543f-986c-46cfe8b22a55","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9c109540-5b14-543f-986c-46cfe8b22a55/attachment.py","path":"scripts/LrcApi/mod/music_tag/id3.py","size":12126,"sha256":"621bd21229042c4f1a46c596606d03bbe5960b01efe368ec94602d6daa71505f","contentType":"text/x-python; charset=utf-8"},{"id":"aa3a96fd-5a73-5c83-afd0-88cbfe9865eb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aa3a96fd-5a73-5c83-afd0-88cbfe9865eb/attachment.py","path":"scripts/LrcApi/mod/music_tag/mp4.py","size":6963,"sha256":"f24f40d33f287a7e6c02b2255491222f391afbd8459401ba83af43e8b1aad032","contentType":"text/x-python; charset=utf-8"},{"id":"1cadb006-ecbd-5ad3-bbaf-fa1b48ea2ec1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1cadb006-ecbd-5ad3-bbaf-fa1b48ea2ec1/attachment.py","path":"scripts/LrcApi/mod/music_tag/smf.py","size":309,"sha256":"14e482b8c2cdf322cea17a1cfaeef5ee29101b64a2d030618d86bf5ee03e3210","contentType":"text/x-python; charset=utf-8"},{"id":"c9c24c36-3415-5569-b174-87eda6e7261c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c9c24c36-3415-5569-b174-87eda6e7261c/attachment.py","path":"scripts/LrcApi/mod/music_tag/util.py","size":5427,"sha256":"a1d0676a23aa0e973aef6ced2827f8a2392952758a03c9b89c114197daa8d93c","contentType":"text/x-python; charset=utf-8"},{"id":"34f42778-555b-5d21-9cea-25bfbe8e618c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/34f42778-555b-5d21-9cea-25bfbe8e618c/attachment.py","path":"scripts/LrcApi/mod/music_tag/vorbis.py","size":5289,"sha256":"f7e0ed0771fc65bb3ceeadaa302049710151f41efce5240c13996e44fb3ce41d","contentType":"text/x-python; charset=utf-8"},{"id":"23c6980d-c4e9-5abf-b133-363c07530e51","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/23c6980d-c4e9-5abf-b133-363c07530e51/attachment.py","path":"scripts/LrcApi/mod/music_tag/wave.py","size":757,"sha256":"6f69de649cd02d06a18622a40a6875a5a0860c2df06b75bc8b8a237ec5f88794","contentType":"text/x-python; charset=utf-8"},{"id":"325241ff-1677-5536-a0f1-efa030fc128d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/325241ff-1677-5536-a0f1-efa030fc128d/attachment.py","path":"scripts/LrcApi/mod/searchx/__init__.py","size":1113,"sha256":"e53faf88d514a0ddbeec601ab3c2d06b69d385a63e63073ce9b8c4b0584275b8","contentType":"text/x-python; charset=utf-8"},{"id":"0f1a7dea-5ae7-5b12-8c7c-58849b843987","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0f1a7dea-5ae7-5b12-8c7c-58849b843987/attachment.py","path":"scripts/LrcApi/mod/searchx/api.py","size":1053,"sha256":"335204beca6e7c17c7810f848332953bb3e13484e6c14717f01a61dfa49d35b1","contentType":"text/x-python; charset=utf-8"},{"id":"ecc450bd-54b7-5134-91c0-fb6e7ca177c7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ecc450bd-54b7-5134-91c0-fb6e7ca177c7/attachment.py","path":"scripts/LrcApi/mod/searchx/kugou.py","size":5614,"sha256":"2575aac1232b4335787e888dbb9b6e5ca3acccae54a00112878cda04c86796d1","contentType":"text/x-python; charset=utf-8"},{"id":"8c0bf15a-675d-5c58-933a-96d0b2e2e2ca","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8c0bf15a-675d-5c58-933a-96d0b2e2e2ca/attachment.py","path":"scripts/LrcApi/mod/searchx/migu.py","size":1491,"sha256":"18d99039b616a1d6157eadccb09b66f819ba2d8462f4b57a5b225a7c457b4e98","contentType":"text/x-python; charset=utf-8"},{"id":"208b634a-8bc0-5a0c-82ed-a3fc2ff4a68d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/208b634a-8bc0-5a0c-82ed-a3fc2ff4a68d/attachment.py","path":"scripts/LrcApi/mod/searchx/netease.py","size":9637,"sha256":"0247dcb876fdabb34ecfa982fc3de298c7fca0842249c4480cb543b39a726b6b","contentType":"text/x-python; charset=utf-8"},{"id":"f7d7a929-35c2-5dfe-8d05-bacb5b1bf66f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f7d7a929-35c2-5dfe-8d05-bacb5b1bf66f/attachment.py","path":"scripts/LrcApi/mod/tag.py","size":3830,"sha256":"d2c25cbb5e40a3667af5b63c985e642d7414feb7c9134e2f75976dae0a1dddf3","contentType":"text/x-python; charset=utf-8"},{"id":"cf51b181-2590-59cc-8a18-a863b44e3d26","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cf51b181-2590-59cc-8a18-a863b44e3d26/attachment.py","path":"scripts/LrcApi/mod/textcompare.py","size":3733,"sha256":"3eac6d2502a52e1124c4a4177fe21473ef7c176191cc739f2082dc0ef4397731","contentType":"text/x-python; charset=utf-8"},{"id":"c54601f6-97e6-55cf-82df-c2876ef5b785","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c54601f6-97e6-55cf-82df-c2876ef5b785/attachment.py","path":"scripts/LrcApi/mod/tools.py","size":3228,"sha256":"5cd3ee7982608ebee53e926243473fc85bd263aa46db0be15fe81c19aff0b09d","contentType":"text/x-python; charset=utf-8"},{"id":"6b35707d-3134-5fa0-aff9-eb1481e68830","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6b35707d-3134-5fa0-aff9-eb1481e68830/attachment.py","path":"scripts/LrcApi/mod/ttscn.py","size":76393,"sha256":"8368f327a89405b4163bdb991b3ab4e5bbc0bdde483d430d5fd2e38985559be9","contentType":"text/x-python; charset=utf-8"},{"id":"04abaa26-c7e5-5f4c-aa31-b691b140c65b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/04abaa26-c7e5-5f4c-aa31-b691b140c65b/attachment.txt","path":"scripts/LrcApi/requirements.txt","size":197,"sha256":"5bd5c8c1ff843989d5e2fa0df2dcbdc9ff062affb8383c4fbad3c25f7947cbab","contentType":"text/plain; charset=utf-8"},{"id":"8edf378c-fbfb-5aa2-aa30-4b7df1a5597c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8edf378c-fbfb-5aa2-aa30-4b7df1a5597c/attachment.html","path":"scripts/LrcApi/src/acknowledgments.html","size":10255,"sha256":"fdaa8a3faced23c848cc7159b6923d1c6aba42421a1e7ea2206923cafa9d56f7","contentType":"text/html; charset=utf-8"},{"id":"f8f110b9-9d9c-571d-a208-df2c11a6d78d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f8f110b9-9d9c-571d-a208-df2c11a6d78d/attachment.css","path":"scripts/LrcApi/src/css/mod.css","size":1539,"sha256":"31796a050d87dbee1bea1e0b975798916b74990afe7b827d7c09e4f95015c41d","contentType":"text/css; charset=utf-8"},{"id":"0e032737-cce7-54fc-9751-421549b82ae1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0e032737-cce7-54fc-9751-421549b82ae1/attachment.css","path":"scripts/LrcApi/src/css/v50.css","size":5315,"sha256":"4c7c97cac3c00936d8a08788d4c23ff5092578a8b37c5339f54b949e58b2e99f","contentType":"text/css; charset=utf-8"},{"id":"f11fdfaa-1d86-502b-b708-c7b0a83fb4db","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f11fdfaa-1d86-502b-b708-c7b0a83fb4db/attachment.svg","path":"scripts/LrcApi/src/img/Logo_Design.svg","size":2940,"sha256":"203b42566f00bda244120afe7c64e2d9f53ff5bc13bb7d520d3b40041bf781f9","contentType":"image/svg+xml"},{"id":"1411f91e-ae0f-57e2-80f8-9dc8ddbb13e8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1411f91e-ae0f-57e2-80f8-9dc8ddbb13e8/attachment.png","path":"scripts/LrcApi/src/img/Logo_Text_inbox.png","size":7938,"sha256":"9a621ff7c6fcd40d4fd658e90faeb6a5f07e05712ca45f31c67aa38c39fdd0ff","contentType":"image/png"},{"id":"0b234014-324d-566d-a474-1b0d8dcabb94","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0b234014-324d-566d-a474-1b0d8dcabb94/attachment.png","path":"scripts/LrcApi/src/img/LrcAPI-Text-Extra.png","size":139149,"sha256":"bd2a9cfda2555cd173ef11d3953f153f0945354b3c4f661c70c56efbcd7944d2","contentType":"image/png"},{"id":"b5a4e643-7c62-5112-921e-500b74e092f2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b5a4e643-7c62-5112-921e-500b74e092f2/attachment.jpg","path":"scripts/LrcApi/src/img/bg.jpg","size":297188,"sha256":"6cf7065ef1bb5d8d34a8dfd6dba9c52daf0ea3eebbef27f51f8bc7721d66a8f3","contentType":"image/jpeg"},{"id":"211787d7-6300-572e-b497-90e0d1f380c8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/211787d7-6300-572e-b497-90e0d1f380c8/attachment.png","path":"scripts/LrcApi/src/img/qrcode.png","size":51787,"sha256":"f6bc1e478cfa13dd5cd72ce907bd31e5baa5851002453ebf840be093ee167d03","contentType":"image/png"},{"id":"dec677f8-fec8-534d-828b-863e9aaa8bd9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dec677f8-fec8-534d-828b-863e9aaa8bd9/attachment.html","path":"scripts/LrcApi/src/index.html","size":4146,"sha256":"a31bddab41097abfb96f4c4bd9750b7f0a36435eabccec7aa1b9e5623541b957","contentType":"text/html; charset=utf-8"},{"id":"7773910e-8f2e-51f8-ae06-98c2de67d75e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7773910e-8f2e-51f8-ae06-98c2de67d75e/attachment.js","path":"scripts/LrcApi/src/js/common-elements.js","size":2938,"sha256":"27486f5527c2684d0a9b5d7a327fc591d4dc878ad3331a9b80cfd7b6352c1d7d","contentType":"application/javascript; charset=utf-8"},{"id":"585037f4-557e-5daa-b89a-cfae99994eda","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/585037f4-557e-5daa-b89a-cfae99994eda/attachment.js","path":"scripts/LrcApi/src/js/site-config.js","size":2336,"sha256":"af93c34888f73d75180916e32c8bfeaf1ecfd92b93980f44ce69afe8fbeed5d7","contentType":"application/javascript; charset=utf-8"},{"id":"62a3a887-28d9-53ad-bb62-e8e6cf7631c9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/62a3a887-28d9-53ad-bb62-e8e6cf7631c9/attachment.py","path":"scripts/LrcApi/tests/__init__.py","size":0,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contentType":"text/x-python; charset=utf-8"},{"id":"78fb3723-b7d9-5d8f-a2f1-d57e73ed7151","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/78fb3723-b7d9-5d8f-a2f1-d57e73ed7151/attachment.py","path":"scripts/LrcApi/tests/test_app.py","size":533,"sha256":"a4db7087c9f2710c4de33d1f95000535a1b1d668e8afdd50c1b93f90006e1ced","contentType":"text/x-python; charset=utf-8"}],"bundle_sha256":"9d437c87821331f58b3014150083cefebae6d9fd1e84dff0fd6c99b719d640df","attachment_count":79,"text_attachments":71,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":8,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"integrations-apis","category_label":"Integrations"},"exact_dupes_collapsed_into_this":0},"license":"MIT","version":"v1","category":"integrations-apis","homepage":"https://github.com/adminlove520/lyric-sense","triggers":["听歌","歌词","播放音乐","搜索歌词","显示歌词","lyrics","查歌词","这首歌歌词","帮我找歌词"],"import_tag":"clean-skills-v1","description":"让 AI 通过歌词「听」音乐的 OpenClaw 技能。 通过调用 LrcApi 搜索歌词、实时显示当前播放句子、获取封面, 让龙虾真正「看懂」正在播放的歌曲。支持与 netease-daily-v3 联动, 自动为日推歌单每首歌生成歌词跳转链接。\n","always_apply":false}},"renderedAt":1782981720292}

LyricSense 歌词技能 让 AI 通过歌词「听」音乐的 OpenClaw 技能。 功能 1. 搜索歌词 — 通过歌手 + 歌名获取 LRC 格式歌词 2. 展示歌词 — 格式化输出,高亮当前句 3. 获取封面 — 返回专辑封面图片 URL 4. 快速跳转 — 生成 LyricSense 网页界面链接,点击即可同步播放 5. 联动日推 — 与 netease-daily-v3 配合,为日推歌单每首歌添加歌词入口 API 说明 公共 API(无需部署) 响应格式:纯文本 LRC 格式 本地 API(自部署,无限制) 网页界面(带同步高亮) 龙虾使用示例 示例 1:搜索并展示歌词 用户: 帮我查一下《晚安》颜人中的歌词 龙虾: 返回后解析 LRC 并展示: 示例 2:只知道歌名 用户: 夜空中最亮的星 歌词给我 示例 3:联动 netease-daily-v3 日推 当龙虾获取到日推歌单时,为每首歌自动生成歌词链接: 示例 4:格式化输出(供龙虾直接展示) 错误处理 | 情况 | 处理方式 | |------|---------| | 歌词为空 | 提示用户换关键词,或只用歌名/歌手单独搜索 | | CORS 跨域 | 自动通过 代理转发 | | API 超时 | 重试 1 次,仍失败则提示使用本地部署 | | LRC 格式异常 | 尝试按行分割,过滤无效行 | 部署方式 在线…