import requests import os import json import time from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry os.makedirs('torrents', exist_ok=True) check_path = os.path.join('torrents') cache = os.listdir(check_path) def requests_retry_session( retries=3, backoff_factor=0.3, status_forcelist=(500, 502, 504), session=None, ): session = session or requests.Session() retry = Retry( total=retries, read=retries, connect=retries, backoff_factor=backoff_factor, status_forcelist=status_forcelist, ) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) return session def download_torrent(bin_content, movie_name, type): torrent_name = movie_name + type + '.torrent' if '/' in torrent_name: torrent_name = torrent_name.split('/')[0] if torrent_name in cache: print("{} already downloaded".format(torrent_name)) path = os.path.join('torrents', torrent_name) with open(path, 'wb') as f: f.write(bin_content) # write the torrents json file names here. torrent_list = ['torrents1.json', 'torrents2.json', 'torrents3.json', 'torrents5.json', 'torrents6.json', 'torrents7.json', 'torrents8.json', 'torrents9.json', 'torrents10.json', 'torrents11.json', 'torrents12.json', 'torrents13.json'] for torrent_json_file in torrent_list: if not os.path.isfile(torrent_json_file): print("{} does not exist. Run yts_am_api.py script " "to create json files with torrent links to download".format( torrent_json_file)) continue print(torrent_json_file) with open(torrent_json_file, 'r') as f: content = json.load(f) movies = list(content.keys()) print("no. of movies: {}".format(len(movies))) for movie in movies: torrents = content[movie] bluray_1080 = torrents.get('1080_bluray') bluray_720 = torrents.get('720_bluray') web_1080 = torrents.get('1080_web') web_720 = torrents.get('720_web') movie = movie.encode('utf-8').decode('utf-8') print('movie', movie) time.sleep(0.01) if bluray_1080 is not None: response = requests_retry_session().get(bluray_1080, timeout=3) download_torrent(response.content, movie, 'bluray_1080p') continue elif web_1080 is not None: response = requests_retry_session().get(web_1080, timeout=3) download_torrent(response.content, movie, 'web_1080p') continue elif bluray_720 is not None: response = requests_retry_session().get(bluray_720, timeout=3) download_torrent(response.content, movie, 'bluray_720p') continue elif web_720 is not None: response = requests_retry_session().get(web_720, timeout=3) download_torrent(response.content, movie, 'web_720p') continue else: print('not any torrent')