annotate oembed/core.py @ 989:2908859c2fe4

Smilies now use relative links. This is for upcoming switch to SSL. Currently we do not need absolute URLs for smilies. If this changes we can add it later.
author Brian Neal <bgneal@gmail.com>
date Thu, 29 Oct 2015 20:54:34 -0500
parents 2181da65c98b
children
rev   line source
bgneal@285 1 """
bgneal@285 2 This module contains core functionality for the oembed application.
bgneal@679 3
bgneal@285 4 """
bgneal@908 5 from contextlib import closing
bgneal@679 6 import json
bgneal@285 7 import urllib
bgneal@285 8 import urllib2
bgneal@285 9 import gzip
bgneal@285 10 try:
bgneal@285 11 from cStringIO import StringIO
bgneal@285 12 except ImportError:
bgneal@285 13 from StringIO import StringIO
bgneal@285 14
bgneal@285 15
bgneal@285 16
bgneal@285 17 USER_AGENT = 'gremmies python oembed'
bgneal@285 18
bgneal@285 19
bgneal@908 20 def get_oembed(api_endpoint, url, fmt='json', **opts):
bgneal@285 21 """
bgneal@285 22 Perform the GET request to retrieve the embedded media data from the given
bgneal@285 23 API endpoint for the given URL. Return the result as a Python dictionary.
bgneal@285 24
bgneal@908 25 fmt specifies the response format, and should be 'json' or 'xml'.
bgneal@285 26 opts are any additional GET options that should be present in the GET
bgneal@285 27 request.
bgneal@285 28
bgneal@285 29 """
bgneal@285 30 opts['url'] = url
bgneal@908 31 opts['format'] = fmt
bgneal@285 32 api_url = "%s?%s" % (api_endpoint, urllib.urlencode(opts))
bgneal@285 33
bgneal@285 34 headers = {
bgneal@361 35 'User-Agent': USER_AGENT,
bgneal@285 36 'Accept-Encoding': 'gzip',
bgneal@285 37 }
bgneal@285 38 request = urllib2.Request(api_url, headers=headers)
bgneal@908 39 with closing(urllib2.urlopen(request)) as response:
bgneal@908 40 headers = response.info()
bgneal@908 41 result = response.read()
bgneal@285 42
bgneal@285 43 if headers.get('content-encoding') == 'gzip':
bgneal@908 44 with closing(gzip.GzipFile(fileobj=StringIO(result))) as f:
bgneal@908 45 result = f.read()
bgneal@285 46
bgneal@285 47 return json.loads(result)
bgneal@285 48
bgneal@285 49 if __name__ == "__main__":
bgneal@285 50 try:
bgneal@285 51 print get_oembed("http://www.youtube.com/oembed",
bgneal@907 52 "http://www.youtube.com/watch?v=7_IMzJldOf4",
bgneal@907 53 scheme='https')
bgneal@285 54 except urllib2.HTTPError, e:
bgneal@285 55 print e