LINUX.ORG.RU

google translate api


0

2

что-то не то я получаю посредством http-request'a от drakma:

TRANSLATER> (test "hello")
123:{   34:"   100:d   97:a   116:t   97:a   34:"   58::   123:{   34:"   116:t   114:r   97:a   110:n   115:s   108:l   97:a   116:t   105:i   111:o   110:n   115:s   34:"   58::   91:[   123:{   34:"   116:t   114:r   97:a   110:n   115:s   108:l   97:a   116:t   101:e   100:d   84:T   101:e   120:x   116:t   34:"   58::   34:"   208:Ð   191:¿   209:Ñ   128:€   208:Ð   184:¸   208:Ð   178:²   208:Ð   181:µ   209:Ñ   130:‚   34:"   125:}   93:]   125:}   125:}   
"{\"data\":{\"translations\":[{\"translatedText\":\"привет\"}]}}" 
((:DATA (:TRANSLATIONS ((:TRANSLATED-TEXT . "привет")))))
сам запрос

source-file:

(defun test (word)
  (let ((uri #U"https://www.googleapis.com/language/translate")
	(version "v2")
	(google-key "AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU")
	(lang-from "en")
	(lang-to "ru"))
    (let ((json-reply (http-request     
		       (format nil "~A/~A?key=~A&source=~A&target=~A&q=~A"
			       uri version google-key lang-from lang-to word))))
      (let ((json-string (bin-arr->string json-reply "{")))
	(decode-json-from-string json-string)))))

(defun bin-arr->string (arr &optional (start-str ""))
  (loop for code across arr 
     for str = start-str then (format nil "~a~a" str (code-char code))
     do (format t "~a:~a   " code (code-char code)) 
     finally (return (print str))))

А в вашем Цоммон Лиспе есть форма let*, или вы всегда вложенные let используете?

anonymous ()

а запрос вообще вызывает ошибку, которая намекает что о unicode можно забыть :( так ли это?

(http-request "https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=ru&target=en&q=привет")

#\CYRILLIC_SMALL_LETTER_PE (code 1087) is not a LATIN-1 character.
   [Condition of type FLEXI-STREAMS:EXTERNAL-FORMAT-ENCODING-ERROR]

Backtrace:
  0: (FLEXI-STREAMS::SIGNAL-ENCODING-ERROR #<FLEXI-STREAMS::FLEXI-LATIN-1-FORMAT (:ISO-8859-1 :EOL-STYLE :LF) {C68DDB9}> "~S (code ~A) is not a LATIN-1 character.")[:EXTERNAL]
      Locals:
        SB-DEBUG::ARG-0 = 4
        SB-DEBUG::ARG-1 = #<FLEXI-LATIN-1-FORMAT (:ISO-8859-1 :EOL-STYLE :LF) {C68DDB9}>
        SB-DEBUG::ARG-2 = ~S (code ~A) is not a LATIN-1 character.

pseudo-cat ★★★ ()
Ответ на: комментарий от pseudo-cat

wget

Вот так вот:
user@laptop:/tmp$ wget 'https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf...
--2011-01-02 02:42:38-- https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf...
Resolving www.googleapis.com... 74.125.79.95
Connecting to www.googleapis.com|74.125.79.95|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/json]
Saving to: `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello'

[ <=> ] 61 --.-K/s in 0s

2011-01-02 02:42:38 (1.32 MB/s) - `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello' saved [61]

user@laptop:/tmp$ cat ./v2\?key\=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU\&source\=en\&target\=ru\&q\=hello
{«data»:{«translations»:[{«translatedText»:«привет»}]}}

anonymous ()
Ответ на: wget от anonymous

utf-8

Совсем забыл:
user@laptop:/tmp$ echo $LANG, $LANGUAGE
en_US.utf8, en

anonymous ()
Ответ на: utf-8 от anonymous

да, у меня была не utf-8 локаль для этого пользователя, что-то даже не подумал, спасибо)

хочу заодно спросить, пользователям подобного кода тоже нужна utf-8 локаль и всё что я могу сделать - попросить их её настроить? Как другие приложения(тот же браузер) работает без необходимой локали с utf-8 знаками(более точно - интересует сам механизм получения кодов знаков в браузере и в, к примеру, wget)?

pseudo-cat ★★★ ()
Ответ на: комментарий от pseudo-cat

а в выхлопе http-request всё те же урезанные байты, видимо там внутри есть проблемы с utf-8.

pseudo-cat ★★★ ()
Ответ на: комментарий от pseudo-cat

Любая кодировка

Кодировка на стороне клиента может быть любой, как интерпретировать поток байт от сервера и есть ваша задача. Лисп не знаю, наверно надо как-то принудительно перевести строки во внутреннем представлении в utf-8, видимо по умолчанию ascii.

anonymous ()
Ответ на: Любая кодировка от anonymous

поток байт я получаю как раз таки не utf-8.

код:символ -

  34:"   116:t   114:r   97:a   110:n   115:s   108:l   97:a   116:t   101:e   100:d   84:T   101:e   120:x   116:t   34:"   58::   34:"   208:Ð   191:¿   209:Ñ   128:€   208:Ð   184:¸   208:Ð   178:²   208:Ð   181:µ   209:Ñ   130:‚   34:" 

pseudo-cat ★★★ ()
Ответ на: комментарий от pseudo-cat

То что вы привели и есть «привет» в кодировке utf-8, по два байта на символ. И еще: user@laptop:/tmp$ wget -S "https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf..." --2011-01-02 17:36:44-- https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf... Resolving www.googleapis.com... 74.125.79.95 Connecting to www.googleapis.com|74.125.79.95|:443... connected. HTTP request sent, awaiting response... HTTP/1.0 200 OK ETag: «Wtor4UzWAj8By_ltGgP4XXfJ5zs/_HrCyMxGBAob9w3-U-lkhMFATGo» Expires: Sun, 02 Jan 2011 12:36:43 GMT Date: Sun, 02 Jan 2011 12:36:43 GMT Cache-Control: private, max-age=0, must-revalidate, no-transform Content-Type: application/json; charset=UTF-8 X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block Server: GSE Length: unspecified [application/json] Saving to: `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello.1'

[ <=> ] 61 --.-K/s in 0s

2011-01-02 17:36:45 (1.65 MB/s) - `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello.1' saved [61]

Стоит обратить внимание на Content-Type.

anonymous ()
Ответ на: комментарий от pseudo-cat

То что вы привели и есть «привет» в кодировке utf-8, по два байта на символ. И еще:
user@laptop:/tmp$ wget -S "https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf..."
--2011-01-02 17:36:44-- https://www.googleapis.com/language/translate/v2?key=AIzaSyBxxVPeFAChUQ_Lvjcf...
Resolving www.googleapis.com... 74.125.79.95
Connecting to www.googleapis.com|74.125.79.95|:443... connected.
HTTP request sent, awaiting response...
HTTP/1.0 200 OK
ETag: «Wtor4UzWAj8By_ltGgP4XXfJ5zs/_HrCyMxGBAob9w3-U-lkhMFATGo»
Expires: Sun, 02 Jan 2011 12:36:43 GMT
Date: Sun, 02 Jan 2011 12:36:43 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
Content-Type: application/json; charset=UTF-8
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Length: unspecified [application/json]
Saving to: `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello.1'

[ <=> ] 61 --.-K/s in 0s

2011-01-02 17:36:45 (1.65 MB/s) - `v2?key=AIzaSyBxxVPeFAChUQ_LvjcfnoAbq9khjhNX0yU&source=en&target=ru&q=hello.1' saved [61]

Стоит обратить внимание на Content-Type.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.