Skip to content

Instantly share code, notes, and snippets.

@jkwill87
Created May 22, 2017 02:16
Show Gist options
  • Select an option

  • Save jkwill87/f4e2845a5bb616daf7c0b1434aa9dbd0 to your computer and use it in GitHub Desktop.

Select an option

Save jkwill87/f4e2845a5bb616daf7c0b1434aa9dbd0 to your computer and use it in GitHub Desktop.

Revisions

  1. jkwill87 created this gist May 22, 2017.
    78 changes: 78 additions & 0 deletions mapi.omdb.py
    Original 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)