Язык перенаправления - PullRequest
1 голос
/ 26 октября 2010

Я хочу создать простое приложение, которое определяет язык (используя 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])

Когда я запрашиваюэтот URL "http://findinrightplace.appspot.com/q?test запрос" он перенаправляет на Google, но перенаправление на яндекс не работает (http://findinrightplace.appspot.com/q?тестовый запрос).

Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 31 октября 2010

Вам нужно удалить quote () из url = "http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q="+ quote(text), это возвращает неверный результат для вашего русского запроса.

Я протестировал ваш код в моей локальной оболочке python, и он работал без quote (), но не работал с quote ().

0 голосов
/ 31 октября 2010

Вы ошибаетесь, полагая, что строка запроса будет закодирована в windows-1251. В ссылке, которую вы даете, веб-браузер сам решает, как ее кодировать (поскольку HTTP также ничего не говорит о том, какой должна быть кодировка URL). Однако сегодня большинство браузеров предполагают, что URL-адрес должен быть закодирован в UTF-8. Так как language / detect также предполагает, что строка запроса имеет кодировку UTF-8 (и URL экранирован), вам не нужно ни заключать в кавычки, ни декодировать строку вообще. Кроме того, яндекс прекрасно поддерживает строки запросов в кодировке 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 голосов
/ 30 октября 2010

Вы не цитируете text при сборке redirectUrl.Попробуйте:

  ...
  redirectUrl = "http://www.google.com/search?q=" + quote(text)
  if data["responseData"]["language"] == 'ru':
      redirectUrl = "http://yandex.ru/yandsearch?text=" + quote(text)
  ...
0 голосов
/ 28 октября 2010

Я предлагаю использовать Google Prediction API [http://code.google.com/apis/predict/].. Вы заметите, что пример на главной странице именно то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...