Node.js「http.get」の応用:APIデータ取得、ファイルダウンロード、Webスクレイピング
Node.js の http.get レスポンスにおける本文の取得方法
本文は、data
イベントまたは on('data', ...)
メソッドを使用して取得できます。このイベントは、レスポンスボディのチャンクが受信されるたびに発生します。各チャンクは、イベントハンドラーに渡される data
パラメータで利用できます。
以下の例は、http.get
を使用して URL からデータを取得し、コンソールに出力する方法を示しています。
const http = require('http');
const url = 'https://www.example.com';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.on('data', (chunk) => {
console.log(chunk.toString());
});
response.on('end', () => {
console.log('Done!');
});
});
この例では、data
イベントハンドラーは、受信された各チャンクを console.log
関数を使用してコンソールに出力します。end
イベントは、レスポンスの受信が完了したときに発生し、Done!
メッセージをコンソールに出力します。
response.text() と response.json() の使用
本文がテキストであることがわかっている場合は、response.text()
メソッドを使用して取得できます。このメソッドは、レスポンスボディ全体を Promise として返し、Promise が解決されるとテキストが渡されます。
const http = require('http');
const url = 'https://www.example.com';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.text().then((data) => {
console.log(data);
}).catch((error) => {
console.error(error);
});
});
この例では、response.text()
メソッドは Promise として呼び出され、Promise が解決されると data
変数にテキストが格納されます。その後、console.log
関数を使用してテキストがコンソールに出力されます。
const http = require('http');
const url = 'https://www.example.com/data.json';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.json().then((data) => {
console.log(data);
}).catch((error) => {
console.error(error);
});
});
Node.js の http.get
レスポンスの本文は、data
イベントまたは on('data', ...)
メソッド、response.text()
, または response.json()
メソッドを使用して取得できます。使用する方法は、本文の形式と、どのように処理するかに依存します。
data イベントと on('data', ...) メソッドの使用
const http = require('http');
const url = 'https://www.example.com';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
let body = '';
response.on('data', (chunk) => {
body += chunk.toString();
});
response.on('end', () => {
console.log(body);
});
});
response.text() の使用
const http = require('http');
const url = 'https://www.example.com';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.text().then((data) => {
console.log(data);
}).catch((error) => {
console.error(error);
});
});
この例では、response.text()
メソッドを使用してレスポンスボディ全体を Promise として取得します。Promise が解決されると、本文が data
変数に格納され、コンソールに出力されます。
response.json() の使用
const http = require('http');
const url = 'https://www.example.com/data.json';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.json().then((data) => {
console.log(data);
}).catch((error) => {
console.error(error);
});
});
これらのサンプルコードは、様々な状況に合わせて変更できます。例えば、受信したデータをファイルに保存したり、データベースに保存したりすることができます。
注意事項
このサンプルコードはあくまで例であり、本番環境で使用する場合には適切なエラー処理とセキュリティ対策を講じてください。
Node.js の http.get レスポンス本文を取得するその他の方法
Piping
response
オブジェクトの pipe()
メソッドを使用して、別のストリームに直接書き込むことができます。これは、大きな本文を処理する場合や、メモリ使用量を節約したい場合に役立ちます。
const http = require('http');
const fs = require('fs');
const url = 'https://www.example.com';
const filePath = 'response.txt';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
response.pipe(fs.createWriteStream(filePath));
response.on('end', () => {
console.log('File saved!');
});
});
この例では、response
オブジェクトは fs.createWriteStream()
メソッドを使用して作成されたファイルストリームにパイプされます。これにより、レスポンスボディがチャンクごとにファイルに書き込まれます。
Streams API
Node.js の Streams API を使用して、レスポンスボディをより詳細に制御することもできます。これにより、バックプレッシャー処理、変換、フィルタリングなどを行うことができます。
const http = require('http');
const { Transform } = require('stream');
const url = 'https://www.example.com';
http.get(url, (response) => {
if (response.statusCode !== 200) {
console.error(`Error: ${response.statusCode}`);
return;
}
const upperCaseTransform = new Transform({
transform(chunk, encoding, callback) {
callback(null, chunk.toString().toUpperCase());
}
});
response.pipe(upperCaseTransform).pipe(process.stdout);
});
この例では、Transform
クラスを使用して、レスポンスボディを大文字に変換する変換ストリームを作成します。その後、変換ストリームは process.stdout
にパイプされ、コンソールに出力されます。
第三者ライブラリ
axios
や request
のような、HTTP リクエストを簡単に行うための Node.js のライブラリを使用することもできます。これらのライブラリは、Promise ベースの API を提供し、本文を取得するためのより簡潔な方法を提供します。
const axios = require('axios');
const url = 'https://www.example.com';
axios.get(url)
.then((response) => {
console.log(response.data);
})
.catch((error) => {
console.error(error);
});
この例では、axios
ライブラリを使用して GET
リクエストを行い、レスポンスの本文を response.data
プロパティに格納します。
Node.js の http.get
レスポンス本文を取得するには、様々な方法があります。使用する方法は、ニーズと好みに応じて選択してください。
node.js http