#!/bin/python
import urllib.requestimport xml.etree.ElementTree as xml_parser
repo_url = "https://dl.google.com/android/repository/repository2-1.xml"html_title = "Android SDK Packages"
def download(url): response = "" retries = 10 while not response: try: with urllib.request.urlopen(url) as f: if f.status != 200: continue response = str(f.read(), "utf8") break except: if retries > 0: time.sleep(0.5) retries -= 1 else: return None
return response
def extract_file_list(repo_xml): root = xml_parser.fromstring(repo_xml) filenames = []
for pack in root.findall("remotePackage"): archives = pack.find("archives") if archives is None: continue
for a in archives.findall("archive"): url = a.find("complete/url") if url is None: continue
fname = url.text first_dot = fname.find(".") if first_dot < 0: continue
if first_dot > 32: starts_with_hash = True for i in range(first_dot): c = ord(fname[i]) if (c < 0x30 or c > 0x39) and (c < 0x41 or c > 0x46) and (c < 0x61 or c > 0x66): starts_with_hash = False break if starts_with_hash: fname = fname[first_dot+1:]
filenames.append(fname)
return filenames
def main(): repo_xml = download(repo_url) if not repo_xml: print("Failed to get " + repo_url) return
sdk_filenames = extract_file_list(repo_xml)
html = """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{0}</title> </head> <body> <h1>{0}</h1> <ul>\n""".format(html_title)
for fname in sdk_filenames: html += "<li><a href=\"https://dl.google.com/android/repository/" + fname + "\">" + fname + "</a></li>\n"
html += "</ul>\n</body>\n</html>" with open("sdk-package-list.html", "w") as f: f.write(html)
main()