X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=blobdiff_plain;f=commands.py;h=eec69e7f416dd0d085f60e8b08dda26e1ae3b57b;hb=d8ac6968378475b0946a0602ea0e4f78f3a94d59;hp=512b4f7e3a0a634741ffd21ec955cfb642e7d311;hpb=532656ca33d5309407b1c7c003a666dc0788258b;p=irc.git diff --git a/commands.py b/commands.py index 512b4f7..eec69e7 100755 --- a/commands.py +++ b/commands.py @@ -2,6 +2,7 @@ import string, cPickle, random, urllib, sys, time, re, os, twitter, subprocess, datetime, urlparse, hashlib from collections import defaultdict from irclib import irc_lower, nm_to_n +import json try: from blame_filter import bfd @@ -572,11 +573,37 @@ def getTweet(urlstring,twitapi,inclusion=False,recurlvl=0): tweetText = status.full_text if status.media: replacements = defaultdict(list) + for medium in status.media: replacements[medium.url].append(medium.media_url_https) + # The twitter-api 'conveniently' parses this for you and + # throws away the actual video URLs, so we have to take the + # JSON and reparse it :sadpanda: + # This is particularly annoying because we don't know + # for sure that status.media and the JSON 'media' entry + # have the same elements in the same order. Probably they + # do but maybe twitter-api randomly reorganised things or + # filtered the list or something. So instead we go through + # the JSON and handle the media urls, discarding whatever + # unfortunate thing we have put in replacements already. + parsed_tweet = json.loads(status.AsJsonString()) + for medium in parsed_tweet.get('media', []): + if medium['type'] == 'video': + best = { 'bitrate': -1 } + for vt in medium['video_info']['variants']: + if (vt.get('content_type') == 'video/mp4' and + vt.get('bitrate', -1) > best['bitrate']): + best = vt + if 'url' in best: + video_url = best['url'].split('?',1)[0] + duration = medium['video_info']['duration_millis'] + # ^ duration_millis is a string + duration = "%.1f" % (float(duration)/1000.) + video_desc = "%s (%ss)" % (video_url, duration) + replacements[medium['url']] = [video_desc] + for k,v in replacements.items(): - v = [re.sub(r"/tweet_video_thumb/([\w\-]+).jpg", r"/tweet_video/\1.mp4", link) for link in v] if len(v) > 1: replacementstring = "[" + " ; ".join(v) +"]" else: