import 'dotenv/config' import { JSDOM } from 'jsdom' import sanitizeHtml from 'sanitize-html' export function markdownLinkRegex(url) { return new RegExp( `(\\[).*?(\\]\\(https:\\/\\/${url.replaceAll('.', '\\.')}\\))`, 'i', ) } export async function getRSSItemTitle(feedUrl) { const res = await fetch(feedUrl) const data = await res.text() const dom = new JSDOM(data) const item = dom.window.document.querySelector('item') const title = item.querySelector('title').textContent return sanitizeHtml(title, { allowedTags: [], allowedAttributes: {}, })?.trim() } export async function getJsonFeedItemTitle(feedUrl) { const res = await fetch(feedUrl) const data = await res.json() const post = data.items[0] const { title, image } = post return image ? `${title} ![${title}](${image})` : title } export async function getJsonFeedItemContent(feedUrl) { const res = await fetch(feedUrl) const data = await res.json() const post = data.items[0] const { content_html, image } = post const title = sanitizeHtml(content_html, { allowedTags: [], allowedAttributes: {}, })?.trim() return image ? `${title} ![${title}](${image})` : title } export async function getMalojaScrobble(malojaUrl) { const res = await fetch(`${malojaUrl}/apis/mlj_1/scrobbles?perpage=1`) const data = await res.json() const scrobble = data.list[0] const { title, album: { artists }, } = scrobble.track return `${title}
by ${artists.join(', ')}` } export async function getLetterboxdActivity(username) { const res = await fetch(`https://letterboxd.com/${username}/rss/`) const data = await res.text() const dom = new JSDOM(data) const item = dom.window.document.querySelector('item') const title = item.querySelector('title').textContent const image = item.querySelector('description > img').src return `${title} ![${title}](${image})` } export async function getTraktEpisode(username, id) { const res = await fetch( `https://trakt.tv/users/${username}/history/episodes/added/asc.atom?slurm=${process.env.TRAKT_SLURM}`, ) const data = await res.text() const dom = new JSDOM(data) const entry = dom.window.document.querySelector('entry') const title = entry.querySelector('title').textContent return `${title} ![${title}](https://widgets.trakt.tv/users/${id}/watched/thumb@2x.jpg?type=episode&image_only=1)` }