😱 ノードでランダムmeme APIを作成します.JSと操り人形
15074 ワード
👋 こんにちは
今日の記事はすべてのノードを使用してランダムなミームAPIを作ることができる方法です.JSとウェブスクレーピング私たちはFastify APIのために、我々は使用されますPuppeteer ウェブをscrapeし、ランダムなミームを取得します.
このランダムなミームAPI APIの同じ種類に触発されたhere . しかし、ノードを使ってビルドしたかったです.JSと操り人形.
我々はこするMemedroid 使用Puppeteer NPM package .
プロジェクトの初期化
まず最初に、必要な名前のフォルダを作成する必要があり、ノードを初期化する必要があります.そのフォルダーのJSアプリ.このコマンドを使用します.
npm init -y
インストールするには2つの依存関係が必要ですpuppeteer
and fastify
.npm i puppeteer fastify
APIにFastifyを使用する
我々のプロジェクトが設定された後、我々の依存関係がインストールされた後、我々はコードを書くと一緒に行くのが良いです!クリエイトア
index.js
ファイルとインポートfastify
このコードを使用してサーバーを作成します.const fastify = require('fastify')({ logger: true });
const start = async () => {
try {
await fastify.listen(5555);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
一度この事が行われると、我々はアプリを使用して実行するnode index
, 我々のアプリは、ポート上で実行されます5555
. しかし、ベースルートを作成しましょう/
)そのために.fastify.get('/', async (request, reply) => {
reply.send({ hello: 'world' });
});
ランダムな記憶を取得する
ここで楽しい部分が来る!我々は、Webブラウザを開き、Memedroidからすべての画像を取得し、我々はすべてのコードを介して行います.
と
puppeteer
パッケージ、クロムもウェブをscrapeにインストールされています.そういうわけで、あなたがインストールされる時間がかかったかもしれませんTo skip Chromium download, you can use
puppeteer-core
package and add the path to your Chrome file following the docs.
私たちはすべてのミームを取得する関数を作成し、ルート内のランダムな1つを選択します.
async function getAllMemes() {
const URL = 'https://www.memedroid.com/memes/tag/programming';
const browser = await puppeteer.launch({ headless: true }); // launch browser
const page = await browser.newPage(); // open a page
await page.goto(URL); // go to the page
}
我々は単にブラウザを起動し、このコードでMemedroidのページを開きます👆.さあ、すべてを得ましょう
<img>
にあるタグ<div>
クラスのitem-aux-container
. それはすべてのミームが住んでいるところです.上記のイメージのように
<article>
タグ、そのクラスを持つdivが存在するので、単に$$eval
メソッドpage
.このメソッドは2つの引数をとります:
const allImages = await page.$$eval('div.item-aux-container img[src]', (imgs) => {});
コールバック関数のイメージをマップし、画像のURLのみを返しますsrc
属性.そして、これは我々がそれをする方法です.私たちは
src
属性はhttp
で終わるjpeg
そして、我々はそれを返します.const allImages = await page.$$eval('div.item-aux-container img[src]', imgs =>
imgs.map(img => {
if (
img.getAttribute('src').startsWith('http') &&
img.getAttribute('src').endsWith('jpeg')
)
return img.getAttribute('src');
})
);
残念なことに、それも私たちに戻るnull
もしそうでないならば、.filter()
メソッド.const imgs = allImages.filter(img => img !== null);
すべての作業が完了すると、ブラウザを閉じ、画像の配列を返します.async function getAllMemes() {
const URL = 'https://www.memedroid.com/memes/tag/programming';
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(URL);
const allImages = await page.$$eval('div.item-aux-container img[src]', imgs =>
imgs.map(img => {
if (
img.getAttribute('src').startsWith('http') &&
img.getAttribute('src').endsWith('jpeg')
)
return img.getAttribute('src');
})
);
const imgs = allImages.filter(img => img !== null);
// NEW LINES
await browser.close();
return imgs;
}
Fastifyを使用してランダムなミームを送信する
最後に、ランダムなミームを選択し、このコードを使用してユーザーに送信します
fastify.get('/', async (request, reply) => {
const memes = await getAllMemes();
const randomNumber = Math.round(Math.random() * memes.length);
reply.send({ memeUrl: memes[randomNumber] });
});
今、ユーザーが訪問するたびにlocalhost:5555
, これは次のようになります.我々は我々のアプリが完了している!読書ありがとう!すべてのコードを見つけることができますhere .
閉じるこの動画はお気に入りから削除されています.コメントをあなたの考え!常に改善の余地があるので、このプロジェクトのご提案をお知らせください!
私と私の上で私とつながってください😉
次回まで、ものすごい保つ✌️
Reference
この問題について(😱 ノードでランダムmeme APIを作成します.JSと操り人形), 我々は、より多くの情報をここで見つけました https://dev.to/maxprogramming/make-a-random-meme-api-with-node-js-and-puppeteer-4h4bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol