Created
May 22, 2017 02:16
-
-
Save jkwill87/f4e2845a5bb616daf7c0b1434aa9dbd0 to your computer and use it in GitHub Desktop.
Revisions
-
jkwill87 created this gist
May 22, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,78 @@ class OMDb(_ApiProvider): """Queries the OMDb developer API. """ def __init__(self, **options): super(OMDb, self).__init__(**options) def lookup(self, imdb_id, abridged=False): pass def search(self, **parameters): # Get relevant parameters series = parameters.get('series') season = parameters.get('season') episode = parameters.get('episode') title = parameters.get('title') year = parameters.get('year') # Query OMDb API url = 'http://www.omdbapi.com/' payload = _prep_payload( s=title, t=series, type='episode' if self.media_type == 'television' else 'movie', season=season, episode=episode ) entries = list() response = request('get', url, params=payload).json() # Exit early if no hits if response.get('Response', False) != 'True': return list() # Parse movie response elif self.media_type == 'movie': page_no = 1 while True: payload['page'] = page_no page_no += 1 response = request('get', url, params=payload).json() if response['Response'] != 'True' or 'Search' not in response: break for entry in response['Search']: entries.append({k: v for k, v in { 'title': entry.get('Title'), 'year': entry.get('Year'), 'episode': entry.get('Episode'), 'season': entry.get('Season'), 'media': 'movie', 'imdb_id': entry.get('imdbID') }.items() if v}) if page_no >= 100 or len(entries) >= self.max_hits: break # Parse television w/o episode specified response elif self.media_type == 'television' and episode: entries.append({ 'series': series, 'episode': response.get('Episode'), 'season': response.get('Season'), 'title': response.get('Title'), 'media': 'movie', 'imdb_id': response.get('imdbID') }) # Parse television w/ episode specified response elif self.media_type == 'television': entries.append({ 'series': series, 'episode': response.get('Episode'), 'season': response.get('Season'), 'title': response.get('Title'), 'media': 'movie', 'imdb_id': response.get('imdbID') }) return self._post_process(entries, year)