tools/getFreeXmppServices.py
author Da Risk <da_risk@beem-project.com>
Mon, 08 Oct 2012 21:29:03 +0200
changeset 999 07b9c3efb14c
parent 995 6318bee856fd
child 1004 aa8c2dac6d02
permissions -rwxr-xr-x
fix a little bug : avatar image view not reloading
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
995
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     1
#!/usr/bin/env python3
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     2
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     3
import urllib.request
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     4
import argparse, sys
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     5
from xml.dom.minidom import parse, getDOMImplementation
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     6
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     7
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     8
def getJidsFromUrl(url):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
     9
    f = urllib.request.urlopen(url)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    10
    indoc = parse(f)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    11
    jids = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    12
    query = indoc.documentElement
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    13
    if query.localName == "query" :
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    14
        for item in query.getElementsByTagName("item"):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    15
            jid = item.getAttribute("jid")
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    16
            jids.append(jid)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    17
    return jids
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    18
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    19
def createDocument():
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    20
    impl = getDOMImplementation()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    21
    return impl.createDocument(None, "resources", None)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    22
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    23
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    24
def purge(elems):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    25
    res = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    26
    for i in elems:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    27
        if i not in res:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    28
            res.append(i)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    29
    return res
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    30
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    31
def appendStringElem(doc, node, jids):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    32
    for i in jids:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    33
        item = doc.createElement("item")
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    34
        text = doc.createTextNode(i)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    35
        item.appendChild(text)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    36
        node.appendChild(item)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    37
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    38
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    39
parser = argparse.ArgumentParser(description='Collect some free xmpp services')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    40
parser.add_argument('url', metavar="url",
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    41
        default=['http://xmpp.net/services.xml', "https://list.jabber.at/api/?format=services.xml"] , nargs='*',
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    42
        help='url to get the services')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    43
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    44
parser.add_argument('-o', metavar="FILE", type=argparse.FileType('bw'),
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    45
        default = sys.stdout.buffer,
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    46
        help='send output to FILE')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    47
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    48
args = parser.parse_args()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    49
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    50
# collect the servers jid
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    51
jids = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    52
for url in args.url:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    53
    jids += getJidsFromUrl(url)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    54
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    55
jids = purge(jids)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    56
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    57
# create the xml output document
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    58
outdoc = createDocument()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    59
res_element = outdoc.documentElement
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    60
string_array_elem = outdoc.createElement('string-array')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    61
res_element.appendChild(string_array_elem)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    62
string_array_elem.setAttribute("name", "xmpp_server_list")
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    63
appendStringElem(outdoc, string_array_elem, jids)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    64
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    65
# print result
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    66
f = args.o
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    67
f.write(outdoc.toprettyxml(encoding="utf-8"))
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    68