node.jsのhttpクライアント「needle」の紹介です。

RSSやWebサービスからjsonの取得、その他 外部サーバー間との通信など、外部からデータを取得や追加をする必要があるケースは思ってる以上に沢山あります。

node.js用のhttpクライアントであれば " request " が一番よく使われていますが、多機能な為 場合によってはコードが長くなったり、callback内のオプションだらけで複雑になってしまうことも。。

Oauth認証が必要なことは無いので、シンプルに外部からデータを取得したい or データを送信したい」なんて人にオススメのnode.js用httpクライアントライブラリが「needle」です。

needleの導入 〜 使い方

needleはnode.js用のパッケージなのでnpmコマンドを使ってインストールします。

# needleのインストール
npm install needle --save


使い方はシンプルで一般的なWebフレームワークのRouteのように HTTP verb(get, post, put, patch, delete)を使って処理を書くことが出来ます。

下はGETメソッドでページのコンテンツを抜き出す例

const needle = require('needle');

// GETサンプル
needle.get('http://www.google.com', (error, response, body) => {
  // http.statusが200の場合 * 200 => 成功
  if (!error && response.statusCode == 200)
    // googleのページを取得
    console.log(body);
});


POSTで何か送信する場合は下記のようになります。
postメソッドの第二引数に送信するファイルやデータのオプションを取り付けるので、jQueryをよく使う人はスムーズに使えそうです。

const needle = require('needle');

// 投稿するデータ
var data = {
    file: '/home/johnlennon/walrus.png',
    content_type: 'image/png'
};

// postの第二引数に送信するデータを取り付けています
needle
    .post('https://my.server.com/foo', data, {
        multipart: true
    })
    .on('readable', () => { /* some process */ })
    .on('end', () => {
        console.log('Ready-o, friend-o.');
    })


その他、PUTやDELETEもpostの様に使えます。

const needle = require('needle');

// put
var nested = {
    params: {
        are: {
            also: 'supported'
        }
    }
}

needle.put('https://someExample/API/v2', nested,
    (err, resp) => {
        console.log('Got ' + resp.bytes + ' bytes.') 
    });


// delete
var options = {
    username: 'fidelio',
    password: 'x'
}

needle.delete('https://someAPI/v2/delete', null, options,
    (err, resp) => {
        // some method
    });


番外編の例として、needleを使って2ch.scのレス取得をするサンプルが下記になります。

// 2chスレッドのレスを取得するサンプル
/* lodash.jsを内部で使っています */

const
    needle = require('needle'),
    _ = require('lodash')

// 2ch.scのスレッドURL
var thread = 'http://2chthreadURL';

needle.get(thread, (error, response, body) => {

    if (!error && response.statusCode == 200) {

        var res =
            _.chain(body.split('\n'))
            .filter((val) => {
                // レスに関係の無いhtmlタグを消去
                return val.includes("<dd>");
            })
            .map((val) => {
                // htmlタグを消去
                return val.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, "");
            })
            .value();

        // スレッドのレスが配列で返されます
        console.log(res);

    } // !end if

}); // !end  needle.get()


Summary

以上がneedleの紹介でした。

gulp等のタスクランナーの1コマンドとして、その他 chron tabで実行するスクリプトとしてneedleを使うと便利そうですね。気になった人はゼヒ×2チェックしてみてください!

Github: tomas/needle


Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
( TOP画像作成時、一部のアイコンを上記のサービスから利用させていただきました )

 

この記事のカテゴリ

プログラミング

この記事のタグ

nodejs

Socialシェアボタン

スポンサーリンク