Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Commit 283e996

Browse files
committed
Add class TwitterVideoTools as a interface
1 parent b0bad4d commit 283e996

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

twitter_video_tools/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
from .platform_video_downloader import \
55
PlatformVideoDownloader as PlatformVideoDownloader
66
from .twitter_crawler import TwitterCrawler as TwitterCrawler
7+
from .twitter_video_tools import TwitterVideoTools as TwitterVideoTools
78
from .video_downloader import VideoDownloader as VideoDownloader
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from __future__ import annotations
2+
3+
from types import TracebackType
4+
from typing import Optional, Type
5+
6+
from playwright.sync_api import Browser as PlaywrightBrowser
7+
from playwright.sync_api import sync_playwright
8+
9+
from .platform_video_downloader import PlatformVideoDownloader
10+
from .twitter_crawler import TwitterCrawler
11+
from .video_downloader import VideoDownloader
12+
13+
14+
class TwitterVideoTools:
15+
username: Optional[str] = None
16+
password: Optional[str] = None
17+
video_downloader: VideoDownloader
18+
twitter_crawler: TwitterCrawler
19+
_browser: PlaywrightBrowser
20+
_debug: bool = False
21+
22+
def __init__(
23+
self,
24+
username: Optional[str] = None,
25+
password: Optional[str] = None,
26+
video_output_path: str = 'videos',
27+
debug: bool = False,
28+
) -> None:
29+
self.username = username
30+
self.password = password
31+
self._debug = debug
32+
platform_video_downloader = PlatformVideoDownloader(video_output_path)
33+
self.video_downloader = VideoDownloader(username, password, platform_video_downloader)
34+
35+
self._browser = sync_playwright().start().webkit.launch(headless=True)
36+
page = self._browser.new_page()
37+
self.twitter_crawler = TwitterCrawler(page)
38+
if self.username and self.password:
39+
self.twitter_crawler.login(self.username, self.password)
40+
41+
def __enter__(self) -> TwitterVideoTools:
42+
return self
43+
44+
def download(self, tweet_links: list[str]) -> None:
45+
self.video_downloader.download_videos(tweet_links)
46+
47+
def download_from_liked_tweets(self, username: str, until_link: Optional[str] = None) -> None:
48+
video_links: list[str] = []
49+
if until_link:
50+
video_links = self.twitter_crawler.get_liked_video_tweets_until(username, until_link)
51+
else:
52+
video_links = self.twitter_crawler.get_all_liked_video_tweets(username)
53+
54+
self.video_downloader.download_videos(video_links)
55+
56+
def download_from_user(self, username: str, until_link: Optional[str] = None) -> None:
57+
video_links: list[str] = []
58+
if until_link:
59+
video_links = self.twitter_crawler.get_media_tweets_until(username, until_link)
60+
else:
61+
video_links = self.twitter_crawler.get_all_media_tweets(username)
62+
63+
self.video_downloader.download_videos(video_links)
64+
65+
def __exit__(
66+
self,
67+
exc_type: Optional[Type[BaseException]],
68+
exc: Optional[BaseException],
69+
traceback: Optional[TracebackType],
70+
) -> None:
71+
self._browser.close()

0 commit comments

Comments
 (0)