2010-10-26 73 views
1

我想創建一個簡單的應用程序來檢測短語的語言(使用Google API)並將其發送到對應的搜索引擎。例如,如果搜索查詢是俄語,那麼我需要將其重新定向到Yandex.ru,在所有其他情況下,將其轉到Google。語言特定的重定向

這就是我如何做到這一點:

def get(self):                   
    decoded = unicode(unquote(self.request.query), "windows-1251") 
    text = decoded.encode("utf-8")    
    url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="+ quote(text) 

    try: 
     data = json.loads(urllib2.urlopen(url).read())         
     redirectUrl = "http://www.google.com/search?q=" + text       
     if data["responseData"]["language"] == 'ru': 
      redirectUrl = "http://yandex.ru/yandsearch?text=" + text   
     self.redirect(redirectUrl)               
    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]) 

當我請求此網址「http://findinrightplace.appspot.com/q?test查詢」重定向到谷歌,但重定向到Yandex的不起作用(http://findinrightplace.appspot.com/q?тестовыйзапрос)。

我做錯了什麼?

+0

你可以嘗試使用像Firebug或Chrome的開發人員控制檯的工具來查看是否服務器返回重定向HTTP標頭。如果確實如此,那麼確定瀏覽器忽略頭部的原因是一個問題。 – 2010-10-26 11:24:13

+0

它返回狀態碼302.我相信編碼有問題。 – 2010-10-26 11:39:06

回答

0

你假設查詢字符串將被windows-1251編碼是不正確的。在你給出的鏈接中,由網頁瀏覽器決定如何對它進行編碼(因爲HTTP對URL的編碼應該是什麼也沒有說明)。但是,今天,大多數瀏覽器會認爲URL必須以UTF-8編碼。由於語言/檢測也假定查詢字符串是UTF-8編碼的(並且URL轉義),所以根本不需要取消引用或解碼字符串。另外,yandex支持UTF-8編碼查詢字符串。所以把這一切放在一起:嘗試

def get(self):                   
    text = self.request.query 
    url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=" + text 

    try: 
     data = json.loads(urllib2.urlopen(url).read())         
     redirectUrl = "http://www.google.com/search?q=" + text       
     if data["responseData"]["language"] == 'ru': 
      redirectUrl = "http://yandex.ru/yandsearch?text=" + text   
     self.redirect(redirectUrl)               
    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]) 
0

我建議使用谷歌Prediction API進行[http://code.google.com/apis/predict/。你會注意到,主頁上的例子正是你想要做的。

+0

我不明白這可以幫助我。 Google語言檢測對我來說已經足夠了。我只需要了解爲什麼重定向到Yandex不起作用。 – 2010-10-28 07:22:05

0

建設redirectUrl當你不引用text。嘗試:

... 
    redirectUrl = "http://www.google.com/search?q=" + quote(text) 
    if data["responseData"]["language"] == 'ru': 
     redirectUrl = "http://yandex.ru/yandsearch?text=" + quote(text) 
    ... 
1

您需要從url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="+ quote(text)除去報價(),其返回爲您查詢俄羅斯壞的結果。

我在Python的外殼測試你的代碼,它的工作中沒有報價(),但沒有用引號工作()。