Просмотр исходного кода

Merge pull request #48 from NannoSilver/master

Adds "proxies=" as an optional parameter
Cheskel Twersky 1 год назад
Родитель
Сommit
5da1a292b0
1 измененных файлов с 10 добавлено и 7 удалено
  1. 10 7
      scrapetube/scrapetube.py

+ 10 - 7
scrapetube/scrapetube.py

@@ -17,6 +17,7 @@ def get_channel(
     channel_username: str = None,
     limit: int = None,
     sleep: float = 1,
+    proxies: dict = None,
     sort_by: Literal["newest", "oldest", "popular"] = "newest",
     content_type: Literal["videos", "shorts", "streams"] = "videos",
 ) -> Generator[dict, None, None]:
@@ -71,7 +72,7 @@ def get_channel(
         content_type=content_type,
     )
     api_endpoint = "https://www.youtube.com/youtubei/v1/browse"
-    videos = get_videos(url, api_endpoint, type_property_map[content_type], limit, sleep, sort_by)
+    videos = get_videos(url, api_endpoint, type_property_map[content_type], limit, sleep, proxies, sort_by)
     for video in videos:
         yield video
 
@@ -96,7 +97,7 @@ def get_playlist(
 
     url = f"https://www.youtube.com/playlist?list={playlist_id}"
     api_endpoint = "https://www.youtube.com/youtubei/v1/browse"
-    videos = get_videos(url, api_endpoint, "playlistVideoRenderer", limit, sleep)
+    videos = get_videos(url, api_endpoint, "playlistVideoRenderer", limit, sleep, proxies)
     for video in videos:
         yield video
 
@@ -153,7 +154,7 @@ def get_search(
     url = f"https://www.youtube.com/results?search_query={query}&sp={param_string}"
     api_endpoint = "https://www.youtube.com/youtubei/v1/search"
     videos = get_videos(
-        url, api_endpoint, results_type_map[results_type][1], limit, sleep
+        url, api_endpoint, results_type_map[results_type][1], limit, sleep, proxies
     )
     for video in videos:
         yield video
@@ -187,9 +188,9 @@ def get_video(
 
 
 def get_videos(
-    url: str, api_endpoint: str, selector: str, limit: int, sleep: float, sort_by: str = None
+    url: str, api_endpoint: str, selector: str, limit: int, sleep: float, proxies, sort_by: str = None
 ) -> Generator[dict, None, None]:
-    session = get_session()
+    session = get_session(proxies)
     is_first = True
     quit_it = False
     count = 0
@@ -229,10 +230,12 @@ def get_videos(
         time.sleep(sleep)
 
     session.close()
-    
 
-def get_session() -> requests.Session:
+
+def get_session(proxies) -> requests.Session:
     session = requests.Session()
+    if proxies != None:
+        session.proxies.update(proxies)
     session.headers[
         "User-Agent"
     ] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"