translate - sweb - Some web helper scripts.
 (HTM) git clone git://r-36.net/sweb
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       translate (2792B)
       ---
            1 #!/usr/bin/env python2
            2 # See the LICENSE file for copyright and license details.
            3 
            4 import urllib2
            5 import urllib
            6 import os
            7 import sys
            8 import json
            9 import getopt
           10 import requests
           11 from lxml import etree
           12 
           13 def prlangs(name, l, short=False):
           14         keys = l.keys()
           15         keys.sort()
           16 
           17         if short == True:
           18                 sys.stdout.write("%s %s\n" % (name,
           19                         ", ".join(keys)))
           20         else:
           21                 print name
           22                 for k in keys:
           23                         print "%s: %s" % (k.rjust(10), l[k])
           24 
           25 def getoptions(sel):
           26         langs = {}
           27 
           28         opts = sel.xpath("//option")
           29         for i in opts:
           30                 val = i.attrib["value"]
           31                 if val != "separator":
           32                         langs[val] = i.text
           33         
           34         return langs
           35 
           36 def getlanglist():
           37         headers = {"User-Agent":  "Mozilla/5.0 (X11; U; Linux x86_64; "
           38                 "en-US; "
           39                 "rv:1.9.2.7) Gecko/20100721 Firefox/3.6.7"}
           40         req = urllib2.Request("http://translate.google.com", 
           41                         headers=headers)
           42         opener = urllib2.build_opener()
           43         parser = etree.HTMLParser()
           44 
           45         fd = opener.open(req)
           46         xml = etree.parse(fd, parser)
           47 
           48         sels = xml.xpath("//select")
           49         flangs = getoptions(sels[0])
           50         tlangs = getoptions(sels[1])
           51 
           52         return (flangs, tlangs)
           53 
           54 def dotranslate(tfrom, tto, text):
           55         data = urllib.urlencode({ 'sl': tfrom, 'tl': tto, 'text': text })
           56         headers = {"User-Agent":  "Mozilla/5.0 (X11; U; Linux x86_64; "
           57                 "en-US; "
           58                 "rv:1.9.2.7) Gecko/20100721 Firefox/3.6.7"}
           59         req = urllib2.Request("http://translate.google.com", data,
           60                         headers)
           61         opener = urllib2.build_opener()
           62         parser = etree.HTMLParser()
           63 
           64         fd = opener.open(req)
           65         xml = etree.parse(fd, parser)
           66 
           67         sels = xml.xpath("//span[@id=\"result_box\"]/span")
           68         return "\n".join([" ".join(i.itertext()) for i in sels])
           69 
           70 def usage(app):
           71         app = os.path.basename(app)
           72         sys.stderr.write("usage: %s [-h] [-f from] [-t to] [[-s] -l|[from to] text]\n" % (app))
           73         sys.exit(1)
           74 
           75 def main(args):
           76         try:
           77                 opts, largs = getopt.getopt(args[1:], "hslf:t:")
           78         except getopt.GetoptError, err:
           79                 print str(err)
           80                 usage(args[0])
           81         
           82         dolist = False
           83         doshort = True
           84         tfrom = "auto" 
           85         tto = None
           86         for o, a in opts:
           87                 if o == "-h":
           88                         usage(args[0])
           89                 elif o == "-l":
           90                         dolist = True
           91                 elif o == "-s":
           92                         doshort = False
           93                 elif o == "-f":
           94                         tfrom = a
           95                 elif o == "-t":
           96                         tto = a
           97                 else:
           98                         assert False, "unhandled option"
           99 
          100         if dolist == True:
          101                 (flang, tlang) = getlanglist()
          102 
          103                 prlangs("FROM:", flang, doshort)
          104                 print
          105                 prlangs("TO:", tlang, doshort)
          106 
          107                 return 0
          108 
          109         if tto == None:
          110                 if len(largs) < 1:
          111                         usage(args[0])
          112                 elif len(largs) < 2:
          113                         tto = largs[0]
          114                         text = sys.stdin.read()
          115                 elif len(largs) < 3:
          116                         tfrom = largs[0]
          117                         tto = largs[1]
          118                         text = sys.stdin.read()
          119                 else:
          120                         tfrom = largs[0]
          121                         tto = largs[1]
          122                         text = ' '.join(largs[2:])
          123         else:
          124                 if len(largs) < 1:
          125                         text = sys.stdin.read()
          126                 else:
          127                         text = ' '.join(largs)
          128 
          129         result = dotranslate(tfrom, tto, text)
          130         print result
          131 
          132         return 0
          133 
          134 if __name__ == "__main__":
          135         sys.exit(main(sys.argv))
          136