updated getRSSItemTitle, getJsonFeedItemTitle, getLetterboxdActivity, getTraktEpisode, and getTraktMovie to return structured objects with text and a direct link to the content

This commit is contained in:
dylan 2025-12-25 18:30:27 +00:00
parent bbda450d01
commit fdb39d2159

View file

@ -41,24 +41,28 @@ export async function getRSSItemTitle(feedUrl) {
const dom = new JSDOM(data)
const item = dom.window.document.querySelector('item')
const title = item.querySelector('title').textContent
return markdownCharEscape(
const link = item.querySelector('link').textContent
const cleanTitle = markdownCharEscape(
sanitizeHtml(title, {
allowedTags: [],
allowedAttributes: {},
})?.trim(),
)
return { text: cleanTitle, url: link }
}
export async function getJsonFeedItemTitle(feedUrl, showImage = true) {
const res = await fetch(feedUrl)
const data = await res.json()
const post = data.items[0]
const { title, image } = post
const { title, image, url } = post
const cleanTitle = markdownCharEscape(title)
if (!showImage) {
return cleanTitle
}
return image ? `${cleanTitle} ![${cleanTitle}](${image})` : cleanTitle
const text = !showImage
? cleanTitle
: image
? `${cleanTitle} ![${cleanTitle}](${image})`
: cleanTitle
return { text, url }
}
export async function getJsonFeedItemContent(feedUrl, showImage = true) {
@ -96,12 +100,13 @@ export async function getLetterboxdActivity(username, showImage = true) {
const dom = new JSDOM(data)
const item = dom.window.document.querySelector('item')
const title = item.querySelector('title').textContent
const link = item.querySelector('link').textContent
const cleanTitle = markdownCharEscape(title)
const image = item.querySelector('description > img').src
if (!showImage) {
return cleanTitle
}
return `${cleanTitle} ![${cleanTitle}](${image})`
const text = !showImage
? cleanTitle
: `${cleanTitle} ![${cleanTitle}](${image})`
return { text, url: link }
}
export async function getTraktEpisode(username, id, showImage = true) {
@ -112,11 +117,12 @@ export async function getTraktEpisode(username, id, showImage = true) {
const dom = new JSDOM(data)
const entry = dom.window.document.querySelector('entry')
const title = entry.querySelector('title').textContent
const link = entry.querySelector('link').getAttribute('href')
const cleanTitle = markdownCharEscape(title)
if (!showImage) {
return cleanTitle
}
return `${cleanTitle} ![${cleanTitle}](https://widgets.trakt.tv/users/${id}/watched/thumb@2x.jpg?type=episode&image_only=1)`
const text = !showImage
? cleanTitle
: `${cleanTitle} ![${cleanTitle}](https://widgets.trakt.tv/users/${id}/watched/thumb@2x.jpg?type=episode&image_only=1)`
return { text, url: link }
}
export async function getTraktMovie(username, showImage = true) {
@ -127,13 +133,17 @@ export async function getTraktMovie(username, showImage = true) {
const dom = new JSDOM(data)
const entry = dom.window.document.querySelector('entry')
const title = entry.querySelector('title').textContent
return markdownCharEscape(title)
const link = entry.querySelector('link').getAttribute('href')
return { text: markdownCharEscape(title), url: link }
}
export async function getTraktEpisodeAndMovie(username, id, showImage = true) {
const episode = await getTraktEpisode(username, id, showImage)
const movie = await getTraktMovie(username, showImage)
return `${episode} <br>and<br> ${movie}`
return {
text: `${episode.text} <br>and<br> ${movie.text}`,
url: `https://trakt.tv/users/${username}`,
}
}
export async function getReadingBooklogr(booklogrUrl, booklogrUser) {