Mercurial > public > sg101
diff oembed/core.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/oembed/core.py@6d6fdc58487c |
children | 89b240fe9297 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/oembed/core.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,57 @@ +""" +This module contains core functionality for the oembed application. +""" +from __future__ import with_statement +import urllib +import urllib2 +import gzip +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +import django.utils.simplejson as json + + +USER_AGENT = 'gremmies python oembed' + + +def get_oembed(api_endpoint, url, format='json', **opts): + """ + Perform the GET request to retrieve the embedded media data from the given + API endpoint for the given URL. Return the result as a Python dictionary. + + format specifies the response format, and should be 'json' or 'xml'. + opts are any additional GET options that should be present in the GET + request. + + """ + opts['url'] = url + opts['format'] = format + api_url = "%s?%s" % (api_endpoint, urllib.urlencode(opts)) + + headers = { + 'User-Agent': USER_AGENT, + 'Accept-Encoding': 'gzip', + } + request = urllib2.Request(api_url, headers=headers) + + opener = urllib2.build_opener() + f = opener.open(request) + headers = f.info() + result = f.read() + f.close() + + if headers.get('content-encoding') == 'gzip': + f = gzip.GzipFile(fileobj=StringIO(result)) + result = f.read() + f.close() + + return json.loads(result) + +if __name__ == "__main__": + try: + print get_oembed("http://www.youtube.com/oembed", + "http://www.youtube.com/watch?v=7_IMzJldOf4") + except urllib2.HTTPError, e: + print e