[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Google Geocode - HTTPAPI Problem with encoding?
Hello all,
I am pretty new to use HTTPAPI and encounter a problem while trying to
connect to google geocoding api.
It seems the problem is related to the special-characters we have in
germany.
When I try to connect to google-api with a streetname that holds for
example a "ß" as character (which nearly all streets have!) I get,
depending on the way I try to build the URL different errors.
The URL I use to request google api is this:
[1]http://maps.googleapis.com/maps/api/geocode/xml?address=[ADDRESS]&se
nsor=false
Here now the Errors I get in different scenarios:
1.) If I use NO encoding of the url and fill in this
"Bergstrasse+93138+Lappersdorf+DE" as address.
RESULT = OK, all perfect!!!
2.) If I use NO encoding of the URL and fill in this
"Bergstraße+93138+Lappersdorf+DE" as address.
RESULT =
The requested URL could not be retrieved
Invalid Request: Malformed request
Some aspect of the HTTP Request is invalid.
3.) If I use encoding of the URL and fill in this
"Bergstraße+93138+Lappersdorf+DE" as address.
RESULT = INVALID_REQUEST
I really wonder what is going wrong.
Can someone of you give me a useful hint?
Kind Regards
Stephan
---------------------------------------
Here the code of the small program
---------------------------------------
H DFTACTGRP(*NO) BNDDIR('LIBHTTP/HTTPAPI')
/include LIBHTTP/QRPGLESRC,httpapi_h
/include LIBHTTP/QRPGLESRC,ifsio_h
D QCMDEXEC PR ExtPgm('QCMDEXC')
D command 32702a const options(*varsize)
D len 15p 5 const
D igc 3a const options(*nopass)
D GoogleResponse PR
D r likeds(resp)
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D Attrs * dim(32767)
D const options(*varsize)
* google - Geocoding Request fields:
D req DS qualified inz
D address 150a varying
D sensor 5a varying
D key 100a varying
* google - Geocoding Response fields:
D resp DS qualified inz
D Latitude 9p 6
D Longitude 9p 6
D Address 50a varying
D status 256a varying
D Enc s like(HTTP_URL_ENCODER)
D url s 32767a varying
D filename s 50A varying
D cmd s 200A
D msg s 52A
D wait s 1A
D rc s 10I 0
D postData s *
D postDataSize s 10I 0
D x s 10I 0
D agent s 64a
/free
*inlr = *on;
// address = 'Bergstrasse 93138 Lappersdorf DE';
req.address = 'Bergstraße+93138+Lappersdorf+DE';
req.sensor='false';
Enc = http_url_encoder_new();
// http_url_encoder_addvar_s( enc: 'key' : req.key );
http_url_encoder_addvar_s( enc: 'address' : req.address );
http_url_encoder_addvar_s( enc: 'sensor' : req.sensor );
url = '[2]http://maps.googleapis.com/maps/api/geocode/xml?'
+ http_url_encoder_getstr(enc);
// + 'address=' + %trimr(req.address)
// + '&sensor=false';
http_url_encoder_free(enc);
http_debug(*ON);
filename = http_tempfile() + '.xml';
rc = http_url_get( url : filename );
if (rc < 1);
unlink(filename);
http_crash();
return;
endif;
dsply ('Press <ENTER> to see Google response') ' ' wait;
cmd = 'DSPF STMF(''' + filename + ''')';
QCMDEXEC(cmd: %len(cmd));
dsply ('Press <ENTER> to see debug log') ' ' wait;
cmd = 'DSPF STMF(''/tmp/httpapi_debug.txt'')';
QCMDEXEC(cmd: %len(cmd));
// ****************************************************
// parse the XML from the temp file.
// ****************************************************
rc =http_parse_xml_stmf( filename
: HTTP_XML_CALC
: *null
: %paddr(GoogleResponse)
: %addr(resp) );
unlink(filename);
if (rc < 0);
http_crash();
return;
endif;
// ****************************************************
// Print the news headlines & links to the full
// articles
//
// Note: If you wanted to, you could retrieve the
// articles themselves by calling http_url_get
// for each link.
// ****************************************************
if (resp.status <> 'OK');
http_comp(resp.status);
return;
endif;
dsply (' Lat = ' + %char(resp.Latitude) );
dsply (' Lon = ' + %char(resp.Longitude) );
dsply ('Press <ENTER> to continue') ' ' wait;
return;
/end-free
P GoogleResponse B
D GoogleResponse PI
D r likeds(resp)
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D attrs * dim(32767)
D const options(*varsize)
/free
if ( path = '/GeocodeResponse' );
if name = 'status';
r.status = %trimr(value);
endif;
endif;
if ( path = '/GeocodeResponse/result/geometry/location');
select;
when name = 'lat';
r.latitude = %dec(value:9:6);
when name = 'lng';
r.longitude = %dec(value:9:6);
endsl;
endif;
if ( path = '/GeocodeResponse/result' );
if name = 'formatted_address';
r.address = %trimr(value);
endif;
endif;
/end-free
P E
References
1. http://maps.googleapis.com/maps/api/geocode/xml?address=[ADDRESS]&sensor=false
2. http://maps.googleapis.com/maps/api/geocode/xml
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------