Created
January 22, 2011 14:59
-
-
Save iratqq/791169 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require-extension (srfi 1)) | |
(require "http-client.scm") | |
(require "util.scm") | |
(require-dynlib "expat") | |
(define google-suggest-charset-alist | |
'((ja . "Shift-JIS"))) | |
(define (parse-google-suggest xml-str) | |
(let ((parser (xml-parser-create "UTF-8")) | |
(path '()) | |
(data '())) | |
(define (elem-start name atts) | |
(if (and (equal? name "suggestion") | |
(equal? path '("toplevel" "CompleteSuggestion"))) | |
(set! data (append data | |
(map cdr | |
(filter (lambda (x) (equal? (car x) "data")) atts))))) | |
(set! path (append path (list name)))) | |
(define (elem-end name) | |
(set! path (drop-right path 1))) | |
(if xml-str | |
(begin | |
(xml-element-handler-set! parser elem-start elem-end) | |
(xml-parse parser xml-str 1) | |
data) | |
'()))) | |
(define (google-suggest str lang encode use-ssl?) | |
(define (iconv-convert to-code from-code from-str) | |
(if (equal? to-code from-code) | |
from-str | |
(and-let* ((ic (iconv-open to-code from-code)) | |
(to-str (iconv-code-conv ic from-str))) | |
(iconv-release ic) | |
to-str))) | |
(define (google-suggest-server use-ssl?) | |
(if use-ssl? | |
"encrypted.google.com" | |
"google.com")) | |
(define (make-lang-query) | |
(if (assq lang google-suggest-charset-alist) | |
(format "&hl=~a" (symbol->string lang)) | |
"")) | |
(define (string->lang str) | |
(if (assq lang | |
google-suggest-charset-alist) | |
(iconv-convert "UTF-8" | |
(assq-cdr lang | |
google-suggest-charset-alist) | |
str) | |
str)) | |
(and-let* ((uri-string (http:encode-uri-string (iconv-convert "UTF-8" encode str))) | |
(server (google-suggest-server use-ssl?))) | |
(let* ((proxy (make-http-proxy-from-custom)) | |
(ssl (and use-ssl? | |
(make-http-ssl (SSLv3-client-method) 443))) | |
(result (http:get server | |
(format "/complete/search?output=toolbar&q=~a~a" | |
uri-string | |
(make-lang-query)) | |
80 | |
proxy | |
ssl)) | |
(parsed (parse-google-suggest (string->lang result)))) | |
(map (lambda (s) | |
(iconv-convert encode "UTF-8" s)) | |
parsed)))) | |
(print (google-suggest "foo" #f "UTF-8" #t)) | |
(print (google-suggest "あ" 'ja "EUC-JP" #t)) | |
(print (google-suggest "い" 'ja "EUC-JP" #t)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment