Compare commits

..

1 commit

Author SHA1 Message Date
dylan
df0bc8beab updated image and video replacement logic 2026-01-01 19:53:45 +00:00
3 changed files with 55 additions and 26 deletions

9
.env.example Normal file
View file

@ -0,0 +1,9 @@
OMGLOL_KEY=
OMGLOL_USERNAME=melanie
TRAKT_SLURM=
# optional - only needed if using steam service
STEAM_WEBAPI_KEY=
# optional - only needed if using hardcover service
HARDCOVER_API_KEY=

View file

@ -132,7 +132,12 @@ export default async function now() {
const imageId = `${item.id}-image`
const videoId = `${item.id}-video`
if (latest.image) {
// html image replacement
// html image replacement - match by data-service attribute to allow repeated updates
newNow = newNow.replace(
new RegExp(`(<img[^>]*data-service=["']${item.id}["'][^>]*\\bsrc=["'])[^"']*?(["'][^>]*>)`, 'gi'),
`$1${latest.image}$2`,
)
// also handle initial placeholder case
newNow = newNow.replace(
new RegExp(`(<img[^>]+src=["'])${imageId}(["'][^>]*>)`, 'gi'),
`$1${latest.image}$2`,
@ -143,7 +148,12 @@ export default async function now() {
`$1${latest.image}$2`,
)
} else {
// remove img tags if no image available (handle multi-line tags and any attribute order)
// remove img tags if no image available - match by data-service attribute
newNow = newNow.replace(
new RegExp(`\\s*<img\\b[^>]*\\bdata-service=["']${item.id}["'][^>]*>\\s*`, 'gis'),
'',
)
// also remove by placeholder src
newNow = newNow.replace(
new RegExp(`\\s*<img\\b[^>]*\\bsrc=["']${imageId}["'][^>]*>\\s*`, 'gis'),
'',
@ -156,13 +166,23 @@ export default async function now() {
}
if (latest.video) {
// html video replacement
// html video replacement - match by data-service attribute to allow repeated updates
newNow = newNow.replace(
new RegExp(`(<video[^>]*data-service=["']${item.id}["'][^>]*\\bsrc=["'])[^"']*?(["'][^>]*>)`, 'gi'),
`$1${latest.video}$2`,
)
// also handle initial placeholder case
newNow = newNow.replace(
new RegExp(`(<video[^>]+src=["'])${videoId}(["'][^>]*>)`, 'gi'),
`$1${latest.video}$2`,
)
} else {
// remove video tags if no video available
// remove video tags if no video available - match by data-service attribute
newNow = newNow.replace(
new RegExp(`\\s*<video\\b[^>]*\\bdata-service=["']${item.id}["'][^>]*>[\\s\\S]*?</video>\\s*`, 'gis'),
'',
)
// also remove by placeholder src
newNow = newNow.replace(
new RegExp(`\\s*<video\\b[^>]*\\bsrc=["']${videoId}["'][^>]*>[\\s\\S]*?</video>\\s*`, 'gis'),
'',

View file

@ -7,14 +7,14 @@ export const services = [
// ========================================================================
{
id: 'weblog',
isActive: false,
isActive: true,
userId: 'dylan', // your omg.lol username
feedUrlTemplate: 'https://{userId}.weblog.lol/feed.json',
feedType: 'json',
},
{
id: 'some.pics',
isActive: false,
isActive: true,
userId: 'dylan', // your omg.lol username
feedUrlTemplate: 'https://{userId}.some.pics/rss',
feedType: 'some.pics',
@ -25,9 +25,9 @@ export const services = [
// ========================================================================
{
id: 'blog',
isActive: true,
feedUrl: 'https://blog.agnes.love/feed/', // direct url to your blog's rss feed
feedType: 'atom',
isActive: false,
feedUrl: 'https://your-blog.com/feed.xml', // direct url to your blog's rss feed
feedType: 'rss',
},
// ========================================================================
@ -36,7 +36,7 @@ export const services = [
{
id: 'lastfm',
isActive: true,
userId: 'keegbovo', // your last.fm username
userId: 'lookathimthere', // your last.fm username
feedUrlTemplate: 'https://lfm.xiffy.nl/{userId}',
feedType: 'rss',
},
@ -59,11 +59,11 @@ export const services = [
// ========================================================================
{
id: 'mastodon',
isActive: true,
userId: 'alien', // your mastodon username
instance: 'lesbian.alien.dentist', // your mastodon instance
feedUrlTemplate: 'lesbian.alien.dentist/@alien.atom',
feedType: 'atom',
isActive: false,
userId: 'dylan', // your mastodon username
instance: 'social.lol', // your mastodon instance
feedUrlTemplate: 'https://{instance}/@{userId}.rss',
feedType: 'mastodon',
showImage: true,
},
{
@ -76,9 +76,9 @@ export const services = [
},
{
id: 'bluesky',
isActive: true,
userId: 'agnes.love', // your bluesky handle
feedUrlTemplate: 'https://bsky.app/profile/agnes.love/rss',
isActive: false,
userId: 'your-handle.bsky.social', // your bluesky handle
feedUrlTemplate: 'https://bsky.app/profile/{userId}/rss',
feedType: 'rss',
},
@ -87,7 +87,7 @@ export const services = [
// ========================================================================
{
id: 'letterboxd',
isActive: false,
isActive: true,
userId: 'stfudonny', // your letterboxd username
feedUrlTemplate: 'https://letterboxd.com/{userId}/rss/',
feedType: 'letterboxd',
@ -95,7 +95,7 @@ export const services = [
},
{
id: 'trakt-episode',
isActive: false,
isActive: true,
userId: 'crankle', // your trakt username
traktId: '78e1e87b446901f7e4f0883dd4995cec', // your trakt ID
feedType: 'trakt-episode',
@ -103,7 +103,7 @@ export const services = [
},
{
id: 'trakt-movie',
isActive: false,
isActive: true,
userId: 'crankle', // your trakt username
traktId: '78e1e87b446901f7e4f0883dd4995cec', // your trakt ID
feedType: 'trakt-movie',
@ -115,7 +115,7 @@ export const services = [
// ========================================================================
{
id: 'hardcover',
isActive: false,
isActive: true,
userId: '62036', // your hardcover user ID (find in your API token or profile URL)
feedUrl: 'https://api.hardcover.app/v1/graphql',
feedType: 'hardcover',
@ -123,8 +123,8 @@ export const services = [
},
{
id: 'storygraph',
isActive: true,
userId: 'telescopefish', // your storygraph username
isActive: false,
userId: 'your-username', // your storygraph username
feedUrlTemplate: 'https://app.thestorygraph.com/profile/{userId}.rss',
feedType: 'rss',
},
@ -141,7 +141,7 @@ export const services = [
// ========================================================================
{
id: 'steam',
isActive: false,
isActive: true,
userId: '76561198022952207', // your steam ID 64 (not username) - convert at steamid.io
feedType: 'steam',
},
@ -151,7 +151,7 @@ export const services = [
// ========================================================================
{
id: 'source.tube',
isActive: false,
isActive: true,
userId: 'dylan', // your source.tube username
feedUrlTemplate: 'https://source.tube/{userId}.rss',
feedType: 'source.tube',