diff --git a/packages/markitdown/src/markitdown/converters/_rss_converter.py b/packages/markitdown/src/markitdown/converters/_rss_converter.py index ce768b847..b234fe4cd 100644 --- a/packages/markitdown/src/markitdown/converters/_rss_converter.py +++ b/packages/markitdown/src/markitdown/converters/_rss_converter.py @@ -180,9 +180,13 @@ def _parse_atom_type( entry_summary, summary_is_markup = self._get_atom_content(entry, "summary") entry_updated = self._get_flattened_text(entry, "updated") entry_content, content_is_markup = self._get_atom_content(entry, "content") + entry_link = self._get_entry_link(entry, base_url=doc.documentURI or "") if entry_title: - md_text += f"\n## {entry_title}\n" + heading = f"## {entry_title}" + if entry_link: + heading = f"## [{entry_title}]({entry_link})" + md_text += f"\n{heading}\n" if entry_updated: md_text += f"Updated on: {entry_updated}\n" body_parts = ( @@ -208,6 +212,19 @@ def _parse_atom_type( title=title, ) + def _get_entry_link(self, entry: Element, *, base_url: str) -> str | None: + """Return the entry's own URL: an Atom , or an RSS 's text.""" + if entry.namespaceURI == ATOM_NAMESPACE: + node = self._get_child(entry, "link") + if node is None: + return None + href = (node.getAttribute("href") or "").strip() + return _resolve_url(base_url, href) if href else None + text = self._get_flattened_text(entry, "link") + if not text: + return None + return _resolve_url(base_url, text.strip()) + def _get_atom_content( self, entry: Element, tag_name: str ) -> tuple[Union[str, None], bool]: @@ -308,9 +325,13 @@ def _parse_rss_type( description = self._get_data_by_tag_name(item, "description", kind="html") pubDate = self._get_flattened_text(item, "pubDate") content = self._get_data_by_tag_name(item, "content:encoded", kind="html") + item_link = self._get_entry_link(item, base_url=doc.documentURI or "") if title: - md_text += f"\n## {title}\n" + heading = f"## {title}" + if item_link: + heading = f"[{title}]({item_link})" + md_text += f"\n{heading}\n" if pubDate: md_text += f"Published on: {pubDate}\n" body_parts = (