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