--- a/youtube-watch/watch.py Thu Sep 25 14:35:55 2014 +0900
+++ b/youtube-watch/watch.py Fri Sep 26 14:35:43 2014 +0900
from argparse import ArgumentParser, FileType
from calendar import timegm
-def formatter(template, limit, entries):
+def prepare_entries(entries, limit=None):
entries = sorted(entries, key=itemgetter('published_parsed'))
entries = entries[-limit:]
+def formatter(template, entries):
entry['link'] = entry['link'].replace('&feature=youtube_gdata', '')
entry['published_nice'] = strftime('%Y-%m-%d %H:%M:%S', localtime(timegm(entry['published_parsed'])))
+ subprocess.call(['cclive', '--continue', '--timestamp', '--stream', 'best'] + [entry['link'] for entry in entries])
+ return entry['id'].rpartition(':')[2]
parser = ArgumentParser()
parser.add_argument('-U', '--user', action='append', dest='users', help='author of uploads', metavar='USER [+]')
parser.add_argument('-l', '--limit', type=int, help='limit number of initial videos')
parser.add_argument('-f', '--follow', action='store_true', help='continuous mode')
parser.add_argument('-d', '--delay', type=int, help='delay for continuous mode', default=60)
+ parser.add_argument('-D', '--download', action='store_true', help='download each video')
args = parser.parse_args()
template = get_template(args.template)
users += args.input_file.read().splitlines()
entries = fetch_entries(users)
+ earlier = {identify(entry) for entry in entries}
+ entries = prepare_entries(entries, args.limit)
- formatter(template, args.limit, entries)
+ formatter(template, entries)
- if earlier is not None:
- new_entries = [entry for entry in entries if entry['published_parsed'] > earlier]
- formatter(template, None, new_entries)
- earlier = max([entry['published_parsed'] for entry in entries])
entries = fetch_entries(users, args.delay)
+ new_entries = [entry for entry in entries if identify(entry) not in earlier]
+ earlier |= {identify(entry) for entry in new_entries}
+ new_entries = prepare_entries(new_entries)
+ formatter(template, new_entries)
except KeyboardInterrupt: