
ゲーム攻略サイトをとってきたい(その2)
この投稿は次の投稿の続編です。
なんかちがうっぽい
「curl」を使えば攻略サイトのHTML内容を取ってこれることが分かった。
でも、いちいちコマンドを入力するのは、かなり面倒。
ひとつの策としては「バッチ」をつくればいいのだろうけど、自動化というイメージではちょっと違う気がした。
代行業者をつくろう!
そもそも、なんで「CORS」という仕様なのかというと、
・自作のWebアプリをブラウザで動かして
・そこから「fetch」を実行した場合に
・依頼先(攻略サイト)がデータ取得をWebアプリ間では許してくれない
ということなので。
Webアプリを動かしているデバイスに代行する仕組みを用意して、代行先に依頼すればいいという。
代行業者のしくみ
javascriptで実装し、nodeで動かすアプリを作る前提で。
代行業者を「express」というパッケージを使ってつくっていく。
ちなみに、「express」は、こんな感じでインストールするとのこと。
npm install express open
依頼を許可する
代行業者がWebアプリからの依頼を許可する必要があるらしい。
こんな感じで、代行業者が依頼を許可する。
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
あとは、受付窓口と受付内容の処理を実装していく。
受付窓口の形式指定
//フォルダをブラウザに見せる
app.use(express.static('public'));
//"application/json" の生データを、オブジェクトに変換して req.body に格納する
app.use(express.json());
受付窓口の開通
app.listen(3000, () => {
console.log("受付開始しました!");
});
各受付内容の部署
app.get('/hello', (req, res) => {
//Webアプリから「/hello?name=だれですか?」みたいに送られた文字をキャッチする!
console.log("hello きた~! http://localhost:3000");
const name = req.query.name || "ごお~!";
res.send({ status: `おうむがえし!:${name}` });
});
代行業者への受付確認
こっちも javascript で、こんな感じで実装し、nodeで実行する。
async function hello() {
console.log("代行業者へ仕事依頼を送ります");
try {
const response = await fetch('http://localhost:3000/hello');
const result = await response.json();
console.log("サーバーからの応答:", result.status);
} catch (error) {
console.error("サーバーが応答しません!", error);
}
}
(async () => {
await hello();})();
}
確認
代行業者を先に起動する
node.exe server.js
そして、依頼元を起動する
node.exe client.js
次回は
curl窓口を作ろうと思う。
つづく。