mirror of
https://github.com/bbilly1/media_organizer.git
synced 2024-08-02 16:53:34 +00:00
wrapped calling the tvmaze api in dedicated function with backoff on rate limit
This commit is contained in:
parent
cb15e75402
commit
81289f6a77
@ -4,6 +4,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
|
||||||
def split_file_name(filename):
|
def split_file_name(filename):
|
||||||
@ -77,11 +78,34 @@ def showname_encoder(showname):
|
|||||||
return encoded
|
return encoded
|
||||||
|
|
||||||
|
|
||||||
|
def tvmaze_request(url):
|
||||||
|
""" call the api with back_off on rate limit and user-agent """
|
||||||
|
headers = {
|
||||||
|
'User-Agent': 'https://github.com/bbilly1/media_organizer'
|
||||||
|
}
|
||||||
|
# retry up to 5 times
|
||||||
|
for i in range(5):
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
if response.ok:
|
||||||
|
# all good
|
||||||
|
break
|
||||||
|
elif response.status_code == 429:
|
||||||
|
# rate limited
|
||||||
|
print('hit tvmaze rate limiting, slowing down')
|
||||||
|
back_off = (i + 1) ** 2
|
||||||
|
sleep(back_off)
|
||||||
|
else:
|
||||||
|
# all failed
|
||||||
|
print('request failed with url:\n' + url)
|
||||||
|
request = response.json()
|
||||||
|
return request
|
||||||
|
|
||||||
|
|
||||||
def get_show_id(file_details):
|
def get_show_id(file_details):
|
||||||
""" return dict of matches """
|
""" return dict of matches """
|
||||||
showname = file_details['showname']
|
showname = file_details['showname']
|
||||||
url = 'http://api.tvmaze.com/search/shows?q=' + showname
|
url = 'http://api.tvmaze.com/search/shows?q=' + showname
|
||||||
request = requests.get(url).json()
|
request = tvmaze_request(url)
|
||||||
# loop through results
|
# loop through results
|
||||||
all_results = []
|
all_results = []
|
||||||
for idx, result in enumerate(request):
|
for idx, result in enumerate(request):
|
||||||
@ -138,7 +162,6 @@ def pick_show_id(all_results):
|
|||||||
return show_id, show_name_clean
|
return show_id, show_name_clean
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def multi_parser(file_details, show_id):
|
def multi_parser(file_details, show_id):
|
||||||
""" parse multi episode files names """
|
""" parse multi episode files names """
|
||||||
season = file_details['season']
|
season = file_details['season']
|
||||||
@ -147,7 +170,7 @@ def multi_parser(file_details, show_id):
|
|||||||
episode_name_list = []
|
episode_name_list = []
|
||||||
for episode in episode_list:
|
for episode in episode_list:
|
||||||
url = f'http://api.tvmaze.com/shows/{show_id}/episodebynumber?season={season}&number={episode}'
|
url = f'http://api.tvmaze.com/shows/{show_id}/episodebynumber?season={season}&number={episode}'
|
||||||
request = requests.get(url).json()
|
request = tvmaze_request(url)
|
||||||
episode_name = request['name']
|
episode_name = request['name']
|
||||||
episode_name_list.append(episode_name)
|
episode_name_list.append(episode_name)
|
||||||
|
|
||||||
@ -169,7 +192,7 @@ def get_episode_name(file_details, show_id):
|
|||||||
season = file_details['season']
|
season = file_details['season']
|
||||||
episode = file_details['episode']
|
episode = file_details['episode']
|
||||||
url = f'http://api.tvmaze.com/shows/{show_id}/episodebynumber?season={season}&number={episode}'
|
url = f'http://api.tvmaze.com/shows/{show_id}/episodebynumber?season={season}&number={episode}'
|
||||||
request = requests.get(url).json()
|
request = tvmaze_request(url)
|
||||||
# returns a dict
|
# returns a dict
|
||||||
show_response = request
|
show_response = request
|
||||||
# date based
|
# date based
|
||||||
@ -177,7 +200,7 @@ def get_episode_name(file_details, show_id):
|
|||||||
date_raw = file_details['season_id']
|
date_raw = file_details['season_id']
|
||||||
year, month, day = date_raw.split('.')
|
year, month, day = date_raw.split('.')
|
||||||
url = f'https://api.tvmaze.com/shows/{show_id}/episodesbydate?date={year}-{month}-{day}'
|
url = f'https://api.tvmaze.com/shows/{show_id}/episodesbydate?date={year}-{month}-{day}'
|
||||||
request = requests.get(url).json()
|
request = tvmaze_request(url)
|
||||||
# returns a list
|
# returns a list
|
||||||
show_response = request[0]
|
show_response = request[0]
|
||||||
# build and return tuple
|
# build and return tuple
|
||||||
|
Loading…
Reference in New Issue
Block a user