|
Hans Ulrich Niedermann |
edb9351 |
#!/usr/bin/python
|
|
Hans Ulrich Niedermann |
ef82408 |
#
|
|
Hans Ulrich Niedermann |
ef82408 |
# Download the latest gpsbabel source tarball by simulating a browser
|
|
Hans Ulrich Niedermann |
ef82408 |
# visit and a HTTP POST form submission (there is no other way to
|
|
Hans Ulrich Niedermann |
ef82408 |
# download those files).
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
import re
|
|
Hans Ulrich Niedermann |
edb9351 |
import urllib2
|
|
Hans Ulrich Niedermann |
edb9351 |
import subprocess
|
|
Hans Ulrich Niedermann |
edb9351 |
from BeautifulSoup import BeautifulSoup
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
download_url = "http://www.gpsbabel.org/download.html"
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
print "Loading HTML page", download_url
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
page = urllib2.urlopen(download_url)
|
|
Hans Ulrich Niedermann |
edb9351 |
# print "page:", page
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
soup = BeautifulSoup(page)
|
|
Hans Ulrich Niedermann |
edb9351 |
# print "soup:", soup
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
rexp = re.compile('\.tar\.gz$')
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
def test_tag(tag):
|
|
Hans Ulrich Niedermann |
edb9351 |
if tag.name != 'form': return False
|
|
Hans Ulrich Niedermann |
edb9351 |
if tag['action'] != 'plan9.php': return False
|
|
Hans Ulrich Niedermann |
edb9351 |
if tag['method'] != 'post': return False
|
|
Hans Ulrich Niedermann |
edb9351 |
if tag['enctype'] != 'multipart/form-data': return False
|
|
Hans Ulrich Niedermann |
edb9351 |
found = tag.find('input', value=rexp)
|
|
Hans Ulrich Niedermann |
edb9351 |
return found
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
tarball_form = soup.find(test_tag)
|
|
Hans Ulrich Niedermann |
edb9351 |
form_inputs = tarball_form.findAll('input')
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
d = dict([ (input['name'], input['value']) for input in form_inputs ])
|
|
Hans Ulrich Niedermann |
edb9351 |
# print d
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
tarball = d[u'dl']
|
|
Hans Ulrich Niedermann |
edb9351 |
token = d[u'token']
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
# print "tarball:", tarball
|
|
Hans Ulrich Niedermann |
edb9351 |
# print "token:", token
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
ef82408 |
# Python has no library functions which handle 'multipart/form-data'
|
|
Hans Ulrich Niedermann |
ef82408 |
# encoding, and the pycurl interface is non-trivial, so we just run
|
|
Hans Ulrich Niedermann |
ef82408 |
# the 'curl' program as a separate process.
|
|
Hans Ulrich Niedermann |
edb9351 |
cmd = [ 'curl',
|
|
Hans Ulrich Niedermann |
edb9351 |
'-F', "=".join(['dl', tarball]),
|
|
Hans Ulrich Niedermann |
edb9351 |
'-F', "=".join(['token', token]),
|
|
Hans Ulrich Niedermann |
edb9351 |
'-e', download_url,
|
|
Hans Ulrich Niedermann |
edb9351 |
'http://www.gpsbabel.org/plan9.php',
|
|
Hans Ulrich Niedermann |
edb9351 |
'-o', tarball ]
|
|
Hans Ulrich Niedermann |
edb9351 |
# print "Command:", cmd
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
print "Running curl to get tarball via HTTP POST:", tarball
|
|
Hans Ulrich Niedermann |
edb9351 |
retcode = subprocess.call(cmd, shell=False)
|
|
Hans Ulrich Niedermann |
edb9351 |
|
|
Hans Ulrich Niedermann |
edb9351 |
if retcode == 0:
|
|
Hans Ulrich Niedermann |
edb9351 |
print "Successfully downloaded tarball:", tarball
|
|
Hans Ulrich Niedermann |
edb9351 |
else:
|
|
Hans Ulrich Niedermann |
edb9351 |
print "Error downloading tarball (%d):" % retcode, tarball
|