Skip to content

Append video content to result in Douyin parser - #589

Open
molanp wants to merge 1 commit into
fllesser:masterfrom
molanp:patch-1
Open

Append video content to result in Douyin parser#589
molanp wants to merge 1 commit into
fllesser:masterfrom
molanp:patch-1

Conversation

@molanp

@molanp molanp commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

resolve #588

@codecov

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

❌ 6 Tests Failed:

Tests completed Failed Passed Skipped
42 6 36 6
View the top 3 failed test(s) by shortest run time
tests.parsers.test_bilibili_need_ck::test_max_size_video
Stack Traces | 0.382s run time
tests/parsers/test_bilibili_need_ck.py:58: in test_max_size_video
    _, audio_url = await parser.extract_download_urls(bvid=bvid)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/bilibili/__init__.py:327: in extract_download_urls
    download_url_data = await video.get_download_url(page_index=page_index)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:492: in get_download_url
    cid = await self.__get_cid_by_index(page_index)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:410: in __get_cid_by_index
    info = await self.__get_info_cached()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:311: in __get_info_cached
    return await self.get_info()
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:247: in get_info
    await Api(**api, credential=self.credential).update_params(**params).result
.venv/lib/python3.14.../bilibili_api/utils/network.py:2393: in result
    return await self.request()
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2385: in request
    raise e
.venv/lib/python3.14.../bilibili_api/utils/network.py:2376: in request
    return await self._request(raw=raw, byte=byte)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2342: in _request
    ret = self._process_response(resp=resp, raw=raw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2280: in _process_response
    raise NetworkException(resp.code, resp.utf8_text())
E   bilibili_api.exceptions.NetworkException.NetworkException: 网络错误,状态码:412 - <!DOCTYPE html>
E   <html lang="zh-cn">
E   
E   <head>
E       <meta http-equiv="Access-Control-Allow-Origin" content="*" />
E       <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
E       <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
E       <meta name="spm_prefix" content="333.937">
E       <title>出错啦! - bilibili.com</title>
E       <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">
E       <script type="text/javascript" src="//s1.hdslb..../js/jquery/jquery1.7.2.min.js"></script>
E       <style>
E           body {
E             margin: 0;
E             padding: 0;
E             width: 100vw;
E             height: 100vh;
E           }
E          .error-container {
E             height: 100%;
E             width: 100%;
E             display: flex;
E             justify-content: center;
E             align-items: center;
E           }
E           .captcha-content {
E             text-align: center;
E           }
E           .txt-wrap {
E             margin-top: 15px;
E             font-size: 12px;
E             line-height: 22px;
E             color: #999;
E             text-align: left;
E           }
E           .txt-item.err-code {
E             font-size: 28px;
E             font-weight: 700;
E             text-align: center;
E             color: #4c93ff;
E             margin-top: 16px;
E           }
E           
E           .captcha-img {
E             width: 160px;
E             height: 160px;
E             margin: auto;
E             background: url('https://i0.hdslb..../jinkela/long/412/%E9%A1%B5%E9%9D%A2%E7%8A%B6%E6%80%81%E5%9B%BE.png') no-repeat center / cover;
E           }
E           .err-text {
E             color: #03a9f4;
E           }
E           .err-default {
E             font-size: 16px;
E             margin-top: 10px;
E           }
E         </style>
E   </head>
E   
E   <body>
E       <noscript>
E             <strong>抱歉!我们需要允许JavaScript才能够正常运行。请打开后重试~</strong>
E             <strong>错误:412</strong>
E         </noscript>
E         <div class="error-container">
E           <div class="captcha-content">
E             <div class="captcha-img"></div>
E             <div class="txt-item err-code">错误号: 412</div>
E             <div class="txt-item err-text"></div>
E             <div class="txt-item err-default">由于触发哔哩哔哩安全风控策略,该次访问请求被拒绝。 
E               <div class="txt-item">The request was rejected because of the bilibili security control policy.</div>
E             </div>
E             <div class="txt-wrap">
E               <div class="txt-item datetime_now"></div>
E               <div class="txt-item user_url"></div>
E               <div class="txt-item user_ip"></div>
E               <div class="txt-item user_id"></div>
E             </div>
E             <div class="check-input">
E                 <div class="title"></div>
E                 <div class="box-pic"></div>
E                 <div class="box"></div>
E                 <div class="state"></div>
E             </div>
E         </div>
E       </div>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/sha256.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/js.cookie.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/412.js"></script>
E   </body>
E   </html>。
tests.parsers.test_bilibili_need_ck::test_no_audio_video
Stack Traces | 0.409s run time
tests/parsers/test_bilibili_need_ck.py:74: in test_no_audio_video
    video_url, audio_url = await parser.extract_download_urls(bvid="BV1gRjMziELt")
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/bilibili/__init__.py:327: in extract_download_urls
    download_url_data = await video.get_download_url(page_index=page_index)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:492: in get_download_url
    cid = await self.__get_cid_by_index(page_index)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:410: in __get_cid_by_index
    info = await self.__get_info_cached()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:311: in __get_info_cached
    return await self.get_info()
           ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14............/site-packages/bilibili_api/video.py:247: in get_info
    await Api(**api, credential=self.credential).update_params(**params).result
.venv/lib/python3.14.../bilibili_api/utils/network.py:2393: in result
    return await self.request()
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2385: in request
    raise e
.venv/lib/python3.14.../bilibili_api/utils/network.py:2376: in request
    return await self._request(raw=raw, byte=byte)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2342: in _request
    ret = self._process_response(resp=resp, raw=raw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2280: in _process_response
    raise NetworkException(resp.code, resp.utf8_text())
E   bilibili_api.exceptions.NetworkException.NetworkException: 网络错误,状态码:412 - <!DOCTYPE html>
E   <html lang="zh-cn">
E   
E   <head>
E       <meta http-equiv="Access-Control-Allow-Origin" content="*" />
E       <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
E       <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
E       <meta name="spm_prefix" content="333.937">
E       <title>出错啦! - bilibili.com</title>
E       <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">
E       <script type="text/javascript" src="//s1.hdslb..../js/jquery/jquery1.7.2.min.js"></script>
E       <style>
E           body {
E             margin: 0;
E             padding: 0;
E             width: 100vw;
E             height: 100vh;
E           }
E          .error-container {
E             height: 100%;
E             width: 100%;
E             display: flex;
E             justify-content: center;
E             align-items: center;
E           }
E           .captcha-content {
E             text-align: center;
E           }
E           .txt-wrap {
E             margin-top: 15px;
E             font-size: 12px;
E             line-height: 22px;
E             color: #999;
E             text-align: left;
E           }
E           .txt-item.err-code {
E             font-size: 28px;
E             font-weight: 700;
E             text-align: center;
E             color: #4c93ff;
E             margin-top: 16px;
E           }
E           
E           .captcha-img {
E             width: 160px;
E             height: 160px;
E             margin: auto;
E             background: url('https://i0.hdslb..../jinkela/long/412/%E9%A1%B5%E9%9D%A2%E7%8A%B6%E6%80%81%E5%9B%BE.png') no-repeat center / cover;
E           }
E           .err-text {
E             color: #03a9f4;
E           }
E           .err-default {
E             font-size: 16px;
E             margin-top: 10px;
E           }
E         </style>
E   </head>
E   
E   <body>
E       <noscript>
E             <strong>抱歉!我们需要允许JavaScript才能够正常运行。请打开后重试~</strong>
E             <strong>错误:412</strong>
E         </noscript>
E         <div class="error-container">
E           <div class="captcha-content">
E             <div class="captcha-img"></div>
E             <div class="txt-item err-code">错误号: 412</div>
E             <div class="txt-item err-text"></div>
E             <div class="txt-item err-default">由于触发哔哩哔哩安全风控策略,该次访问请求被拒绝。 
E               <div class="txt-item">The request was rejected because of the bilibili security control policy.</div>
E             </div>
E             <div class="txt-wrap">
E               <div class="txt-item datetime_now"></div>
E               <div class="txt-item user_url"></div>
E               <div class="txt-item user_ip"></div>
E               <div class="txt-item user_id"></div>
E             </div>
E             <div class="check-input">
E                 <div class="title"></div>
E                 <div class="box-pic"></div>
E                 <div class="box"></div>
E                 <div class="state"></div>
E             </div>
E         </div>
E       </div>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/sha256.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/js.cookie.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/412.js"></script>
E   </body>
E   </html>。
tests.parsers.test_weibo::test_repost
Stack Traces | 0.82s run time
tests/parsers/test_weibo.py:60: in test_repost
    await asyncio.gather(*[parse_repost(url) for url in urls])
tests/parsers/test_weibo.py:46: in parse_repost
    parse_result = await parser.parse(keyword, searched)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/weibo/__init__.py:50: in _parse_m_weibo_cn
    return await self.parse_weibo_id(wid)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/weibo/__init__.py:193: in parse_weibo_id
    weibo_data = common.decoder.decode(response.content).data
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   msgspec.ValidationError: Object missing required field `data`
tests.parsers.test_bilibili::test_dynamic
Stack Traces | 0.842s run time
tests/parsers/test_bilibili.py:130: in test_dynamic
    await asyncio.gather(*[test_parse_dynamic(dynamic_url) for dynamic_url in dynamic_urls])
tests/parsers/test_bilibili.py:121: in test_parse_dynamic
    result = await parser.parse_dynamic_or_opus(dynamic_id)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/bilibili/__init__.py:184: in parse_dynamic_or_opus
    return await self._parse_dynamic_info(dynamic_info)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/bilibili/__init__.py:189: in _parse_dynamic_info
    result = await self.parse_video(bvid=archive.bvid)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/bilibili/__init__.py:115: in parse_video
    video_info = convert(await video.get_info(), VideoInfo)
                         ^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../site-packages/bilibili_api/video.py:247: in get_info
    await Api(**api, credential=self.credential).update_params(**params).result
.venv/lib/python3.14.../bilibili_api/utils/network.py:2393: in result
    return await self.request()
           ^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2385: in request
    raise e
.venv/lib/python3.14.../bilibili_api/utils/network.py:2376: in request
    return await self._request(raw=raw, byte=byte)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2342: in _request
    ret = self._process_response(resp=resp, raw=raw)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../bilibili_api/utils/network.py:2280: in _process_response
    raise NetworkException(resp.code, resp.utf8_text())
E   bilibili_api.exceptions.NetworkException.NetworkException: 网络错误,状态码:412 - <!DOCTYPE html>
E   <html lang="zh-cn">
E   
E   <head>
E       <meta http-equiv="Access-Control-Allow-Origin" content="*" />
E       <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5)">
E       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
E       <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
E       <meta name="spm_prefix" content="333.937">
E       <title>出错啦! - bilibili.com</title>
E       <link rel="shortcut icon" href="//static.hdslb.com/images/favicon.ico">
E       <script type="text/javascript" src="//s1.hdslb..../js/jquery/jquery1.7.2.min.js"></script>
E       <style>
E           body {
E             margin: 0;
E             padding: 0;
E             width: 100vw;
E             height: 100vh;
E           }
E          .error-container {
E             height: 100%;
E             width: 100%;
E             display: flex;
E             justify-content: center;
E             align-items: center;
E           }
E           .captcha-content {
E             text-align: center;
E           }
E           .txt-wrap {
E             margin-top: 15px;
E             font-size: 12px;
E             line-height: 22px;
E             color: #999;
E             text-align: left;
E           }
E           .txt-item.err-code {
E             font-size: 28px;
E             font-weight: 700;
E             text-align: center;
E             color: #4c93ff;
E             margin-top: 16px;
E           }
E           
E           .captcha-img {
E             width: 160px;
E             height: 160px;
E             margin: auto;
E             background: url('https://i0.hdslb..../jinkela/long/412/%E9%A1%B5%E9%9D%A2%E7%8A%B6%E6%80%81%E5%9B%BE.png') no-repeat center / cover;
E           }
E           .err-text {
E             color: #03a9f4;
E           }
E           .err-default {
E             font-size: 16px;
E             margin-top: 10px;
E           }
E         </style>
E   </head>
E   
E   <body>
E       <noscript>
E             <strong>抱歉!我们需要允许JavaScript才能够正常运行。请打开后重试~</strong>
E             <strong>错误:412</strong>
E         </noscript>
E         <div class="error-container">
E           <div class="captcha-content">
E             <div class="captcha-img"></div>
E             <div class="txt-item err-code">错误号: 412</div>
E             <div class="txt-item err-text"></div>
E             <div class="txt-item err-default">由于触发哔哩哔哩安全风控策略,该次访问请求被拒绝。 
E               <div class="txt-item">The request was rejected because of the bilibili security control policy.</div>
E             </div>
E             <div class="txt-wrap">
E               <div class="txt-item datetime_now"></div>
E               <div class="txt-item user_url"></div>
E               <div class="txt-item user_ip"></div>
E               <div class="txt-item user_id"></div>
E             </div>
E             <div class="check-input">
E                 <div class="title"></div>
E                 <div class="box-pic"></div>
E                 <div class="box"></div>
E                 <div class="state"></div>
E             </div>
E         </div>
E       </div>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/sha256.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/js.cookie.min.js"></script>
E       <script type="text/javascript" charset="utf-8" src="//security.bilibili..../static/js/412.js"></script>
E   </body>
E   </html>。
tests.parsers.test_douyin::test_slides
Stack Traces | 1.44s run time
tests/parsers/test_douyin.py:120: in test_slides
    result = await parser.parse(keyword, searched)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/douyin/__init__.py:35: in _parse_short_link
    return await self.parse_with_redirect(url)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:104: in parse_with_redirect
    return await self.parse(keyword, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/douyin/__init__.py:46: in _parse_douyin
    return await self.parse_aweme(aweme_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/douyin/__init__.py:60: in parse_aweme
    raise ParseException(f"status: {response.status_code}")
E   nonebot_plugin_parser.exception.ParseException: status: 403
tests.parsers.test_douyin::test_common_video
Stack Traces | 4.91s run time
tests/parsers/test_douyin.py:41: in test_common_video
    await test_parse(url)
tests/parsers/test_douyin.py:23: in test_parse
    result = await parser.parse(keyword, searched)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/douyin/__init__.py:46: in _parse_douyin
    return await self.parse_aweme(aweme_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/douyin/__init__.py:60: in parse_aweme
    raise ParseException(f"status: {response.status_code}")
E   nonebot_plugin_parser.exception.ParseException: status: 403

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: 解析抖音视频,有时只发音频

1 participant