[GH-ISSUE #122] Youtube RSS feed doesn't work #29

Closed
opened 2026-09-29 12:58:48 +00:00 by slurdge · 4 comments
Owner

Originally created by @valodiadeseynes on GitHub (Mar 12, 2023).
Original GitHub issue: https://github.com/slurdge/goeland/issues/122

Hi,

I'm trying to get emails for the following feed : https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg

Unfortunately the email I receive only contain the goeland logo and footer.

Here's the content of one of these email :

Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html><html lang=3D"en"><head><title>Portable Nuclear Weapons | Pl=
ainly Difficult Short</title><meta charset=3D"utf-8"/><meta name=3D"viewpor=
t" content=3D"width=3Ddevice-width,initial-scale=3D1"/><meta http-equiv=3D"=
x-ua-compatible" content=3D"IE=3Dedge"/><style type=3D"text/css">"a:hover" =
{
text-decoration: none !important
}@media screen and (min-width:600px){
h1 {
font-size: 48px !important;
line-height: 48px !important
}
.intro {
font-size: 24px !important;
line-height: 36px !important
}
}
</style></head><body style=3D"-webkit-text-size-adjust:100%;-ms-text-size-a=
djust:100%;overflow-wrap:break-word;height:100%;width:100%;margin:0;padding=
:0"><!--[if (gte mso 9)|(IE)]&gt;&lt;table cellspacing=3D0 cellpadding=3D0 =
border=3D0 width=3D720 align=3Dcenter role=3Dpresentation&gt;&lt;tr&gt;&lt;=
td&gt;&lt;![endif]--><div role=3D"article" aria-label=3D"Portable" nuclear=
=3D"" weapons=3D"" |=3D"" plainly=3D"" difficult=3D"" short=3D"" lang=3D"en=
" style=3D"font-family: &#39;Avenir Next&#39;, -apple-system, BlinkMacSyste=
mFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif, &#39;Apple=
 Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; fon=
t-size: 18px; font-weight: 400; line-height: 28px; margin: 0 auto; max-widt=
h: 720px; padding: 40px 20px 40px 20px;"><header><a href=3D"https://www.git=
hub.com/slurdge/goeland" style=3D"-webkit-text-size-adjust:100%;-ms-text-si=
ze-adjust:100%;color:rgb(16, 120, 189);font-weight:600;text-decoration:unde=
rline"><center><img style=3D"-ms-interpolation-mode:bicubic;border:0;height=
:auto;line-height:100%;outline:none;text-decoration:none;max-width:100%;bac=
kground-color:white;padding:16px;border-radius:16px" src=3D"cid:20230312.20=
0411.1@mail.0"/></center></a>
</header><main></main><footer style=3D"margin-top: 24px; padding: 16px; bor=
der-radius: 16px;"><center><p style=3D"font-size: 16px; font-weight: 400; l=
ine-height: 16px;">Enjoy your =F0=9F=93=A7 by <a href=3D"https://www.github=
.com/slurdge/goeland" style=3D"-webkit-text-size-adjust:100%;-ms-text-size-=
adjust:100%;color:rgb(16, 120, 189);font-weight:600;text-decoration:underli=
ne">goeland</a></p></center></footer></div><!--[if (gte mso 9)|(IE)]&gt;&lt=
;/table&gt;&lt;![endif]--></body></html>
--2eb3659b3f9ed2b1fd5958bb7479e3a2bdb9cb44b07ae7141f18ae081ba2--

--26b4b4ee37adb6c6ba198b9fc94b43fc695f2f35bbc27842d0e44c47a5dc
Content-Disposition: inline;
 	filename="logo.png"
Content-Id: <20230312.200411.1@mail.0>
Content-Transfer-Encoding: base64
Content-Type: image/png;
 	name="logo.png"

iVBORw0KGgoAAAANSUhEUgAAAPoAAABoCAMAAADvnB1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAAF1QTFRF////TU1Npqam9PT0WFhYenp6bm5u09PT3t7e95MevLy8kJCQ
6enpY2NjhYWFsbGxm5ubx8fH+a5W/eTHonA2+rxy//jxzYIq+Jos/uvV+8mPwn0tpZmK/NCd////
u6G8bwAAAB90Uk5T////////////////////////////////////////AM0ZdhAAAAL4SURBVHja
7J3ZduMgDIZZjYONl7bT2fv+jznTbAfb9cLmGCn/VXuaQ/UZkEREFPKBVsT6EYem6ASRBugElyx0
gk43dEIwshOk5Bd0glOI0T/hn+jI0WvmLK3qh9jNVe9urJpF76mfZNfzPbEVk8LP0mpuSM/xzira
fWaf6ybETDXzMGmYpE4OXlYizEY2My4NlWFJF76SwRbOoBMTPDIV7ZHBKZ3blaWIMLhRScDrJoJt
VC/4ENdw0cliMn6XYNW3k1kRsnI1Nr4nVu1oRkwZ262P/kGxczRdVD80Lu6OL80jwqjDZmRiS+7g
IT0YWJEDitvwMtqK1DZ4TQ4qXlnrkkcnLxQ5sJSJzK7X05HDTHwTlV2nCxsJxCKy6wS+I6V0NHad
JGIk3fAiDnt+5PZhIIQ9R/I47HmSx2DPlTycPV/yUPacycPY8yYPYc+d3J89f3JfdgjkfuwwyH3Y
oZC7s8Mhn2cv1VSwyGfYe+NbE82dvaYoyL9i71bLghwqe/PIuuVj2dstlxVKkOx8Sz1baJjslZxq
8jw6qL7uC3HFJEBHvzWvG9QtwbGveG+7bsmAscu1V9Zy7bpXruxy/aX3pEdwUOxb0pX7QaaBlNts
810tsCVPeMvU0l+l7G43Jyq6eXsAeC7nm2iitH8DNO1LYsPdrYDt9iXdQhoZLXmOD71evd8JRtdZ
NuNngWDF15ew34+Du0Cw2cv/02x6y+Wv3OWGLIMnvI3VgDq/+UT6P6+f+okR/e101je86KdfeNFf
EKFXeNGv6dzvE77Nfk1pvl/If7zjIb99wPjlrL/v+LZ6gS+h4QJUAcojtNES7aQbtGcX2qIj18Dq
Lw5vWwiK9MR6JzdoydG9Q9NCu1SyVVZ5HVciVyf4PHQW3Nq+TgiDXG9q+jG8PwaCnBc+7Y1AzHkV
sXNQZnLvJCShHNdc0Q2curLbgm/6PWz6OJqbE43eybvt1ltSH65d47OtJkr0Z/dglOiI22WjZMfb
Gv/5hQhYvwbjnwADABz/SJCHx6o2AAAAAElFTkSuQmCC
--26b4b4ee37adb6c6ba198b9fc94b43fc695f2f35bbc27842d0e44c47a5dc--

And here's my config.toml :

## Log level
## Either "none", "error", "debug", "info"
loglevel = "none"

## Dry run
## Do not output anything or send email after fecthing the sources
#dry-run = false

## Do not sanitize input
## This is not sanitize (the default) any input.
## Use at your own risk as you will include everything from your sources, including scripts, etc.
## You can always sanitize afterwards with the 'sanitize' filter.
unsafe-no-sanitize-filter = false

## Run all the pipes once at startup in daemon mode
run-at-startup = false

## Purge days
## Number of days to keep the entries when the purge command is used
## Can be overrided by command line switch
purge-days = 90

## Auto purge
## Automatically run the purge command after the run command
auto-purge = true

[email]
host = ""
port = 587
username = ""
password = ""
## Include header in email
## Put a nice goeland logo in emails
#include-header = true

## Include footer in email
## Put "Sent with ❤️ by goeland in the bottom of HTML emails"
#include-footer = true

## Include title in header
include-title = true

## Email timeout in milliseconds
#timeout-ms = 5000

## Logo file
#logo = internal:goeland.png

## Template file
#template = "/path/to/template.html"

[sources]

[sources.hackernews]
url = "https://hnrss.org/newest"
type = "feed"
# See doc for available filters
filters = ["all", "today"]
# Allow invalid certificates
allow-insecure = false

[sources.youtube]
url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg"
type = "feed"
# See doc for available filters
filters = ["all"]
# Allow invalid certificates
allow-insecure = false

[pipes]

[pipes.youtube]
#Either put disabled = true or prefix pipes with disalbed like this: disabled.pipes.hackernews
disabled = false
source = "youtube"
destination = "email"
email_to = [""]
Originally created by @valodiadeseynes on GitHub (Mar 12, 2023). Original GitHub issue: https://github.com/slurdge/goeland/issues/122 Hi, I'm trying to get emails for the following feed : https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg Unfortunately the email I receive only contain the goeland logo and footer. Here's the content of one of these email : ``` Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=UTF-8 <!DOCTYPE html><html lang=3D"en"><head><title>Portable Nuclear Weapons | Pl= ainly Difficult Short</title><meta charset=3D"utf-8"/><meta name=3D"viewpor= t" content=3D"width=3Ddevice-width,initial-scale=3D1"/><meta http-equiv=3D"= x-ua-compatible" content=3D"IE=3Dedge"/><style type=3D"text/css">"a:hover" = { text-decoration: none !important }@media screen and (min-width:600px){ h1 { font-size: 48px !important; line-height: 48px !important } .intro { font-size: 24px !important; line-height: 36px !important } } </style></head><body style=3D"-webkit-text-size-adjust:100%;-ms-text-size-a= djust:100%;overflow-wrap:break-word;height:100%;width:100%;margin:0;padding= :0"><!--[if (gte mso 9)|(IE)]&gt;&lt;table cellspacing=3D0 cellpadding=3D0 = border=3D0 width=3D720 align=3Dcenter role=3Dpresentation&gt;&lt;tr&gt;&lt;= td&gt;&lt;![endif]--><div role=3D"article" aria-label=3D"Portable" nuclear= =3D"" weapons=3D"" |=3D"" plainly=3D"" difficult=3D"" short=3D"" lang=3D"en= " style=3D"font-family: &#39;Avenir Next&#39;, -apple-system, BlinkMacSyste= mFont, &#39;Segoe UI&#39;, Roboto, Helvetica, Arial, sans-serif, &#39;Apple= Color Emoji&#39;, &#39;Segoe UI Emoji&#39;, &#39;Segoe UI Symbol&#39;; fon= t-size: 18px; font-weight: 400; line-height: 28px; margin: 0 auto; max-widt= h: 720px; padding: 40px 20px 40px 20px;"><header><a href=3D"https://www.git= hub.com/slurdge/goeland" style=3D"-webkit-text-size-adjust:100%;-ms-text-si= ze-adjust:100%;color:rgb(16, 120, 189);font-weight:600;text-decoration:unde= rline"><center><img style=3D"-ms-interpolation-mode:bicubic;border:0;height= :auto;line-height:100%;outline:none;text-decoration:none;max-width:100%;bac= kground-color:white;padding:16px;border-radius:16px" src=3D"cid:20230312.20= 0411.1@mail.0"/></center></a> </header><main></main><footer style=3D"margin-top: 24px; padding: 16px; bor= der-radius: 16px;"><center><p style=3D"font-size: 16px; font-weight: 400; l= ine-height: 16px;">Enjoy your =F0=9F=93=A7 by <a href=3D"https://www.github= .com/slurdge/goeland" style=3D"-webkit-text-size-adjust:100%;-ms-text-size-= adjust:100%;color:rgb(16, 120, 189);font-weight:600;text-decoration:underli= ne">goeland</a></p></center></footer></div><!--[if (gte mso 9)|(IE)]&gt;&lt= ;/table&gt;&lt;![endif]--></body></html> --2eb3659b3f9ed2b1fd5958bb7479e3a2bdb9cb44b07ae7141f18ae081ba2-- --26b4b4ee37adb6c6ba198b9fc94b43fc695f2f35bbc27842d0e44c47a5dc Content-Disposition: inline; filename="logo.png" Content-Id: <20230312.200411.1@mail.0> Content-Transfer-Encoding: base64 Content-Type: image/png; name="logo.png" iVBORw0KGgoAAAANSUhEUgAAAPoAAABoCAMAAADvnB1HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAF1QTFRF////TU1Npqam9PT0WFhYenp6bm5u09PT3t7e95MevLy8kJCQ 6enpY2NjhYWFsbGxm5ubx8fH+a5W/eTHonA2+rxy//jxzYIq+Jos/uvV+8mPwn0tpZmK/NCd//// u6G8bwAAAB90Uk5T////////////////////////////////////////AM0ZdhAAAAL4SURBVHja 7J3ZduMgDIZZjYONl7bT2fv+jznTbAfb9cLmGCn/VXuaQ/UZkEREFPKBVsT6EYem6ASRBugElyx0 gk43dEIwshOk5Bd0glOI0T/hn+jI0WvmLK3qh9jNVe9urJpF76mfZNfzPbEVk8LP0mpuSM/xzira fWaf6ybETDXzMGmYpE4OXlYizEY2My4NlWFJF76SwRbOoBMTPDIV7ZHBKZ3blaWIMLhRScDrJoJt VC/4ENdw0cliMn6XYNW3k1kRsnI1Nr4nVu1oRkwZ262P/kGxczRdVD80Lu6OL80jwqjDZmRiS+7g IT0YWJEDitvwMtqK1DZ4TQ4qXlnrkkcnLxQ5sJSJzK7X05HDTHwTlV2nCxsJxCKy6wS+I6V0NHad JGIk3fAiDnt+5PZhIIQ9R/I47HmSx2DPlTycPV/yUPacycPY8yYPYc+d3J89f3JfdgjkfuwwyH3Y oZC7s8Mhn2cv1VSwyGfYe+NbE82dvaYoyL9i71bLghwqe/PIuuVj2dstlxVKkOx8Sz1baJjslZxq 8jw6qL7uC3HFJEBHvzWvG9QtwbGveG+7bsmAscu1V9Zy7bpXruxy/aX3pEdwUOxb0pX7QaaBlNts 810tsCVPeMvU0l+l7G43Jyq6eXsAeC7nm2iitH8DNO1LYsPdrYDt9iXdQhoZLXmOD71evd8JRtdZ NuNngWDF15ew34+Du0Cw2cv/02x6y+Wv3OWGLIMnvI3VgDq/+UT6P6+f+okR/e101je86KdfeNFf EKFXeNGv6dzvE77Nfk1pvl/If7zjIb99wPjlrL/v+LZ6gS+h4QJUAcojtNES7aQbtGcX2qIj18Dq Lw5vWwiK9MR6JzdoydG9Q9NCu1SyVVZ5HVciVyf4PHQW3Nq+TgiDXG9q+jG8PwaCnBc+7Y1AzHkV sXNQZnLvJCShHNdc0Q2curLbgm/6PWz6OJqbE43eybvt1ltSH65d47OtJkr0Z/dglOiI22WjZMfb Gv/5hQhYvwbjnwADABz/SJCHx6o2AAAAAElFTkSuQmCC --26b4b4ee37adb6c6ba198b9fc94b43fc695f2f35bbc27842d0e44c47a5dc-- ``` And here's my config.toml : ``` ## Log level ## Either "none", "error", "debug", "info" loglevel = "none" ## Dry run ## Do not output anything or send email after fecthing the sources #dry-run = false ## Do not sanitize input ## This is not sanitize (the default) any input. ## Use at your own risk as you will include everything from your sources, including scripts, etc. ## You can always sanitize afterwards with the 'sanitize' filter. unsafe-no-sanitize-filter = false ## Run all the pipes once at startup in daemon mode run-at-startup = false ## Purge days ## Number of days to keep the entries when the purge command is used ## Can be overrided by command line switch purge-days = 90 ## Auto purge ## Automatically run the purge command after the run command auto-purge = true [email] host = "" port = 587 username = "" password = "" ## Include header in email ## Put a nice goeland logo in emails #include-header = true ## Include footer in email ## Put "Sent with ❤️ by goeland in the bottom of HTML emails" #include-footer = true ## Include title in header include-title = true ## Email timeout in milliseconds #timeout-ms = 5000 ## Logo file #logo = internal:goeland.png ## Template file #template = "/path/to/template.html" [sources] [sources.hackernews] url = "https://hnrss.org/newest" type = "feed" # See doc for available filters filters = ["all", "today"] # Allow invalid certificates allow-insecure = false [sources.youtube] url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg" type = "feed" # See doc for available filters filters = ["all"] # Allow invalid certificates allow-insecure = false [pipes] [pipes.youtube] #Either put disabled = true or prefix pipes with disalbed like this: disabled.pipes.hackernews disabled = false source = "youtube" destination = "email" email_to = [""] ```
Author
Owner

@slurdge commented on GitHub (Mar 12, 2023):

Thank you, good report. I've never tried Youtube RSS, but with your config I'll see what the bug is. I kind of remember that youtube embed (only embedding a video) would cause trouble with email, I'll see if it's related.

<!-- gh-comment-id:1465314488 --> @slurdge commented on GitHub (Mar 12, 2023): Thank you, good report. I've never tried Youtube RSS, but with your config I'll see what the bug is. I kind of remember that youtube embed (only embedding a video) would cause trouble with email, I'll see if it's related.
Author
Owner

@slurdge commented on GitHub (Mar 14, 2023):

Hello,

I have downloaded the RSS feed and I see the problem. The Youtube RSS has no content and no description. There is a description inside the media:description (so description for the media) but it does not include the link toward the video.

Also, it uses a weird way to include the thumbnail image... Right now it is unsupported by goeland.
So there is two solutions:

  1. I add specific code to try to retrieve both description and media content in order to be able to populate the feed
  2. Use another RSS feed provider for Youtube. The good news is that the excellent rssbridge does support that.

For example, your feed can be changed to:

[sources.youtube]
#url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg"
url = "https://rssbridge.boldair.dev/?action=display&bridge=YoutubeBridge&context=By+channel+id&c=UCb0MyY46T9ZYOzDHkYnIoXg&duration_min=&duration_max=&format=Mrss"
type = "feed"
# See doc for available filters
filters = ["includelink", "digest"]
# Allow invalid certificates
allow-insecure = false

And it will give you a full email (which should work with plain text too) with the link to the videos.

I'll leave this bug open for now as others may want to have Youtube feeds.

<!-- gh-comment-id:1468250008 --> @slurdge commented on GitHub (Mar 14, 2023): Hello, I have downloaded the RSS feed and I see the problem. The Youtube RSS has no content and no description. There is a description inside the media:description (so description for the media) but it does not include the link toward the video. Also, it uses a weird way to include the thumbnail image... Right now it is unsupported by goeland. So there is two solutions: 1. I add specific code to try to retrieve both description and media content in order to be able to populate the feed 2. Use another RSS feed provider for Youtube. The good news is that the excellent rssbridge does support that. For example, your feed can be changed to: ``` [sources.youtube] #url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCb0MyY46T9ZYOzDHkYnIoXg" url = "https://rssbridge.boldair.dev/?action=display&bridge=YoutubeBridge&context=By+channel+id&c=UCb0MyY46T9ZYOzDHkYnIoXg&duration_min=&duration_max=&format=Mrss" type = "feed" # See doc for available filters filters = ["includelink", "digest"] # Allow invalid certificates allow-insecure = false ``` And it will give you a full email (which _should_ work with plain text too) with the link to the videos. I'll leave this bug open for now as others may want to have Youtube feeds.
Author
Owner

@slurdge commented on GitHub (Mar 14, 2023):

I'm working on a solution for feeds like Youtube. Stay tuned.

<!-- gh-comment-id:1468974719 --> @slurdge commented on GitHub (Mar 14, 2023): I'm working on a solution for feeds like Youtube. Stay tuned.
Author
Owner

@slurdge commented on GitHub (Mar 16, 2023):

It should work in next version.

<!-- gh-comment-id:1472098545 --> @slurdge commented on GitHub (Mar 16, 2023): It should work in next version.
Sign in to join this conversation.
No milestone
No project
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: slurdge/goeland#29
No description provided.