X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?p=irc.git;a=blobdiff_plain;f=commands.py;h=5a7cc94cdac1165910175f136cb1959afb9bd09b;hp=d6ba5302dee49573d96ae9013fae6526a4c206a8;hb=refs%2Fheads%2Fmaster;hpb=f7846893b2318a67fe429d1e8bc79c012d2c78cb diff --git a/commands.py b/commands.py index d6ba530..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 @@ -333,7 +334,14 @@ def blameq(bot,cmd,nick,conn,public,fishpond,cfgs): cwhat=' '.join(clist[2:]) kindsfile = "fish?" if clist[1]=="#last": - try: lmsg, lcfg = fishpond.last[0] + try: + n = abs(int(clist[2]))-1 + if n < 0: raise ValueError + except IndexError: n = 0 + except ValueError: + bot.automsg(public,nick,"Huh?") + return + try: lmsg, lcfg = fishpond.last[n] except IndexError: bot.automsg(public,nick,"Nothing") return @@ -564,13 +572,38 @@ def getTweet(urlstring,twitapi,inclusion=False,recurlvl=0): tweeter_name = tweeter_name + " RTing " + status.user.name #.encode('UTF-8', 'replace') tweetText = status.full_text if status.media: - replacements = defaultdict( list ) + replacements = defaultdict(list) + for medium in status.media: replacements[medium.url].append(medium.media_url_https) - for k,v in replacements.items(): + # 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] - v = [re.sub(r"/tweet_video_thumb/([\w\-]+).jpg", r"/tweet_video/\1.mp4", link) for link in v] + for k,v in replacements.items(): if len(v) > 1: replacementstring = "[" + " ; ".join(v) +"]" else: