mirror of
https://github.com/ClaytonWWilson/Scraper-for-theTVDB.com.git
synced 2025-12-18 10:18:48 +00:00
Refactoring - Added download support for episodes.
This commit is contained in:
parent
d65ffefa70
commit
772581c6ec
@ -45,4 +45,3 @@ while True:
|
|||||||
wait()
|
wait()
|
||||||
elif choice == "0":
|
elif choice == "0":
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|||||||
96
main.py
96
main.py
@ -3,6 +3,7 @@ import shutil
|
|||||||
import requests
|
import requests
|
||||||
import datetime
|
import datetime
|
||||||
import dateutil
|
import dateutil
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
import json
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
@ -24,52 +25,83 @@ def download(series):
|
|||||||
|
|
||||||
# Remove previously downloaded content for this series if it exists
|
# Remove previously downloaded content for this series if it exists
|
||||||
if os.path.exists(os.path.join("downloads", series.folder_name)):
|
if os.path.exists(os.path.join("downloads", series.folder_name)):
|
||||||
shutil.rmtree(os.path.join("downloads", series.folder_name))
|
# BUG Sometimes this call will not remove the entire folder, causing crashes to occur with makedirs
|
||||||
|
shutil.rmtree(os.path.join("downloads", series.folder_name), ignore_errors=True)
|
||||||
|
|
||||||
# Create series folder
|
# Create series folder
|
||||||
os.makedirs(os.path.join("downloads", series.folder_name))
|
os.makedirs(os.path.join("downloads", series.folder_name), exist_ok=True)
|
||||||
|
|
||||||
api_con = APIConnector()
|
api_con = APIConnector()
|
||||||
|
|
||||||
# Download series text data to info.json
|
# # Download series text data to info.json
|
||||||
api_path = "https://api.thetvdb.com/series/{}".format(series.id)
|
# api_path = "https://api.thetvdb.com/series/{}".format(series.id)
|
||||||
res = api_con.send_http_req(api_path)
|
# res = api_con.send_http_req(api_path)
|
||||||
|
|
||||||
info_path = os.path.join("downloads", series.folder_name, "info.json")
|
# info_path = os.path.join("downloads", series.folder_name, "info.json")
|
||||||
|
|
||||||
with open(info_path, 'wb') as f:
|
# with open(info_path, 'wb') as f:
|
||||||
f.write(res.content)
|
# f.write(res.content)
|
||||||
|
|
||||||
# Make a folder for actors
|
# # Make a folder for actors
|
||||||
actors_folder_path = os.path.join("downloads", series.folder_name, "actors")
|
# actors_folder_path = os.path.join("downloads", series.folder_name, "actors")
|
||||||
os.makedirs(actors_folder_path)
|
# os.makedirs(actors_folder_path)
|
||||||
|
|
||||||
# Download actors to actors.json
|
# # Download actors to actors.json
|
||||||
api_path = "https://api.thetvdb.com/series/{}/actors".format(series.id)
|
# api_path = "https://api.thetvdb.com/series/{}/actors".format(series.id)
|
||||||
res = api_con.send_http_req(api_path)
|
# res = api_con.send_http_req(api_path)
|
||||||
|
|
||||||
actors_path = os.path.join("downloads", series.folder_name, "actors", "actors.json")
|
# actors_path = os.path.join("downloads", series.folder_name, "actors", "actors.json")
|
||||||
|
|
||||||
with open(actors_path, 'wb') as f:
|
# with open(actors_path, 'wb') as f:
|
||||||
f.write(res.content)
|
# f.write(res.content)
|
||||||
|
|
||||||
# Make folder for actor profile images
|
# # Make folder for actor profile images
|
||||||
actors_profile_folder_path = os.path.join("downloads", series.folder_name, "actors", "profiles")
|
# actors_profile_folder_path = os.path.join("downloads", series.folder_name, "actors", "profiles")
|
||||||
os.makedirs(actors_profile_folder_path)
|
# os.makedirs(actors_profile_folder_path)
|
||||||
|
|
||||||
# Download each actor's profile picture and save it as their name
|
# # Download each actor's profile picture and save it as their name
|
||||||
for actor in json.loads(res.content)["data"]:
|
# for actor in json.loads(res.content)["data"]:
|
||||||
name = create_file_name(actor["name"])
|
# name = create_file_name(actor["name"])
|
||||||
|
|
||||||
# Check if there is an image for the actor
|
# # Check if there is an image for the actor
|
||||||
if actor["image"] != "":
|
# if actor["image"] != "":
|
||||||
print("downloading " + actor["image"])
|
# print("downloading " + actor["image"])
|
||||||
img_res = requests.get("https://www.thetvdb.com/banners/" + actor["image"])
|
# img_res = requests.get("https://www.thetvdb.com/banners/" + actor["image"])
|
||||||
with open(os.path.join(actors_profile_folder_path, name + '_' + str(actor["id"]) + ".jpg"), 'wb') as f:
|
# with open(os.path.join(actors_profile_folder_path, name + '_' + str(actor["id"]) + ".jpg"), 'wb') as f:
|
||||||
f.write(img_res.content)
|
# f.write(img_res.content)
|
||||||
else:
|
# else:
|
||||||
# Use a default image if one does not exist on theTVDB.com
|
# # Use a default image if one does not exist on theTVDB.com
|
||||||
shutil.copyfile(os.path.join("resources", "default_person.jpg"), os.path.join(actors_profile_folder_path, name + '_' + str(actor["id"]) + ".jpg"))
|
# shutil.copyfile(os.path.join("resources", "default_person.jpg"), os.path.join(actors_profile_folder_path, name + '_' + str(actor["id"]) + ".jpg"))
|
||||||
|
|
||||||
|
# # Make a folder for episodes
|
||||||
|
# episodes_folder_path = os.path.join("downloads", series.folder_name, "episodes")
|
||||||
|
# os.makedirs(episodes_folder_path)
|
||||||
|
|
||||||
|
|
||||||
|
# # Get number of seasons
|
||||||
|
# api_path = "https://api.thetvdb.com/series/{}/episodes/summary".format(series.id)
|
||||||
|
# res = api_con.send_http_req(api_path)
|
||||||
|
# seasons = json.loads(res.content)["data"]["airedSeasons"]
|
||||||
|
|
||||||
|
# # Create a folder for each season
|
||||||
|
# for season in seasons:
|
||||||
|
# season_folder_path = os.path.join(episodes_folder_path, "Season " + season)
|
||||||
|
# os.makedirs(season_folder_path)
|
||||||
|
|
||||||
|
# # Download episode info to episodes.json
|
||||||
|
# api_path = "https://api.thetvdb.com/series/{}/episodes".format(series.id)
|
||||||
|
# res = api_con.send_http_req(api_path)
|
||||||
|
# with open(os.path.join(episodes_folder_path, "episodes.json"), 'wb') as f:
|
||||||
|
# f.write(res.content)
|
||||||
|
|
||||||
|
# # Seperate episode data into individual json files for each episode and download episode thumbnails
|
||||||
|
# for episode in json.loads(res.content)["data"]:
|
||||||
|
# episode_path = os.path.join(episodes_folder_path, "Season " + str(episode["airedSeason"]), "Episode {} - {}".format(str(episode["airedEpisodeNumber"]), episode["episodeName"]))
|
||||||
|
# img_res = requests.get("https://www.thetvdb.com/banners/" + episode["filename"])
|
||||||
|
# with open(episode_path + ".json", 'w') as f:
|
||||||
|
# f.write(json.dumps(episode))
|
||||||
|
# with open(episode_path + ".jpg", 'wb') as f:
|
||||||
|
# f.write(img_res.content)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
utils.py
2
utils.py
@ -56,6 +56,6 @@ def clearScreen():
|
|||||||
|
|
||||||
# Clears out all illegal filename characters from the string
|
# Clears out all illegal filename characters from the string
|
||||||
def create_file_name(string):
|
def create_file_name(string):
|
||||||
string = string.strip().replace(' ', '_')
|
string = string.strip()
|
||||||
string = re.sub(r'(?u)[^-\w. ]', '', string)
|
string = re.sub(r'(?u)[^-\w. ]', '', string)
|
||||||
return string
|
return string
|
||||||
Loading…
Reference in New Issue
Block a user