Node.js つかってみる
NodeMovenet
2022-5-31 10:00 JST

jQuery も使えないまま Node.js をつかってみる。JavaScript とかめったに使わない。


そういえば、昔(1995くらいに) Document.write() とかで HTML を直に出力するのを一生懸命書いたな。

まずはインストール

Ubuntuに最新のNode.jsを難なくインストールするを読みながら Node.js のインストール。

$ sudo apt install nodejs npm
$ sudo npm install n -g
$ sudo n stable
$ sudo apt purge -y nodejs npm
$ node -v
v16.14.0
$ sudo n 9.11.2
$ node -v
v.9.11.2 

node-rest-client

node-rest-clientをインストールし、github にある、サンプルをそのままやってみる。

SimpleHTTPGET
var Client = require('node-rest-client').Client;

var client = new Client();

// direct way
client.get("http://remote.site/rest/xml/method", function (data, response) {
// parsed response body as js object
console.log(data);
// raw response
console.log(response);
});

// registering remote methods
client.registerMethod("jsonMethod""http://remote.site/rest/json/method""GET");

client.methods.jsonMethod(function (data, response) {
// parsed response body as js object
console.log(data);
// raw response
console.log(response);
});

Bing Maps APIs

Bing Maps APIsでまずは ID つくって、Key をもらう。

Node.js で試す

node.js
var Client = require('node-rest-client').Client;

var client = new Client();

var latitude = 35.6;
var longitude = 140.1;
var key = "自分のキー";
var r = 2.0;
var output_format = "json";
var lang = "ja-Jp"
var search_type = "Train%20Stations";

var url = `https://dev.virtualearth.net/REST/v1/LocationRecog/${latitude},${long
itude}?key=${key}&r=${r}&output=${output_format}&type=${search_type}&c=${lang}`;

client.registerMethod("jsonMethod", url, "GET");

client.methods.jsonMethod(function (data, response) {
    // parsed response body as js object
    console.log(data['resourceSets'][0]['resources'][0]['businessesAtLocation']);
    // raw response
    //console.log(response);
});

console.log(url)

node.js 実行。うまくいくと情報が得られる。c=に ja-Jp とか入れても無視される模様。あと、千葉駅の情報が重複(日本語、英語、フランス語?)してたりしていまひとつだ(2022/5)。使い方が悪い可能性もあるが、本家のドキュメントに明確な記載がない。

$ node node.js

情報は JSON

情報は JSON なので上のように、配列かあるいは連想記憶でアクセスできる。配列なら数字で、連想記憶ならそのキーになる文字列でアクセス。どういう構造の JSON かは(JSON ってスキマあるんか?)本家の API に書いてるようなないような。

ついでだからアクセス用の関数を作る。JavaScript ぽく書いてない(かけない)。末尾再帰をちゃんと理解してくれるのだろうか?

get_item
function get_item(json, addr) {
    if (addr.length == 0) {
        return json
    }

    const key_or_num = addr[0];

    return get_item(json[key_or_num], addr.slice(1));
}

リンク集