Skip to content
34 changes: 30 additions & 4 deletions web_programming/fetch_anime_and_play.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import subprocess
import requests
from bs4 import BeautifulSoup, NavigableString, Tag
from fake_useragent import UserAgent

BASE_URL = "https://ww1.gogoanime2.org"

Check failure on line 6 in web_programming/fetch_anime_and_play.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

web_programming/fetch_anime_and_play.py:1:1: I001 Import block is un-sorted or un-formatted


def search_scraper(anime_name: str) -> list:
Expand Down Expand Up @@ -154,6 +155,12 @@
return [f"{BASE_URL}{episode_url}", f"{BASE_URL}{download_url}"]


def download_video(download_url: str, output_filename: str):
"""Download video using ffmpeg."""
command = ["ffmpeg", "-i", download_url, output_filename]
subprocess.run(command, check=True)

Check failure on line 161 in web_programming/fetch_anime_and_play.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (S603)

web_programming/fetch_anime_and_play.py:161:5: S603 `subprocess` call: check for execution of untrusted input


if __name__ == "__main__":
anime_name = input("Enter anime name: ").strip()
anime_list = search_scraper(anime_name)
Expand All @@ -173,16 +180,35 @@

episode_list = search_anime_episode_list(chosen_anime["url"])
if len(episode_list) == 0:
print("No episode found for this anime")
print("No episodes found for this anime")
else:
print(f"Found {len(episode_list)} results: ")
for i, episode in enumerate(episode_list):
print(f"{i+1}. {episode['title']}")
print(f"{i + 1}. {episode['title']}")

episode_choice = int(input("\nChoose an episode by serial no: ").strip())
episode_choice = int(
input("\nChoose an episode by serial number: ").strip()
)
chosen_episode = episode_list[episode_choice - 1]
print(f"You chose {chosen_episode['title']}. Searching...")

episode_url, download_url = get_anime_episode(chosen_episode["url"])
print(f"\nTo watch, ctrl+click on {episode_url}.")
print(f"To download, ctrl+click on {download_url}.")

# Add an option to download or not
download_choice = (
input("\nDo you want to download this episode? (yes/no): ")
.strip()
.lower()
)
if download_choice in ["yes", "y"]:
output_filename = f"{chosen_anime['title']} - {chosen_episode['title']}.mp4" # Change extension as needed

Check failure on line 205 in web_programming/fetch_anime_and_play.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

web_programming/fetch_anime_and_play.py:205:89: E501 Line too long (122 > 88)
download_video(download_url, output_filename)
print(
f"{chosen_episode['title']} has been downloaded as {output_filename}."

Check failure on line 208 in web_programming/fetch_anime_and_play.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (E501)

web_programming/fetch_anime_and_play.py:208:89: E501 Line too long (90 > 88)
)
else:
print("Download skipped.")

# if error download please install ffmeg
# brew install ffmpeg for mac
Loading