Skip to content

Instantly share code, notes, and snippets.

@jkwill87
Created May 22, 2017 02:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkwill87/f4e2845a5bb616daf7c0b1434aa9dbd0 to your computer and use it in GitHub Desktop.
Save jkwill87/f4e2845a5bb616daf7c0b1434aa9dbd0 to your computer and use it in GitHub Desktop.
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment