annotate gpp/oembed/core.py @ 318:c550933ff5b6

Fix a bug where you'd get an error when trying to delete a forum thread (topic does not exist). Apparently when you call topic.delete() the posts would get deleted, but the signal handler for each one would run, and it would try to update the topic's post count or something, but the topic was gone? Reworked the code a bit and explicitly delete the posts first. I also added a sync() call on the parent forum since post counts were not getting adjusted.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 Feb 2011 21:46:52 +0000
parents 8fd4984d5c3b
children 6d6fdc58487c
rev   line source
bgneal@285 1 """
bgneal@285 2 This module contains core functionality for the oembed application.
bgneal@285 3 """
bgneal@285 4 from __future__ import with_statement
bgneal@285 5 import urllib
bgneal@285 6 import urllib2
bgneal@285 7 import gzip
bgneal@285 8 try:
bgneal@285 9 from cStringIO import StringIO
bgneal@285 10 except ImportError:
bgneal@285 11 from StringIO import StringIO
bgneal@285 12
bgneal@285 13 import django.utils.simplejson as json
bgneal@285 14
bgneal@285 15
bgneal@285 16 USER_AGENT = 'gremmies python oembed'
bgneal@285 17
bgneal@285 18
bgneal@285 19 def get_oembed(api_endpoint, url, format='json', **opts):
bgneal@285 20 """
bgneal@285 21 Perform the GET request to retrieve the embedded media data from the given
bgneal@285 22 API endpoint for the given URL. Return the result as a Python dictionary.
bgneal@285 23
bgneal@285 24 format specifies the response format, and should be 'json' or 'xml'.
bgneal@285 25 opts are any additional GET options that should be present in the GET
bgneal@285 26 request.
bgneal@285 27
bgneal@285 28 """
bgneal@285 29 opts['url'] = url
bgneal@285 30 opts['format'] = format
bgneal@285 31 api_url = "%s?%s" % (api_endpoint, urllib.urlencode(opts))
bgneal@285 32
bgneal@285 33 headers = {
bgneal@285 34 'User-Agent': USER_AGENT,
bgneal@285 35 'Accept-Encoding': 'gzip',
bgneal@285 36 }
bgneal@285 37 request = urllib2.Request(api_url, headers=headers)
bgneal@285 38
bgneal@285 39 opener = urllib2.build_opener()
bgneal@285 40 f = opener.open(request)
bgneal@285 41 headers = f.info()
bgneal@285 42 result = f.read()
bgneal@285 43 f.close()
bgneal@285 44
bgneal@285 45 if headers.get('content-encoding') == 'gzip':
bgneal@285 46 with gzip.GzipFile(fileobj=StringIO(result)) as f:
bgneal@285 47 result = f.read()
bgneal@285 48
bgneal@285 49 return json.loads(result)
bgneal@285 50
bgneal@285 51 if __name__ == "__main__":
bgneal@285 52 try:
bgneal@285 53 print get_oembed("http://www.youtube.com/oembed",
bgneal@285 54 #"http://www.youtube.com/watch?v=7_IMzJldOf4")
bgneal@285 55 "http://www.youtube.com/watch?v=99999999999")
bgneal@285 56 except urllib2.HTTPError, e:
bgneal@285 57 print e