From cbeb9d5b5fe354c2dce8bfa85408905cb67017ad Mon Sep 17 00:00:00 2001
From: p <p@mail.com>
Date: Sat, 21 Nov 2020 02:32:47 -0500
Subject: [PATCH] change how page count is calculated skip invalid video

---
 src/you_get/extractors/bilibili.py | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/you_get/extractors/bilibili.py b/src/you_get/extractors/bilibili.py
index cdcccf20..e77234d0 100644
--- a/src/you_get/extractors/bilibili.py
+++ b/src/you_get/extractors/bilibili.py
@@ -710,12 +710,11 @@ class Bilibili(VideoExtractor):
         elif sort == 'space_favlist':
             m = re.match(r'https?://space\.?bilibili\.com/(\d+)/favlist\?.*fid=(\d+)', self.url)
             vmid, fid = m.group(1), m.group(2)
-            api_url = self.bilibili_space_favlist_api(fid)
+            page_size=20
+            api_url = self.bilibili_space_favlist_api(fid, ps=page_size)
             api_content = get_content(api_url, headers=self.bilibili_headers(referer=self.url))
             favlist_info = json.loads(api_content)
-            pc = favlist_info['data']['info']['media_count'] // len(favlist_info['data']['medias'])
-            if favlist_info['data']['info']['media_count'] % len(favlist_info['data']['medias']) != 0:
-                pc += 1
+            pc = int((favlist_info['data']['info']['media_count']+page_size-1) / page_size)
             for pn in range(1, pc + 1):
                 log.w('Extracting %s of %s pages ...' % (pn, pc))
                 api_url = self.bilibili_space_favlist_api(fid, pn=pn)
@@ -725,6 +724,9 @@ class Bilibili(VideoExtractor):
                 epn, i = len(favlist_info['data']['medias']), 0
                 for video in favlist_info['data']['medias']:
                     i += 1; log.w('Extracting %s of %s videos ...' % (i, epn))
+                    if self.is_video_invalid(video):
+                        log.w("{}:{} is invalid, skip".format(video['id'], video['title']))
+                        continue
                     url = 'https://www.bilibili.com/video/av%s' % video['id']
                     self.__class__().download_playlist_by_url(url, **kwargs)
 
@@ -762,6 +764,9 @@ class Bilibili(VideoExtractor):
                 url = 'https://www.bilibili.com/audio/au%s' % song['id']
                 self.__class__().download_by_url(url, **kwargs)
 
+    @staticmethod
+    def is_video_invalid(video_dict):
+        return not (video_dict["attr"] and video_dict["attr"] in (0, "0"))  # assume 0 is for all valid video
 
 site = Bilibili()
 download = site.download_by_url