66from yutto .exceptions import NoAccessPermissionError , UnSupportedTypeError
77from yutto .media .codec import audio_codec_map , video_codec_map
88from yutto .types import (
9+ AudioUrlMeta ,
910 BvId ,
1011 CId ,
1112 EpisodeId ,
1213 SeasonId ,
14+ VideoUrlMeta ,
1315 format_ids ,
1416)
1517from yutto .utils .console .logger import Logger
2224 from httpx import AsyncClient
2325
2426 from yutto .types import (
25- AudioUrlMeta ,
2627 AvId ,
2728 MediaId ,
2829 MultiLangSubtitle ,
29- VideoUrlMeta ,
3030 )
3131 from yutto .utils .fetcher import FetcherContext
3232
@@ -75,22 +75,22 @@ async def get_bangumi_list(ctx: FetcherContext, client: AsyncClient, season_id:
7575 # 如 https://www.bilibili.com/bangumi/play/ep409825 中的「次元发电机采访」
7676 # 和 https://www.bilibili.com/bangumi/play/ep424859 中的「编辑推荐」
7777 section_episodes += section ["episodes" ]
78- return {
79- " title" : result ["title" ],
80- " pages" : [
81- {
82- "id" : i + 1 ,
83- " name" : _bangumi_episode_title (item ["title" ], item ["long_title" ]),
84- " cid" : CId (str (item ["cid" ])),
85- " episode_id" : EpisodeId (str (item ["id" ])),
86- " avid" : BvId (item ["bvid" ]),
87- " is_section" : i >= len (result ["episodes" ]),
88- " is_preview" : item ["badge" ] == "预告" , # 并不是一种鲁棒的方式,但目前貌似没有更好的方式了
89- " metadata" : _parse_bangumi_metadata (item ),
90- }
78+ return BangumiList (
79+ title = result ["title" ],
80+ pages = [
81+ BangumiListItem (
82+ id = i + 1 ,
83+ name = _bangumi_episode_title (item ["title" ], item ["long_title" ]),
84+ cid = CId (str (item ["cid" ])),
85+ episode_id = EpisodeId (str (item ["id" ])),
86+ avid = BvId (item ["bvid" ]),
87+ is_section = i >= len (result ["episodes" ]),
88+ is_preview = item ["badge" ] == "预告" , # 并不是一种鲁棒的方式,但目前貌似没有更好的方式了
89+ metadata = _parse_bangumi_metadata (item ),
90+ )
9191 for i , item in enumerate (result ["episodes" ] + section_episodes )
9292 ],
93- }
93+ )
9494
9595
9696async def get_bangumi_playurl (
@@ -113,38 +113,38 @@ async def get_bangumi_playurl(
113113 raise UnSupportedTypeError (f"该视频({ format_ids (avid , cid )} )尚不支持 DASH 格式" )
114114
115115 videos : list [VideoUrlMeta ] = [
116- {
117- " url" : video ["base_url" ],
118- " mirrors" : video ["backup_url" ] if video ["backup_url" ] is not None else [],
119- " codec" : video_codec_map [video ["codecid" ]],
120- " width" : video ["width" ],
121- " height" : video ["height" ],
122- " quality" : video ["id" ],
123- }
116+ VideoUrlMeta (
117+ url = video ["base_url" ],
118+ mirrors = video ["backup_url" ] if video ["backup_url" ] is not None else [],
119+ codec = video_codec_map [video ["codecid" ]],
120+ width = video ["width" ],
121+ height = video ["height" ],
122+ quality = video ["id" ],
123+ )
124124 for video in video_info ["dash" ]["video" ]
125125 ]
126126 audios : list [AudioUrlMeta ] = [
127- {
128- " url" : audio ["base_url" ],
129- " mirrors" : audio ["backup_url" ] if audio ["backup_url" ] is not None else [],
130- " codec" : audio_codec_map [audio ["codecid" ]],
131- " width" : 0 ,
132- " height" : 0 ,
133- " quality" : audio ["id" ],
134- }
127+ AudioUrlMeta (
128+ url = audio ["base_url" ],
129+ mirrors = audio ["backup_url" ] if audio ["backup_url" ] is not None else [],
130+ codec = audio_codec_map [audio ["codecid" ]],
131+ width = 0 ,
132+ height = 0 ,
133+ quality = audio ["id" ],
134+ )
135135 for audio in video_info ["dash" ]["audio" ]
136136 ]
137137 if video_info ["dash" ]["dolby" ] is not None and video_info ["dash" ]["dolby" ]["audio" ] is not None :
138138 dolby_audios_json = video_info ["dash" ]["dolby" ]["audio" ]
139139 audios .extend (
140- {
141- " url" : dolby_audio_json ["base_url" ],
142- " mirrors" : dolby_audio_json ["backup_url" ] if dolby_audio_json ["backup_url" ] is not None else [],
143- " codec" : "eac3" , # TODO: 由于这里的 codecid 仍然是 0,所以无法通过 audio_codec_map 转换,暂时直接硬编码
144- " width" : 0 ,
145- " height" : 0 ,
146- " quality" : dolby_audio_json ["id" ],
147- }
140+ AudioUrlMeta (
141+ url = dolby_audio_json ["base_url" ],
142+ mirrors = dolby_audio_json ["backup_url" ] if dolby_audio_json ["backup_url" ] is not None else [],
143+ codec = "eac3" , # TODO: 由于这里的 codecid 仍然是 0,所以无法通过 audio_codec_map 转换,暂时直接硬编码
144+ width = 0 ,
145+ height = 0 ,
146+ quality = dolby_audio_json ["id" ],
147+ )
148148 for dolby_audio_json in dolby_audios_json
149149 )
150150 return (videos , audios )
0 commit comments