1const Apify = require('apify');
2const express = require('express')
3const bodyParser = require('body-parser');
4
5
6const app = express()
7app.use(bodyParser.json());
8app.use(bodyParser.urlencoded({ extended: true }));
9
10
11
12
13
14
15const {
16 APIFY_CONTAINER_PORT,
17 APIFY_CONTAINER_URL,
18 APIFY_DEFAULT_KEY_VALUE_STORE_ID,
19} = process.env;
20
21
22
23const processedUrls = [];
24
25
26app.get('/', (req, res) => {
27 let listItems = '';
28
29
30 processedUrls.forEach((url, index) => {
31 const imageUrl = `https://api.apify.com/v2/key-value-stores/${APIFY_DEFAULT_KEY_VALUE_STORE_ID}/records/${index}.jpg`;
32
33 listItems += `<li>
34 <a href="${imageUrl}" target="_blank">
35 <img src="${imageUrl}" width="300px" />
36 <br />
37 ${url}
38 </a>
39</li>`;
40 });
41
42 const pageHtml = `
43<html>
44 <head><title>Example</title></head>
45 <body>
46 <form method="POST" action="${APIFY_CONTAINER_URL}/add-url">
47 URL: <input type="text" name="url" placeholder="http://example.com" />
48 <input type="submit" value="Add" />
49 <hr />
50 <ul>${listItems}</ul>
51 </form>
52 </body>
53</html>`;
54
55 res.send(pageHtml);
56});
57
58
59
60app.post('/add-url', async (req, res) => {
61 const { url } = req.body;
62 console.log(`Got new URL: ${url}`);
63
64
65 const browser = await Apify.launchPuppeteer();
66 const page = await browser.newPage();
67
68
69 await page.goto(url);
70 const screenshot = await page.screenshot({ type: 'jpeg' });
71
72
73 await page.close();
74 await browser.close();
75
76
77 await Apify.setValue(`${processedUrls.length}.jpg`, screenshot, { contentType: 'image/jpeg' });
78 processedUrls.push(url);
79
80 res.redirect('/');
81});
82
83
84app.listen(APIFY_CONTAINER_PORT, () => {
85 console.log(`Application is listening at URL ${APIFY_CONTAINER_URL}.`);
86});