Skip to content

New function get_icon_url() for feed favicon#73

Merged
Alkarex merged 2 commits intofreshrssfrom
merge-get_icon_url
Apr 1, 2026
Merged

New function get_icon_url() for feed favicon#73
Alkarex merged 2 commits intofreshrssfrom
merge-get_icon_url

Conversation

@Alkarex
Copy link
Copy Markdown
Member

@Alkarex Alkarex commented Mar 29, 2026

Only atom:icon and a square rss2:image can be used to represent a favicon.

The existing get_image_url() is more for logos / banners, not favicon.

Examples of real-world feeds:

Downstream:

Upstream:

Alkarex added 2 commits March 29, 2026 20:11
Only atom:icon and a square rss2:image can be used to represent a favicon.
The existing get_image_url() is more for logos / banners, not favicon.
Example of real-world feeds:
* https://feedpress.me/frandroid
* https://www.lesnumeriques.com/rss.xml

Downstream:
* FreshRSS/FreshRSS#5518
* FreshRSS/FreshRSS#8633
Alkarex added a commit to bowencool/FreshRSS that referenced this pull request Mar 29, 2026
Alkarex added a commit to FreshRSS/FreshRSS that referenced this pull request Mar 31, 2026
…go, JSON Feed icon) (#8633)

* prefer feed.icon
Closes #5518

Changes proposed in this pull request:

- When a feed provides an icon URL (<image><url> in RSS 2.0/1.0, <atom:icon>/<atom:logo> in Atom, icon/favicon fields in JSON Feed), that URL is stored as a feedIconUrl attribute on the feed and used as the primary source for favicon downloads, instead of scraping the feed's website for <link rel="icon"> tags.
- If the feed-provided icon URL fails to return a valid image, the existing fallback chain (website HTML favicon search → /favicon.ico) is preserved.
Custom favicons uploaded by users always take priority and are never overridden.

How to test the feature manually:

1. Add an RSS feed that includes a <image><url> element (e.g. an RSSHub feed: `https://rsshub.app/youtube/channel/UC2cRwTuSWxxEtrRnT4lrlQA`). After actualization, confirm the feed's favicon matches the avatar image from the feed, not the Bilibili site favicon.
2. Add an Atom feed containing <atom:icon> or <atom:logo> Confirm the feed icon is used.
3. Add a JSON Feed (spec: icon field). Confirm icon is preferred over favicon when both are present.
4. Temporarily point a feed's <image><url> to a broken URL. Confirm FreshRSS falls back to the website favicon silently.
5. Upload a custom favicon for a feed, then actualize it. Confirm the custom favicon is not replaced.

<img width="470" height="317" alt="image" src="https://github.com/user-attachments/assets/17445154-d94c-44d6-b7e7-019bf24c5767" />

* fix(favicon): use htmlspecialchars_decode for feed image URL

* Decode quotes as well

* New function in our SimplePie fork
FreshRSS/simplepie#73

---------

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
@Alkarex Alkarex merged commit 731f1a6 into freshrss Apr 1, 2026
20 checks passed
@Alkarex Alkarex deleted the merge-get_icon_url branch April 1, 2026 09:57
Alkarex added a commit to Alkarex/FreshRSS that referenced this pull request Apr 1, 2026
Alkarex added a commit to FreshRSS/FreshRSS that referenced this pull request Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant