Skip to content
eddiehinkle.comWashington, DC MetroEst. 2015

PostscodeMostly Cloudy, 36°F

Code: traktpub.py

from dateutil.tz import UTC from dateutil.parser import parse from datetime import datetime

import conf import json import os import feedparser import requests

def make_id(seed): return seed.replace('/', '-').replace(':', '-').replace(',', '-')

feed = feedparser.parse(conf.FEED_URL) now = datetime.utcnow().astimezone(UTC)

for entry in feed['items']: data = { 'title': entry['title'], 'summary': entry['summary'], 'link': entry['link'] }

if len(data['summary']) == 0:
    data['summary'] = entry['title']

when = parse(entry['published'])
poster_url = entry['media_content'][]['url']

if 'Episode' in entry['id']:
    data['type'] = 'tv'
elif 'Movie' in entry['id']:
    data['type'] = 'movie'

media_id = make_id(entry['id'])
footprint = conf.HISTORY_PATH + '/' + media_id

if os.path.exists(footprint):
    print('Skipping ->', media_id, '->', data['title'])
    continue

print('Publishing ->', media_id, '->', data['title'])

poster_response = requests.get(poster_url)
response = requests.post('https://cleverdevil.io/watching/trakt/', data={
    'payload': json.dumps(data)
}, files={
    'photo': (
        poster_url.rsplit('/', 1)[],
        poster_response.content,
        poster_response.headers['Content-Type'],
        {'Expires': '0'}
    )
})

if response.status_code in (200, 201, 202):
    open(footprint, 'w').write(json.dumps(data))
    print('Successfully published ->', media_id)
else:
    print('Failed to publish ->', media_id)

Posted by Quill