diff --git a/pytchat/tool/videoinfo.py b/pytchat/tool/videoinfo.py index e2de5f5..a6fb117 100644 --- a/pytchat/tool/videoinfo.py +++ b/pytchat/tool/videoinfo.py @@ -93,7 +93,8 @@ class VideoInfo: result = re.search(pattern, text) if result is None: raise PatternUnmatchError(text) - res = json.loads(result.group(1)[:-1]) + decoder = json.JSONDecoder() + res = decoder.raw_decode(result.group(1)[:-1])[0] response = self._get_item(res, item_response) if response is None: self._check_video_is_private(res.get("args")) diff --git a/tests/test_videoinfo.py b/tests/test_videoinfo.py index af1ba84..c2a8803 100644 --- a/tests/test_videoinfo.py +++ b/tests/test_videoinfo.py @@ -1,7 +1,6 @@ from json.decoder import JSONDecodeError from pytchat.tool.videoinfo import VideoInfo from pytchat.exceptions import InvalidVideoIdException, PatternUnmatchError -from pytchat import util def _open_file(path): @@ -32,7 +31,7 @@ def test_archived_page(mocker): def test_live_page(mocker): _set_test_data('tests/testdata/videoinfo/live_page.txt', mocker) info = VideoInfo('__test_id__') - '''live page :duration = 0''' + '''live page: duration==0''' assert info.get_duration() == 0 assert info.video_id == '__test_id__' assert info.get_channel_name() == 'BGM channel' @@ -88,3 +87,15 @@ def test_pattern_unmatch(mocker): assert False except PatternUnmatchError: assert True + + +def test_extradata_handling(mocker): + '''Test case the extracted data are JSON lines.''' + _set_test_data( + 'tests/testdata/videoinfo/extradata_page.txt', mocker) + try: + _ = VideoInfo('__test_id__') + assert True + except JSONDecodeError as e: + print(e.doc) + assert False diff --git a/tests/testdata/videoinfo/extradata_page.txt b/tests/testdata/videoinfo/extradata_page.txt new file mode 100644 index 0000000..a8f41ff --- /dev/null +++ b/tests/testdata/videoinfo/extradata_page.txt @@ -0,0 +1,15 @@ + + + + + GitHub Arctic Code Vault - YouTube + + + + + + +
+ \ No newline at end of file