[O] Adjustable imdb source
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import json
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
from utils import with_disk_cache
|
||||
|
||||
@with_disk_cache('imdbapi_info')
|
||||
def get_imdb_info(imdb_id: str) -> dict:
|
||||
"""
|
||||
Fetch IMDb info from imdbapi.dev as a fallback or replacement for M-Team.
|
||||
"""
|
||||
query = urllib.parse.quote(imdb_id)
|
||||
url = f"https://api.imdbapi.dev/search/titles?query={query}"
|
||||
|
||||
req = urllib.request.Request(url, headers={
|
||||
'accept': 'application/json',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0'
|
||||
})
|
||||
|
||||
try:
|
||||
with urllib.request.urlopen(req) as response:
|
||||
data = json.loads(response.read().decode())
|
||||
if data and "titles" in data and len(data["titles"]) > 0:
|
||||
# Return the matching title info
|
||||
for title in data["titles"]:
|
||||
if title.get("id") == imdb_id:
|
||||
return {"code": "0", "message": "SUCCESS", "data": title}
|
||||
return {"code": "0", "message": "SUCCESS", "data": data["titles"][0]}
|
||||
except Exception as e:
|
||||
print(f"Error fetching from imdbapi for {imdb_id}: {e}")
|
||||
|
||||
return {"code": "1", "message": "NOT_FOUND", "data": {}}
|
||||
+18
-8
@@ -3,6 +3,7 @@ import time
|
||||
from pathlib import Path
|
||||
|
||||
from utils import DEFAULT_DL_DIR, DEFAULT_JELLYFIN_DIR
|
||||
from utils_imdb import get_imdb_info
|
||||
from utils_mteam import (
|
||||
mteam_imdb_info,
|
||||
search_mteam_torrents,
|
||||
@@ -240,17 +241,25 @@ def process_local_file(fs_path: Path, title_dir: str, imdb_id: str, jellyfin_bas
|
||||
apply_rename_mapping(mapping, base_src_dir=src_dir_for_mapping, base_dst_dir=jellyfin_base)
|
||||
print(f"Finished processing local file: {fs_path.name}")
|
||||
|
||||
def process_imdb_workflow(imdb_id: str, dl_dir: str = DEFAULT_DL_DIR, jellyfin_base_dir: str = DEFAULT_JELLYFIN_DIR):
|
||||
def process_imdb_workflow(imdb_id: str, dl_dir: str = DEFAULT_DL_DIR, jellyfin_base_dir: str = DEFAULT_JELLYFIN_DIR, imdb_source: str = "mteam"):
|
||||
"""
|
||||
Workflow to automatically find, download, and map torrents for an IMDb ID into a Jellyfin library.
|
||||
"""
|
||||
print(f"=== [0] Fetching IMDB info for {imdb_id} ===")
|
||||
imdb_info = mteam_imdb_info(imdb_id)
|
||||
if 'data' not in imdb_info:
|
||||
raise ValueError(f"Failed to get IMDB info from M-Team: {imdb_info}")
|
||||
print(f"=== [0] Fetching IMDB info for {imdb_id} from {imdb_source} ===")
|
||||
|
||||
title = imdb_info['data'].get('title', 'Unknown_Title')
|
||||
year = imdb_info['data'].get('year', '')
|
||||
if imdb_source == "imdbapi":
|
||||
imdb_info = get_imdb_info(imdb_id)
|
||||
if 'data' not in imdb_info or not imdb_info['data']:
|
||||
raise ValueError(f"Failed to get IMDB info from imdbapi: {imdb_info}")
|
||||
title = imdb_info['data'].get('primaryTitle', 'Unknown_Title')
|
||||
year = imdb_info['data'].get('startYear', '')
|
||||
else:
|
||||
imdb_info = mteam_imdb_info(imdb_id)
|
||||
if 'data' not in imdb_info:
|
||||
raise ValueError(f"Failed to get IMDB info from M-Team: {imdb_info}")
|
||||
title = imdb_info['data'].get('title', 'Unknown_Title')
|
||||
year = imdb_info['data'].get('year', '')
|
||||
|
||||
title_dir = f"{title} ({year})"
|
||||
print(f"Found Title: {title_dir}")
|
||||
|
||||
@@ -291,7 +300,8 @@ if __name__ == "__main__":
|
||||
parser.add_argument("imdb_id", type=str, help="The IMDb ID to process (e.g., tt38872297)")
|
||||
parser.add_argument("--dl-dir", type=str, default=DEFAULT_DL_DIR, help="The qBittorrent download directory")
|
||||
parser.add_argument("--jellyfin-dir", type=str, default=DEFAULT_JELLYFIN_DIR, help="The base Jellyfin library directory")
|
||||
parser.add_argument("--imdb-source", type=str, choices=["mteam", "imdbapi"], default="mteam", help="The source for IMDb metadata (mteam or imdbapi)")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
process_imdb_workflow(args.imdb_id, dl_dir=args.dl_dir, jellyfin_base_dir=args.jellyfin_dir)
|
||||
process_imdb_workflow(args.imdb_id, dl_dir=args.dl_dir, jellyfin_base_dir=args.jellyfin_dir, imdb_source=args.imdb_source)
|
||||
|
||||
Reference in New Issue
Block a user