情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでRequestを使ってWebサイトからバイナリデータを取得する

2016/08/15

Webサイトからデータを取得するにはデータを取得したいURLに対してHTTP(S)のGETリクエストを送信しなければなりません。

これには下のようなモジュールを利用する方法があります。

  • http(s)
  • request

この記事ではrequestモジュールを利用する方法を取り上げます。

バイナリデータの取得

Webサイトからバイナリデータを取得するにはrequest関数を使用します。

var request = require('request');

request('xxx', function (err, res, data) {
});
//or
request({
    url: 'xxx', 
    encoding: null
}, function (err, res, data) {
});

第1引数にURLを指定します。

あるいは、URLの代わりにオプションをオブジェクトとして指定することもできます。

単純にWebサイトからデータを取得するのに重要なオプションには下のようなものがあります。

  • url・・・URLです。
  • uri・・・urlと同じです。
  • encoding・・・データの文字コードです。nullを指定します。

第2引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトであり、第2引数はHTTP(S)レスポンスを表すhttp(s).IncomingMessageクラスのインスタンスであり、第3引数はWebサイトから取得したデータです。このデータは文字列又はバッファとなります。オプションのencodingnullを指定した場合にはバッファとなります。

http(s).IncomingMessage.statusCodeにHTTP(S)レスポンスのステータスコードが格納されています。このステータスコードが200の場合、データの取得が可能です。

サンプルコード1

3つ目のコマンドライン引数として与えられたURLからバイナリデータを取得し、標準出力に出力します。

request-binary.js

var request = require('request');

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

request({
    url: process.argv[2], 
    encoding: null
}, function (err, res, data) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        if (res.statusCode === 200) {
            console.log(data);
        }
        else {
            console.error('can\'t process.');
            process.exit(1);
        }
    }
});

使用パッケージ

  • Request
    npm install requestでインストールします。

実行結果

下ではHTMLドキュメントをバイナリデータとして取得しています。

C:\work\node>node request-binary.js http://www.archives.pref.fukui.jp/fukui/07/zusetsu/D01/D011.htm
<Buffer 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44 54 44 20 48 54 4d 4c 20 34 2e 30 20 54 72 61 6e 73 69 ... >

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js