HeartRails Geo API


HeartRails Geo API
http://geoapi.heartrails.com/api.html
(API は商用、非商用を問わず、無料でご利用になれます。)

無料提供!いいね!ということで取り敢えず試してみる。

Openweathermap
Openweathermap試したときと同じ要領でいけるかと思いきやAccess-Control-Allow-Originがついてない=Javascriptから要求不可サーバ側でヘッダつけないとどうにもならない…。
まあキャッシュも効かせられるからいいけど、ヘッダつけてくれるとベスト。

JS のライブラリが提供されているが、これは同Originからのアクセス認識になるからアクセス可能となると言う理解だが間違ってないよね…。
http://geoapi.heartrails.com/api/geoapi.js
が見た目はいじれない。
ヘッダつけてくれないかな |ω・`)チラッ

利用規約
http://www.heartrails.com/company/terms.html
有料プラン
http://www.heartrails.com/business/saas-asp.html#geoapi

しょうがないので取り敢えずの確認方法

C#コンソールアプリでHTTPリスニング

static void Main(string[] args)
{
  string prefix = "http://*:8080/"; // 受付URL

  HttpListener listener = new HttpListener();
  listener.Prefixes.Add(prefix);
  listener.Start();

  while (true)
  {
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest req = context.Request;
    HttpListenerResponse res = context.Response;

    Console.WriteLine(req.RawUrl);

    if (req.RawUrl.EndsWith("api/json?method=getAreas"))
    {
      HttpWebRequest hreq = (HttpWebRequest)HttpWebRequest.Create("http://geoapi.heartrails.com/api/json?method=getAreas");
      var hres = hreq.GetResponse();

      string json = null;
      using (var resStream = hres.GetResponseStream())
      using (var reader = new StreamReader(resStream))
      {
        json = reader.ReadToEnd();
      }
      Console.WriteLine(json);

      res.Headers.Add("Access-Control-Allow-Origin", "*");

      byte[] data = Encoding.UTF8.GetBytes(json);
      res.OutputStream.Write(data, 0, data.Length);
    }
    res.Close();
  }//end loop
}//end method

HTML/Javascript側

var map = L.map('map').setView([36, 140], 13);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(map);

var TestCanvas = L.TileLayer.Canvas.extend({
  drawTile: function (canvas, tilePoint) {
    var ctx = canvas.getContext('2d');
    ctx.font = "24px Arial";
    ctx.fillText("L" + this._map.getZoom() +
                " X" + tilePoint.x +
                " Y" + tilePoint.y, 50, 50);

    ctx.lineWidth = 2;
    ctx.strokeStyle = 'black';
    ctx.strokeRect(10, 10, 245, 245);
  }
});

(new TestCanvas()).addTo(map);

var url = 'http://localhost:8080/api/json?method=getAreas';
$.getJSON(url, function (jsonObj) {
  if (!jsonObj || !jsonObj.response || !jsonObj.response.area || jsonObj.response.area.length < 0) {
    console.log('取得不可');
    return;
  }
  console.log(jsonObj.response.area[0]);
});
カテゴリー: 開発 タグ: , パーマリンク