Add service-specific Atom setup and presentation (YouTube first) #30

Closed
opened 2026-09-28 16:56:07 +00:00 by Michael Westergaard · 1 comment
Owner

Goal

Make Atom-backed services easy to add as profile sources. YouTube is the first adapter: users enter a channel URL or handle instead of finding an Atom URL, and imported videos display as YouTube uploads rather than generic feed entries.

Acceptance

  • Resolve a channel URL directly to its stable channel ID; support handles through a documented official resolution method, with any API key/quota requirement configured and explained. Build the documented feed URL https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID. Reject ambiguous or invalid input rather than silently following another channel.
  • Reuse the generic Atom parser and the #25/#26 ingest/publication path. Keep service-specific URL resolution, entry metadata, and presentation behind a small adapter contract that another Atom-backed service could implement.
  • Show channel name and original channel URL at setup; present each entry as a video with title, original watch link, source attribution, and available thumbnail/description metadata. Do not mirror video files. Do not claim channel ownership solely because its feed is public.
  • Normalize YouTube yt:videoId/yt:channelId as stable IDs, so feed edits and handle changes do not duplicate posts. Unit tests cover URL/handle resolution, invalid channels, YouTube-shaped Atom entries, updates, and the rendered/federated link. Keep live service tests outside commit CI.

Depends on #25, #26, and #28. Official feed format: https://developers.google.com/youtube/v3/guides/push_notifications ; official handle lookup: https://developers.google.com/youtube/v3/docs/channels/list

## Goal Make Atom-backed services easy to add as profile sources. YouTube is the first adapter: users enter a channel URL or handle instead of finding an Atom URL, and imported videos display as YouTube uploads rather than generic feed entries. ## Acceptance - Resolve a channel URL directly to its stable channel ID; support handles through a documented official resolution method, with any API key/quota requirement configured and explained. Build the documented feed URL `https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID`. Reject ambiguous or invalid input rather than silently following another channel. - Reuse the generic Atom parser and the #25/#26 ingest/publication path. Keep service-specific URL resolution, entry metadata, and presentation behind a small adapter contract that another Atom-backed service could implement. - Show channel name and original channel URL at setup; present each entry as a video with title, original watch link, source attribution, and available thumbnail/description metadata. Do not mirror video files. Do not claim channel ownership solely because its feed is public. - Normalize YouTube `yt:videoId`/`yt:channelId` as stable IDs, so feed edits and handle changes do not duplicate posts. Unit tests cover URL/handle resolution, invalid channels, YouTube-shaped Atom entries, updates, and the rendered/federated link. Keep live service tests outside commit CI. Depends on #25, #26, and #28. Official feed format: https://developers.google.com/youtube/v3/guides/push_notifications ; official handle lookup: https://developers.google.com/youtube/v3/docs/channels/list
Author
Owner

Implemented on michael through 1055c13. YouTube channel-ID, handle, custom /c/, and legacy /user/ links now resolve to validated upload feeds, including mobile/Music hosts, common channel tabs, share parameters, and international handles. Video/playlist/embed links remain ordinary links. Public custom/legacy page lookup is bounded, rate-limited, and uses the protected network handler; handles use the official Data API. Compatibility and configuration docs and unit/live interoperability tests were updated.

Red CI: 1343, 1344, 1347. Final green CI 1348 and integration 1349 passed on 1055c13.

Implemented on `michael` through `1055c13`. YouTube channel-ID, handle, custom `/c/`, and legacy `/user/` links now resolve to validated upload feeds, including mobile/Music hosts, common channel tabs, share parameters, and international handles. Video/playlist/embed links remain ordinary links. Public custom/legacy page lookup is bounded, rate-limited, and uses the protected network handler; handles use the official Data API. Compatibility and configuration docs and unit/live interoperability tests were updated. Red CI: [1343](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1203), [1344](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1204), [1347](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1207). Final green [CI 1348](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1208) and [integration 1349](https://git.westergaard.cloud/klafbang/fediprofile/actions/runs/1209) passed on `1055c13`.
Sign in to join this conversation.
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
klafbang/fediprofile#30
No description provided.