Permalink
Switch branches/tags
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 119 lines (104 sloc) 3.66 KB
#!/usr/bin/env python2
from subprocess import CalledProcessError
try:
from subprocess import check_output
except ImportError:
import subprocess
def check_output(*popenargs, **kwargs):
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
error = subprocess.CalledProcessError(retcode, cmd)
error.output = output
raise error
return output
import urllib
import json
import sys
import os
import ConfigParser
import argparse
#######################
# Constants
FPURL = "https://www.filepicker.io"
FPAPIURL = "https://developers.filepicker.io"
CONFIG_FILE = os.path.expanduser('~/.geturl')
#######################
# Loading Config
APIKEY = ""
config = ConfigParser.ConfigParser()
config.read(CONFIG_FILE)
if config.has_option('filepicker', 'apikey'):
APIKEY = config.get('filepicker', 'apikey')
#######################
# Make sure we have curl
try:
check_output('curl --help > /dev/null', shell=True)
except CalledProcessError:
exit("`curl` is required. Please install it")
#######################
# Find or register for an Filepicker.io account
if not APIKEY:
email = ''
while not email:
email = raw_input('Enter your email to link or create your filepicker.io acccount: ')
# pretty sure this isn't public. found it by looking at the jotform integration
APIKEY = check_output(['curl', '--silent', "%(fpurl)s/getKey?email=%(email)s" % {'fpurl': FPAPIURL, 'email': email}])
if not config.has_section('filepicker'):
config.add_section('filepicker')
config.set('filepicker', 'apikey', APIKEY)
config.write(open(CONFIG_FILE, 'w+'))
#######################
# parse args and print usage
parser = argparse.ArgumentParser(
prog='geturl',
description='upload a file or multiple files to filepicker.io and copy address to clipboard',
)
parser.add_argument('file', default=[], nargs='+', help='file or files to create a public link for')
args = parser.parse_args()
files = args.file
urls = []
#######################
# Upload the file(s)
print
for file in files:
print "Uploading %s to Filepicker.io..." % file
escapedname = '\\"%s\\"' % file.replace('"', '\\\\\\"')
output = check_output('curl --progress-bar -F "fileUpload=@%(filename)s" -F "apikey=%(apikey)s" %(fpurl)s/api/path/storage/%(fileurl)s' %
{"filename": escapedname, "apikey": APIKEY, "fpurl": FPURL, "fileurl": urllib.pathname2url(file)}, shell=True)
try:
data = json.loads(output)
url = data['data'][0]['url']
urls.append(url)
except (ValueError, IndexError):
print "***ERROR***"
print output
print
print
for file, url in zip(files, urls):
print "A Public Share URL for: %s" % file
print url
print
#######################
# Copy to the clipboard
if len(files) == 1:
try:
if sys.platform == 'darwin':
check_output('echo "%s" | pbcopy' % (url), shell=True)
print "Also in your clipboard"
elif sys.platform == 'linux2':
try:
check_output('echo "%s" | xclip -selection clipboard > /dev/null 2>&1' % (url), shell=True)
print "Also in your clipboard"
except CalledProcessError:
try:
check_output('echo "%s" | xsel -b -i > /dev/null 2>&1' % (url), shell=True)
print "Also in your clipboard"
except CalledProcessError:
pass
except Exception:
pass