GoogleMaps API json

解決


久美子  2013-05-07 05:41:25  No: 44534

GoogleMaps API を利用して、緯度経度を取得するプログラムにおいての疑問です。
jsonを取得するのに、「http://maps.google.com/maps/api/geocode/json?address=東京駅&sensor=false」をGoogle Chrome に直接URLを放り込むと、日本語・漢字で帰ってくるのに、TIdHTTPを使って次のようにすると、英語で帰ってきます。
今回は、緯度経度は、問題なく得られるので目的に対する支障はないのですが、TIdHTTPを使って日本語で返すにはどうしたらよいのでしょうか。
環境はwin7、XE2です。

例1:Google Chromeに、直接「http://maps.google.com/maps/api/geocode/json?address=東京駅&sensor=false」を放り込ん場合

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "東京駅",
               "short_name" : "東京駅",
               "types" : [ "train_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "東京都",
               "short_name" : "東京都",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "日本",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "日本, 東京駅(東京)",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.691470,
                  "lng" : 139.7783240
               },
         以下略
               

例2:TIdHTTPを用いた場合 Add=東京駅

procedure TForm2.SetLatLng(const Add: string; var formatted_address, lat, lng: String);
var
  req: string;
  jsonStr: string;
  jsonObj: TJSONObject;
  values: TJSONArray;
//  Add1: String;
  HTTP: TIdHTTP;

  MS: TMemoryStream;
  ENC: TEncoding;
  StringList1: TStringList;
  Add1: String;
begin
  Add1 := Add;
  ENC := TEncoding.UTF8;
  MS := TMemoryStream.Create;
  HTTP := TIdHTTP.Create;
  StringList1 := TStringList.Create;

  req := 'http://maps.google.com/maps/api/geocode/json?address=' +
          TIdURI.ParamsEncode(Add1, TEncoding.UTF8) + '&sensor=false';

  http.Get(req, MS);
  MS.Position := 0;
  StringList1.LoadFromStream(MS,ENC);
  jsonStr := StringList1.Text;
  
  //途中の処理は省略
end;

StringList1の結果

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Tokyo Station",
               "short_name" : "Tokyo Station",
               "types" : [ "train_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "9",
               "short_name" : "9",
               "types" : [ "sublocality_level_3", "sublocality", "political" ]
            },
            {
               "long_name" : "1丁目",
               "short_name" : "1丁目",
               "types" : [ "sublocality_level_2", "sublocality", "political" ]
            },
            {
               "long_name" : "Marunouchi",
               "short_name" : "Marunouchi",
               "types" : [ "sublocality_level_1", "sublocality", "political" ]
            },
            {
               "long_name" : "Chiyoda",
               "short_name" : "Chiyoda",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Tokyo",
               "short_name" : "Tokyo",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Japan",
               "short_name" : "JP",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Tokyo Station, 1丁目-9 Marunouchi, Chiyoda, Tokyo, Japan",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 35.691470,
                  "lng" : 139.7783240
               },

         以下略


ルインリル  2013-05-07 07:31:58  No: 44535

HTTP.Request.AcceptLanguage:='ja,en-US;q=0.8,en;q=0.6';
としみてたら、どうでしょうか。(すみませんが未検証です)
代入している値はGoogleChromeと同じものです。


久美子  2013-05-07 13:44:42  No: 44536

ルインリル さん、ありかどうございました。
日本語表記で、とれました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加