Re: [racket-users] http-sendrecv with Google geocode

2015-04-21 Thread George Neuner

Hi Sean,

On 4/21/2015 1:46 AM, Sean Kanaley wrote:

Just comment out #:data and append it to the url:

 (http-sendrecv maps.googleapis.com http://maps.googleapis.com/
   (string-append 
http://maps.googleapis.com/maps/api/geocode/json?; 
http://maps.googleapis.com/maps/api/geocode/json form-data)

   ;#:ssl? ssl?
   ;#:port port
   #:version #1.1
   #:method #GET
   #:headers (list Content-Type: 
application/x-www-form-urlencoded)

   ;#:data form-data
   ;#:content-decode decodes
   ))



Doesn't work - I get the same error back:
  blah, blah ... Your client has issued a malformed or illegal request. 
That’s all we know 


I've tried appending the data as you suggest.  I've tried adding ? 
deliberately to the URI.  I've tried with and without #:headers. 
#:version #1.0 and #1.1.  #:method #GET vs #POST. Everything 
produces the same error.


But perversely the result of (string-append 
http://maps.googleapis.com/maps/api/geocode/json?; 
http://maps.googleapis.com/maps/api/geocode/json form-data) works if I 
paste it into a browser.


George


On Mon, Apr 20, 2015 at 8:37 PM, George Neuner gneun...@comcast.net 
mailto:gneun...@comcast.net wrote:


Hi all,

I'm having trouble accessing the Google geocode API using
http-sendrecv.

Code is:

(define (lookup address)
  (let [
(form-data  (alist-form-urlencoded
 (list (cons 'address address)
   )))

(response #f)
(lat  #f)
(long #f)
   ]

(printf Looking up ~s~n address)
(printf = ~s~n form-data)

(with-handlers [
(exn:fail?
 (lambda (e)
   (fprintf (ferr) ~n~n%%~n~a~n%%~n (format
Error: ~a (exn-message e)))
   ))
   ]
  (let-values [
   ((errcode header port)
(http-sendrecv maps.googleapis.com
http://maps.googleapis.com
http://maps.googleapis.com/maps/api/geocode/json;
http://maps.googleapis.com/maps/api/geocode/json
   ;#:ssl? ssl?
   ;#:port port
   #:version #1.1
   #:method #GET
   #:headers (list Content-Type:
application/x-www-form-urlencoded)
   #:data form-data
;#:content-decode decodes
   ))
  ]
(set! response (port-string port))
;(set! response (read-json port))
(printf = ~s~n response)
))

(fprintf (ferr) lat:~s long:~s~n  lat long )
(values lat long)
))

It doesn't yet extract relevant data because I haven't yet
successfully gotten anydata. 8-(


As a test Ilookup the State House in Boston:

   (lookup 24 Beacon St, Boston, MA, 01233)

Looking up 24 Beacon St, Boston, MA, 01233
= address=24+Beacon+St%2C+Boston%2C+MA%2C+01233
= !DOCTYPE html\nhtml lang=en\n  meta charset=utf-8\n 
meta name=viewport content=\initial-scale=1, minimum-scale=1,

width=device-width\\n titleError 400 (Bad
Request)!!1/title\n style\n
*{margin:0;padding:0}html,code{font:15px/22px
arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7%
auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* 
body{background:url(//www.google.com/images/errors/robot.png
http://www.google.com/images/errors/robot.png) 100% 5px
no-repeat;padding-right:205px}p{margin:11px 0
22px;overflow:hidden}ins{color:#777;text-decoration:none}a
img{border:0}@media screen and

(max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png
http://www.google.com/images/errors/logo_sm_2.png)
no-repeat}@media only screen and

(min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png
http://www.google.com/images/errors/logo_sm_2_hr.png) no-repeat
0% 0%/100%
100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png
http://www.google.com/images/errors/logo_sm_2_hr.png) 0}}@media
only screen and

(-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png
http://www.google.com/images/errors/logo_sm_2_hr.png)
no-repeat;-webkit-background-size:100%
100%}}#logo{display:inline-block;height:55px;width:150px}\n
/style\n  a 

Re: [racket-users] http-sendrecv with Google geocode

2015-04-21 Thread George Neuner

Hi Sean,

Even weirder  when I tried this morning your string-append solution 
- which I had left in place - worked immediately with no changes from 
last night.  The only thing different is I had closed DrRacket before 
going to bed and reopened it this morning.  Maybe something was wonky in 
DrRacket?  It had been running about ~14 hours yesterday at the point I 
started having trouble and I fought with it a couple more hours before 
quitting?  But AFAICR, I've never seen that before.


However, as you discovered also, passing the data as #:data doesn't work 
and now I'm interested in why.  ISTM that the URI + #:data should be 
identical to the string-append with ? and #:method #GET.


Also, Google recommends using POST if the data is sensitive, but I can't 
get POST to work even from a pure HTML form in a browser.


So now I'm really curious as to what's going on.

Thanks for your help,
George


On 4/21/2015 3:39 AM, Sean Kanaley wrote:

Hi George,

I'm not sure then -- I am in Racket 6.1.1. Here is the source that 
worked for me:


#lang racket
(require net/http-client
 net/uri-codec)

(define (lookup address)
  (let [
(form-data  (alist-form-urlencoded
 (list (cons 'address address)
   )))
(response #f)
(lat  #f)
(long #f)
   ]
(printf Looking up ~s~n address)
(printf = ~s~n form-data)
(with-handlers [
(exn:fail?
 (lambda (e)
  3; (fprintf (ferr) ~n~n%%~n~a~n%%~n (format 
Error: ~a (exn-message e)))

   ))
   ]
  (let-values [
   ((errcode header port)
(http-sendrecv maps.googleapis.com 
http://maps.googleapis.com
   (string-append 
http://maps.googleapis.com/maps/api/geocode/json?; form-data)

   ;#:ssl? ssl?
   ;#:port port
   #:version #1.1
   #:method  #GET
   #:headers (list Content-Type: 
application/x-www-form-urlencoded)

   ;#:data form-data
   ;#:content-decode decodes
   ))
  ]
(set! response (port-string port))
;(set! response (read-json port))
(printf = ~s~n response)
))
;(fprintf (ferr) lat:~s long:~s~n  lat long )
(values lat long)
))



(I commented out the fprintfs to avoid dealing with ferr.)

It won't work if #:data is uncommented. I hope that helps, otherwise 
I'm stuck too.




--
You received this message because you are subscribed to the Google Groups Racket 
Users group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[racket-users] http-sendrecv with Google geocode

2015-04-20 Thread George Neuner

Hi all,

I'm having trouble accessing the Google geocode API using http-sendrecv.

Code is:

(define (lookup address)
  (let [
(form-data  (alist-form-urlencoded
 (list (cons 'address address)
   )))

(response #f)
(lat  #f)
(long #f)
   ]

(printf Looking up ~s~n address)
(printf = ~s~n form-data)

(with-handlers [
(exn:fail?
 (lambda (e)
   (fprintf (ferr) ~n~n%%~n~a~n%%~n (format 
Error: ~a (exn-message e)))

   ))
   ]
  (let-values [
   ((errcode header port)
(http-sendrecv maps.googleapis.com
http://maps.googleapis.com/maps/api/geocode/json;
   ;#:ssl? ssl?
   ;#:port port
   #:version #1.1
   #:method  #GET
   #:headers (list Content-Type: 
application/x-www-form-urlencoded)

   #:data form-data
   ;#:content-decode decodes
   ))
  ]
(set! response (port-string port))
;(set! response (read-json port))
(printf = ~s~n response)
))

(fprintf (ferr) lat:~s long:~s~n  lat long )
(values lat long)
))

It doesn't yet extract relevant data because I haven't yet successfully 
gotten anydata. 8-(



As a test Ilookup the State House in Boston:

   (lookup 24 Beacon St, Boston, MA, 01233)

Looking up 24 Beacon St, Boston, MA, 01233
= address=24+Beacon+St%2C+Boston%2C+MA%2C+01233
= !DOCTYPE html\nhtml lang=en\n meta charset=utf-8\n  meta 
name=viewport content=\initial-scale=1, minimum-scale=1, 
width=device-width\\n  titleError 400 (Bad Request)!!1/title\n  
style\n *{margin:0;padding:0}html,code{font:15px/22px 
arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% 
auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}*  
body{background:url(//www.google.com/images/errors/robot.png) 100% 5px 
no-repeat;padding-right:205px}p{margin:11px 0 
22px;overflow:hidden}ins{color:#777;text-decoration:none}a 
img{border:0}@media screen and 
(max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png) 
no-repeat}@media only screen and 
(min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) 
no-repeat 0% 0%/100% 
100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png) 
0}}@media only screen and 
(-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) 
no-repeat;-webkit-background-size:100% 
100%}}#logo{display:inline-block;height:55px;width:150px}\n /style\n  
a href=//www.google.com/span id=logo aria-label=Google/span/a\n 
pb400./b insThat’s an error./ins\n  pYour client has issued 
a malformed or illegal request.  insThat’s all we know./ins\n

lat:#f long:#f
#f
#f

Totally unhelpful.
However if I paste the URI and urlencoded data into a browser:


http://maps.googleapis.com/maps/api/geocode/json?address=24+Beacon+St%2C+Boston%2C+MA%2C+01233


then I get a good return.  It also works from an HTML form, e.g.,

  form action=http://maps.googleapis.com/maps/api/geocode/json; 
method=GET

 labeladdress/label
 input type=text name=address size=128 /
 button type=submit 
 GEOCODE
 /button
 /form !-- login --


I'm using http-sendrecv successfully with other web APIs - I just can't 
figure out what I'm doing wrong with Google.  Number and/or frequency of 
requests is not an issue - I'm very far from the daily limit and many 
minutes elapse between tests as I'm trying to figure out what's wrong.


The documentation is at 
https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests


Any clues to pierce the veil of stupidity would be appreciated.
Thanks,
George

--
You received this message because you are subscribed to the Google Groups Racket 
Users group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] http-sendrecv with Google geocode

2015-04-20 Thread Sean Kanaley
Just comment out #:data and append it to the url:

 (http-sendrecv maps.googleapis.com
   (string-append
http://maps.googleapis.com/maps/api/geocode/json?;
http://maps.googleapis.com/maps/api/geocode/json form-data)
   ;#:ssl? ssl?
   ;#:port port
   #:version #1.1
   #:method  #GET
   #:headers (list Content-Type:
application/x-www-form-urlencoded)
   ;#:data form-data
   ;#:content-decode decodes
   ))

On Mon, Apr 20, 2015 at 8:37 PM, George Neuner gneun...@comcast.net wrote:

  Hi all,

 I'm having trouble accessing the Google geocode API using http-sendrecv.

 Code is:

 (define (lookup address)
   (let [
 (form-data  (alist-form-urlencoded
  (list (cons 'address address)
)))

 (response #f)
 (lat  #f)
 (long #f)
]

 (printf Looking up ~s~n address)
 (printf = ~s~n form-data)

 (with-handlers [
 (exn:fail?
  (lambda (e)
(fprintf (ferr) ~n~n%%~n~a~n%%~n (format Error:
 ~a (exn-message e)))
))
]
   (let-values [
((errcode header port)
 (http-sendrecv maps.googleapis.com

 http://maps.googleapis.com/maps/api/geocode/json;
 http://maps.googleapis.com/maps/api/geocode/json
;#:ssl? ssl?
;#:port port
#:version #1.1
#:method  #GET
#:headers (list Content-Type:
 application/x-www-form-urlencoded)
#:data form-data
;#:content-decode decodes
))
   ]
 (set! response (port-string port))
 ;(set! response (read-json port))
 (printf = ~s~n response)
 ))

 (fprintf (ferr) lat:~s long:~s~n  lat long )
 (values lat long)
 ))

 It doesn't yet extract relevant data because I haven't yet successfully
 gotten any data.  8-(


 As a test I lookup the State House in Boston:

(lookup 24 Beacon St, Boston, MA, 01233)

 Looking up 24 Beacon St, Boston, MA, 01233
 = address=24+Beacon+St%2C+Boston%2C+MA%2C+01233
 = !DOCTYPE html\nhtml lang=en\n  meta charset=utf-8\n  meta
 name=viewport content=\initial-scale=1, minimum-scale=1,
 width=device-width\\n  titleError 400 (Bad Request)!!1/title\n
 style\n*{margin:0;padding:0}html,code{font:15px/22px
 arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7%
 auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* 
 body{background:url(//www.google.com/images/errors/robot.png) 100% 5px
 no-repeat;padding-right:205px}p{margin:11px 0
 22px;overflow:hidden}ins{color:#777;text-decoration:none}a
 img{border:0}@media screen and
 (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//
 www.google.com/images/errors/logo_sm_2.png) no-repeat}@media only screen
 and (min-resolution:192dpi){#logo{background:url(//
 www.google.com/images/errors/logo_sm_2_hr.png) no-repeat 0% 0%/100%
 100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png)
 0}}@media only screen and
 (-webkit-min-device-pixel-ratio:2){#logo{background:url(//
 www.google.com/images/errors/logo_sm_2_hr.png)
 no-repeat;-webkit-background-size:100%
 100%}}#logo{display:inline-block;height:55px;width:150px}\n  /style\n  a
 href=//www.google.com/span id=logo aria-label=Google/span/a\n
 pb400./b insThat’s an error./ins\n  pYour client has issued a
 malformed or illegal request.  insThat’s all we know./ins\n
 lat:#f long:#f
 #f
 #f

 Totally unhelpful.
 However if I paste the URI and urlencoded data into a browser:


 http://maps.googleapis.com/maps/api/geocode/json?address=24+Beacon+St%2C+Boston%2C+MA%2C+01233

 then I get a good return.  It also works from an HTML form, e.g.,

   form action=http://maps.googleapis.com/maps/api/geocode/json;
 http://maps.googleapis.com/maps/api/geocode/json method=GET
  labeladdress/label
  input type=text name=address size=128 /
  button type=submit 
  GEOCODE
  /button
  /form !-- login --


 I'm using http-sendrecv successfully with other web APIs - I just can't
 figure out what I'm doing wrong with Google.  Number and/or frequency of
 requests is not an issue - I'm very far from the daily limit and many
 minutes elapse between tests as I'm trying to figure out what's wrong.

 The documentation is at