python/migreme.py

10 months ago

author
Rafael G. Martins <rafael@rafaelmartins.eng.br>
date
Fri Oct 16 20:10:52 2009 -0300
changeset 0
0506383cceff
permissions
-rw-r--r--

added python/migreme.py

     1 #!/usr/bin/env python
     2 #
     3 #       migreme.py
     4 #       
     5 #       Copyright 2009 Rafael G. Martins <rafael@rafaelmartins.eng.br>
     6 #       
     7 #       Redistribution and use in source and binary forms, with or without
     8 #       modification, are permitted provided that the following conditions are
     9 #       met:
    10 #       
    11 #       * Redistributions of source code must retain the above copyright
    12 #         notice, this list of conditions and the following disclaimer.
    13 #       * Redistributions in binary form must reproduce the above
    14 #         copyright notice, this list of conditions and the following disclaimer
    15 #         in the documentation and/or other materials provided with the
    16 #         distribution.
    17 #       * Neither the name of the Rafael G. Martins nor the names of its
    18 #         contributors may be used to endorse or promote products derived from
    19 #         this software without specific prior written permission.
    20 #       
    21 #       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    22 #       "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    23 #       LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    24 #       A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    25 #       OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    26 #       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    27 #       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    28 #       DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    29 #       THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    30 #       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    31 #       OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    33 from urllib2 import urlopen
    34 from xml.dom.minidom import parse as parseXml
    36 class MigremeError(Exception):
    37     pass
    39 def migreme(url):
    40     try:
    41         fp = urlopen('http://migre.me/api.xml?url=%s' % url)
    42         myxml = parseXml(fp)
    43         fp.close()
    44     except:
    45         raise MigremeError('Failed to contact migre.me')
    46     n_err = int(myxml.getElementsByTagName('error')[0].childNodes[0].data)
    47     if n_err != 0:
    48         error = myxml.getElementsByTagName('errormessage')[0].childNodes[0].data
    49         raise MigremeError('Error: %s' % error)
    50     return str(myxml.getElementsByTagName('migre')[0].childNodes[0].data)
    52 def main():
    53     from sys import argv, stderr
    54     if len(argv) == 2:
    55         try:
    56             print 'Shortened url:', migreme(argv[1])
    57         except MigremeError, error:
    58             print >> stderr, error
    59     else:
    60         print """
    61 Simple "Migre.Me" URL shortener
    63     Usage: %s <url>
    64 """ % argv[0]
    66 if __name__ == '__main__':
    67     main()

mercurial