Changeset 59d963f in Klonkt for src/routes/feed.js
- Timestamp:
- 08/10/2026 09:38:43 AM (4 weeks ago)
- Branches:
- main
- Children:
- c34ef26
- Parents:
- 86ec01b
- File:
-
- 1 edited
-
src/routes/feed.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/feed.js
r86ec01b r59d963f 44 44 45 45 // ==================== RSS 2.0 ==================== 46 router.get('/feed.xml', (req, res) => { 46 /** 47 * Twee feeds, een bouwer. 48 * 49 * /feed.xml de site: posts EN open tracks door elkaar, chronologisch 50 * /tracks.xml alleen de open tracks -- de hele site als muziekkanaal 51 * 52 * WAAROM DIE TWEEDE (Robins vraag, 10-8). Hij vroeg naar een "hele site, open 53 * tracks"-library voor Funkwhale. Als AS2-object helpt zo'n ding daar niet: een 54 * Funkwhale-KANAAL wijst nergens naar een library, en hun library is een eigen 55 * actor met inbox en sleutel -- de optie die op 7 augustus is afgewezen. Maar de 56 * vorm waarin Funkwhale een kanaal WEL uitgeeft is RSS met iTunes en een 57 * enclosure per item, en dat is precies wat Klonkt hier al doet. Naast een echte 58 * kanaalfeed gelegd (audio.pepemoss.com/api/v1/channels/tnd/rss): dezelfde 59 * namespaces, dezelfde enclosure. 60 * 61 * Het enige verschil was dat onze feed ook gewone posts draagt. Een muziekkanaal 62 * met blogberichten ertussen is er geen, dus die feed staat er nu apart -- een 63 * URL om te plakken, zonder dat er iets naar buiten geduwd wordt. 64 */ 65 function stuurFeed(req, res, { alleenTracks }) { 47 66 const site = res.locals.site; 48 67 if (!site) return res.status(404).send('No site'); … … 50 69 const origin = siteOrigin(req); 51 70 const base = origin + (res.locals.siteUrlBase || ''); 52 const posts = postsForFeed(site.id);71 const posts = alleenTracks ? [] : postsForFeed(site.id); 53 72 54 73 // De tracks die deze site aan de federatie heeft opengezet, elk als eigen … … 65 84 // poortregel en die hoort op een plek te staan. 66 85 const tracks = siteOpenTracks(site.id); 67 const lastBuild = posts[0]?.published_at || new Date().toISOString();86 const lastBuild = posts[0]?.published_at || tracks[0]?.created_at || new Date().toISOString(); 68 87 69 88 // De itunes-velden waar een podcast-app een kanaal aan herkent. Funkwhale … … 117 136 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"> 118 137 <channel> 119 <title>${escapeXml( site.title)}</title>138 <title>${escapeXml(alleenTracks ? `${site.title} \u2014 muziek` : site.title)}</title> 120 139 <link>${escapeXml(base + '/')}</link> 121 140 <description>${escapeXml(site.description || site.tagline || '')}</description> 122 141 <language>${escapeXml(site.language || 'nl')}</language> 123 142 <lastBuildDate>${new Date(lastBuild).toUTCString()}</lastBuildDate> 124 <atom:link href="${escapeXml(base + '/feed.xml')}" rel="self" type="application/rss+xml" />143 <atom:link href="${escapeXml(base + (alleenTracks ? '/tracks.xml' : '/feed.xml'))}" rel="self" type="application/rss+xml" /> 125 144 ${kanaalTags} 126 145 ${items} 127 146 </channel> 128 147 </rss>`); 129 }); 148 } 149 150 router.get('/feed.xml', (req, res) => stuurFeed(req, res, { alleenTracks: false })); 151 // De hele site als muziekkanaal: alleen wat op de federatie openstaat. 152 router.get('/tracks.xml', (req, res) => stuurFeed(req, res, { alleenTracks: true })); 130 153 131 154 // ==================== Atom 1.0 ====================
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)