This snippet sends the latest news post from spacenews.com depending on an interval of six hours to a Discord channel.
// Thanks to Janeth for the Crawler API tutorial: https://autocode.com/community/threads/how-to-crawl-websites-for-data-p-1-tutorial-53fd62b0/
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const to = require('to-case');
const newsTitle = await lib.crawler.query['@0.0.3'].selectors({
url: `https://spacenews.com/segment/news/`,
headers: {
'User-Agent': `stdlib/crawler/query`,
'Accept-Language': `en-US`,
},
includeMetadata: false,
selectorQueries: [
{
selector: `h2`,
resolver: `text`,
},
],
});
const newsDescription = await lib.crawler.query['@0.0.3'].selectors({
url: `https://spacenews.com/segment/news/`,
headers: {
'User-Agent': `stdlib/crawler/query`,
'Accept-Language': `en-US`,
},
includeMetadata: false,
selectorQueries: [
{
selector: `p.post-excerpt`,
resolver: `text`,
},
],
});
const newsImage = await lib.crawler.query['@0.0.3'].selectors({
url: `https://spacenews.com/segment/news/`,
headers: {
'User-Agent': `stdlib/crawler/query`,
'Accept-Language': `en-US`,
},
includeMetadata: false,
selectorQueries: [
{
selector: `a`,
resolver: `html`,
attr: `href`,
},
],
});
const newsLink = await lib.crawler.query['@0.0.3'].selectors({
url: `https://spacenews.com/segment/news/`,
headers: {
'User-Agent': `stdlib/crawler/query`,
'Accept-Language': `en-US`,
},
includeMetadata: false,
selectorQueries: [
{
selector: `a`,
resolver: `attr`,
attr: `href`,
},
],
});
let author = newsLink.queryResults[0][34].attr;
// retrieving the author name from the link
author = author.split('/').slice(-2).join(' ');
let img = newsImage.queryResults[0][32].html;
// dividing the result by `"` in order to retrieve the image link from the HTML wrapped by `"`
img = img.split('"');
await lib.discord.channels['@0.3.2'].messages.create({
channel_id: process.env.NEWS_CHANNEL_ID,
content: `<@798742571051384882>, `,
embeds: [
{
author: {
name: `by ` + to.capital(author),
url: newsLink.queryResults[0][34].attr,
},
title: newsTitle.queryResults[0][1].text,
url: newsLink.queryResults[0][34].attr,
description: newsDescription.queryResults[0][0].text,
thumbnail: {url: img[3]},
},
],
});
// The bot will repeat the post if no news is posted within the next six hours. This may be prevented in the future.