Add media:content
thumbnail to RSS feed (#4413)
* Add media:content thumbnail to RSS feed * Run formatter * Add media namespace definition * Add comment linking to media-rss documentation
This commit is contained in:
parent
eb0dc2fda4
commit
0e9924a2b3
1 changed files with 29 additions and 1 deletions
|
@ -26,7 +26,12 @@ use lemmy_utils::{
|
||||||
utils::markdown::{markdown_to_html, sanitize_html},
|
utils::markdown::{markdown_to_html, sanitize_html},
|
||||||
};
|
};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use rss::{extension::dublincore::DublinCoreExtension, Channel, Guid, Item};
|
use rss::{
|
||||||
|
extension::{dublincore::DublinCoreExtension, ExtensionBuilder, ExtensionMap},
|
||||||
|
Channel,
|
||||||
|
Guid,
|
||||||
|
Item,
|
||||||
|
};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::{collections::BTreeMap, str::FromStr};
|
use std::{collections::BTreeMap, str::FromStr};
|
||||||
|
|
||||||
|
@ -80,6 +85,10 @@ static RSS_NAMESPACE: Lazy<BTreeMap<String, String>> = Lazy::new(|| {
|
||||||
"dc".to_string(),
|
"dc".to_string(),
|
||||||
rss::extension::dublincore::NAMESPACE.to_string(),
|
rss::extension::dublincore::NAMESPACE.to_string(),
|
||||||
);
|
);
|
||||||
|
h.insert(
|
||||||
|
"media".to_string(),
|
||||||
|
"http://search.yahoo.com/mrss/".to_string(),
|
||||||
|
);
|
||||||
h
|
h
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -509,6 +518,24 @@ fn create_post_items(
|
||||||
description.push_str(&html);
|
description.push_str(&html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut extensions = ExtensionMap::new();
|
||||||
|
|
||||||
|
// If there's a thumbnail URL, add a media:content tag to display it.
|
||||||
|
// See https://www.rssboard.org/media-rss#media-content for details.
|
||||||
|
if let Some(url) = p.post.thumbnail_url {
|
||||||
|
let mut thumbnail_ext = ExtensionBuilder::default();
|
||||||
|
thumbnail_ext.name("media:content".to_string());
|
||||||
|
thumbnail_ext.attrs(BTreeMap::from([
|
||||||
|
("url".to_string(), url.to_string()),
|
||||||
|
("medium".to_string(), "image".to_string()),
|
||||||
|
]));
|
||||||
|
|
||||||
|
extensions.insert(
|
||||||
|
"media".to_string(),
|
||||||
|
BTreeMap::from([("content".to_string(), vec![thumbnail_ext.build()])]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let i = Item {
|
let i = Item {
|
||||||
title: Some(sanitize_html(&p.post.name)),
|
title: Some(sanitize_html(&p.post.name)),
|
||||||
pub_date: Some(p.post.published.to_rfc2822()),
|
pub_date: Some(p.post.published.to_rfc2822()),
|
||||||
|
@ -517,6 +544,7 @@ fn create_post_items(
|
||||||
description: Some(description),
|
description: Some(description),
|
||||||
dublin_core_ext,
|
dublin_core_ext,
|
||||||
link,
|
link,
|
||||||
|
extensions,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue