33
Revver Guerrilla Upload Client http://eagain.net/ [email protected]

Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Revver Guerrilla Upload Client

http://eagain.net/

[email protected]

Page 2: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Upload mechanisms

Page 3: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Java

Page 4: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

sucks

Page 5: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Flash

Page 6: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

sucks

Page 7: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

API

Page 8: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

ok

Page 9: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

XML­RPC

Page 10: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

easy

Page 11: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

HTTP POSTfile upload

Page 12: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

just get toit already..

Page 13: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Python

Page 14: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

stdlib

Page 15: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

curl

Page 16: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

http://developer.revver.com/

Page 17: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

155 lines

Page 18: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Let's see it

Page 19: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

#!/usr/bin/python"""Guerrilla command line video upload tool."""import optparse, getpass, urlparse, urllib, \ xmlrpclib, subprocess

def getParser(): parser = optparse.OptionParser( usage='%prog --title=TEXT –age-rating=NUM\ [OPTIONS] FILE..', description='Upload videos to Revver')

parser.set_defaults( api_url='https://api.revver.com/xml/1.0', upload_url='http://httpupload.revver.com/', login=getpass.getuser(), )

Page 20: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

# more getParser(), mandatory options

parser.add_option( '--login', help='login name to use (default: %s)' % parser.defaults['login'])

parser.add_option( '--passphrase-file', help='read passphrase from (prompt if not given)', metavar='FILE')

parser.add_option( '--age-rating', help='MPAA age rating (mandatory)', type='int')

Page 21: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

# more getParser(), mandatory options

parser.add_option( '--title', help='title for the video (mandatory)', metavar='TEXT')

parser.add_option( '--tag', help='tags (mandatory, repeat for more tags)', metavar='KEYWORD', action='append')

Page 22: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

# more getParser(), optional

parser.add_option('--author', help='author of the video', metavar='FULLNAME')

parser.add_option('--url', help='website for extra info')

parser.add_option('--credits', help='extra credits', metavar='TEXT')

parser.add_option('--summary', help='a brief description', metavar='TEXT')

Page 23: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

# more getParser(), dev stuff

parser.add_option('--api-url', help='API URL to contact\ (developers only)')

parser.add_option('--upload-url', help='Upload URL to send the file to \(developers only)')

parser.add_option('--upload-token', help='use preallocated token\ (developers only)', metavar='HEX', action='append')

return parser

Page 24: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

def getPassphrase(filename=None): if filename is not None: f = file(filename) passphrase = f.readline().rstrip('\n') f.close() else: passphrase = getpass.getpass( 'Passphrase for video upload: ')

return passphrase

Page 25: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

def getAPI(options): api = getattr(options, 'api', None) if api is None: passphrase = getPassphrase( filename=options.passphrase_file)

(scheme, netloc, path, query, fragment) = \ urlparse.urlsplit(options.api_url, allow_fragments=False) query = urllib.urlencode([ ('login', options.login), ('passwd', passphrase)]) url = urlparse.urlunsplit((scheme, netloc, path, query, fragment)) api = xmlrpclib.Server(url) options.api = api return api

Page 26: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

def getToken(api): url, tokens = api.video.getUploadTokens(1) assert len(tokens)==1 token = tokens[0] return url, token

Page 27: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

def createMedia(options, token): data = {} if options.credits is not None: data['credits'] = options.credits if options.url is not None: data['url'] = options.url if options.summary is not None: data['summary'] = options.summary if options.author is not None: data['author'] = options.author api = getAPI(options) media_id = api.video.create(token, options.title, options.tag, options.age_rating, data) return media_id

Page 28: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

def main(progname, args): parser = getParser() (options, args) = parser.parse_args()

if options.login is None: parser.error('You must pass --login=LOGIN') if options.title is None: parser.error('You must pass --title=TEXT') if not options.tag: parser.error('You must pass --tag=KEYWORD') if options.age_rating is None: parser.error('You must pass --age-rating=NUM') if not args: parser.error( 'Pass files to upload on command line')

Page 29: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

for filename in args: if options.upload_token: token = options.upload_token.pop(0) url = options.upload_url else: api = getAPI(options) url, token = getToken(api) print '%s: allocated token %s' % ( progname, token)

upload_url = urlparse.urljoin(url, token) retcode = subprocess.call([ 'curl', '-F', 'file=@%s' % filename, '--', upload_url, ])

Page 30: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

if retcode < 0: print >>sys.stderr, \ '%s: upload aborted by signal %d' % ( progname, -retcode) sys.exit(1)elif retcode > 0: print >>sys.stderr, \ '%s: upload failed with code %d' % ( progname, retcode) sys.exit(1)print '%s: used token %s for %s' % ( progname, token, filename)

media_id = createMedia(options, token)print '%s: created media %r from %r' % (progname, media_id, filename)

Page 31: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

if __name__ == '__main__': import sys main(progname=sys.argv[0], args=sys.argv[1:])

Page 32: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

[0 tv@musti ~]$ revver-upload-video \ --passphrase-file=/home/tv/.revver-password \ --age-rating=1 \ --title='Hot dogs at Grove' \ --tag=cute --tag=dog --tag=summer --tag=los-angeles \ --author='Tommi Virtanen' \ --url=http://eagain.net/ \ --summary='Chihuahuas panting on a hot summer day' \ 2006-08-19T14\:38\:04-0700.mpg

revver-upload-video: allocated token 00017acd029a69d666e4ecc03f4e0b89

revver-upload-video: used token 00017acd029a69d666e4ecc03f4e0b89 for 2006-08-19T14:38:04-0700.mpg

revver-upload-video: created media 96973 from 2006-08-19T14:38:04-0700.mpg

Page 33: Revver Guerrilla Upload Tool - eagain.neteagain.net/talks/guerrilla-upload/guerrilla-upload.pdf · #!/usr/bin/python""" Guerrilla command line video upload tool.""" import optparse,

Questions?This will all be on developer.revver.com soon

[email protected]://eagain.net/