1

アプリでGoogle Language Detection APIを使用して、url パラメーターの言語を検出したいと考えています。たとえば、ユーザーが URL を要求する

http://myapp.com/q ?Это тест

「ロシア語」というメッセージを取得します。私はこのようにします:

def get(self):                                            
        url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="+self.request.query                        
        try:
            data = json.loads(urllib2.urlopen(url).read())                
            self.response.out.write('<html><body>' + data["responseData"]["language"] +'</body></html>')                                  
        except urllib2.HTTPError, e:
            self.response.out.write( "HTTP error: %d" % e.code )
        except urllib2.URLError, e:
            self.response.out.write( "Network error: %s" % e.reason.args[1])

URLがエンコードされているため、結果として常に「英語」を取得します

http://myapp.com/q?%DD%F2%EE%20%F2%E5%F1%F2

私は urllib.quote , urllib.urlencode運がないことを試みました。

この URL を Google API 用にデコードするにはどうすればよいですか?

4

1 に答える 1

3

多分urllib.unquoteあなたが探しているものです:

>>> from urllib import unquote
>>> unquote("%DD%F2%EE%20%F2%E5%F1%F2")

これにより、文字が URL で使用したエンコーディングである文字列が得られます。別のエンコーディング (UTF-8 など) に再コード化したい場合は、unicode最初にオブジェクトを作成してから、オブジェクトのencodeメソッドを使用して再コード化する必要がありunicodeます。

>>> from urllib import unquote, quote
>>> import json, urllib2, pprint
>>> decoded = unicode(unquote("%DD%F2%EE%20%F2%E5%F1%F2"), "windows-1251")
>>> print decoded
Это тест
>>> recoded = decoded.encode("utf-8")

この時点で、UTF-8 でエンコードされた文字列がありますが、これはまだ Google Language Detection API に渡すのに適していません。

>>> recoded
'\xd0\xad\xd1\x82\xd0\xbe \xd1\x82\xd0\xb5\xd1\x81\xd1\x82'

この文字列をクエリ引数として URL に含めたいので、次を使用してエンコードする必要がありますurllib.quote

>>> url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=%s" % quote(recoded)
>>> data = json.loads(urllib2.urlopen(url).read())
>>> pprint.pprint(data)
{u'responseData': {u'confidence': 0.094033934,
                   u'isReliable': False,
                   u'language': u'ru'},
 u'responseDetails': None,
 u'responseStatus': 200}
于 2010-10-12T12:51:19.677 に答える