tools/getFreeXmppServices.py
author Da Risk <da_risk@beem-project.com>
Thu, 21 Dec 2017 15:56:42 -0800
changeset 1073 274f38e8c8a9
parent 1004 aa8c2dac6d02
permissions -rwxr-xr-x
Compile with sdk 27
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
1004
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     2
## BEEM is a videoconference application on the Android Platform.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     3
## Copyright (C) 2009-2012 by Frederic-Charles Barthelery,
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     4
##			   Nikita Kozlov,
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     5
##			   Vincent Veronis.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     6
##
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     7
## This file is part of BEEM.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     8
##
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
     9
## BEEM is free software: you can redistribute it and/or modify
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    10
## it under the terms of the GNU General Public License as published by
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    11
## the Free Software Foundation, either version 3 of the License, or
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    12
## (at your option) any later version.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    13
##
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    14
## BEEM is distributed in the hope that it will be useful,
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    15
## but WITHOUT ANY WARRANTY; without even the implied warranty of
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    16
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    17
## GNU General Public License for more details.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    18
##
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    19
## You should have received a copy of the GNU General Public License
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    20
## along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    21
##
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    22
## Please send bug reports with examples or suggestions to
aa8c2dac6d02 Add licence header to getFreeXmppServices.py
Da Risk <da_risk@beem-project.com>
parents: 995
diff changeset
    23
## contact@beem-project.com or http://www.beem-project.com/
995
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    24
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    25
import urllib.request
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    26
import argparse, sys
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    27
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
    28
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    29
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    30
def getJidsFromUrl(url):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    31
    f = urllib.request.urlopen(url)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    32
    indoc = parse(f)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    33
    jids = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    34
    query = indoc.documentElement
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    35
    if query.localName == "query" :
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    36
        for item in query.getElementsByTagName("item"):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    37
            jid = item.getAttribute("jid")
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    38
            jids.append(jid)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    39
    return jids
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    40
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    41
def createDocument():
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    42
    impl = getDOMImplementation()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    43
    return impl.createDocument(None, "resources", None)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    44
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    45
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    46
def purge(elems):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    47
    res = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    48
    for i in elems:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    49
        if i not in res:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    50
            res.append(i)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    51
    return res
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    52
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    53
def appendStringElem(doc, node, jids):
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    54
    for i in jids:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    55
        item = doc.createElement("item")
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    56
        text = doc.createTextNode(i)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    57
        item.appendChild(text)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    58
        node.appendChild(item)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    59
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    60
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    61
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
    62
parser.add_argument('url', metavar="url",
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    63
        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
    64
        help='url to get the services')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    65
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    66
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
    67
        default = sys.stdout.buffer,
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    68
        help='send output to FILE')
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    69
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    70
args = parser.parse_args()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    71
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    72
# collect the servers jid
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    73
jids = []
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    74
for url in args.url:
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    75
    jids += getJidsFromUrl(url)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    76
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    77
jids = purge(jids)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    78
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    79
# create the xml output document
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    80
outdoc = createDocument()
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    81
res_element = outdoc.documentElement
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    82
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
    83
res_element.appendChild(string_array_elem)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    84
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
    85
appendStringElem(outdoc, string_array_elem, jids)
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    86
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    87
# print result
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    88
f = args.o
6318bee856fd Display error messages when account creation failed.
Da Risk <da_risk@beem-project.com>
parents:
diff changeset
    89
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
    90