Mercurial > public > sg101
diff gpp/oembed/core.py @ 285:8fd4984d5c3b
This is a first rough commit for #95, adding the ability to embed YouTube videos in forum posts. Some more polish and testing needs to happen at this point. I wanted to get all these changes off my hard drive and into the repository.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 14 Oct 2010 02:39:35 +0000 |
parents | |
children | 6d6fdc58487c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/oembed/core.py Thu Oct 14 02:39:35 2010 +0000 @@ -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': + with gzip.GzipFile(fileobj=StringIO(result)) as f: + result = f.read() + + return json.loads(result) + +if __name__ == "__main__": + try: + print get_oembed("http://www.youtube.com/oembed", + #"http://www.youtube.com/watch?v=7_IMzJldOf4") + "http://www.youtube.com/watch?v=99999999999") + except urllib2.HTTPError, e: + print e