Source code of RSS Parrot, a service that lets you turn Mastodon into your feed reader.
Details on https://rss-parrot.net/, and in the Fediverse.
Notifies Mastodon accounts about new posts in the RSS feeds they follow
Home Page: https://rss-parrot.net
License: MIT License
Source code of RSS Parrot, a service that lets you turn Mastodon into your feed reader.
Details on https://rss-parrot.net/, and in the Fediverse.
accounts created on rss-parrot are not visibile by pleroma instances
Similar to #33: let's make an exception for archive.org feeds and keep the query parameter.
Root cause: #14 (comment)
Periodically delete data from the Parrot's database to keep it lean: delete old posts from every feed. Keep the top X, and don't delete anything more recent than Y, but delete all the rest. The Parrot is a relay, not an archive.
Requested feed: https://www.captain-futura.de/feed/
Birb responds:
Hm, I can't find a feed for this site.
Taking the "for this site" part verbatim, I also tried to enter the site URL https://www.captain-futura.de/ instead of its feed URL, but got the same result.
if it is possible the language of feed should be set in the toot. This way it will create much less spam on global timeline.
Request this feed: https://www.alanwsmith.com/feeds/atom.xml
Thanks for building this, it's great!
I've got the feed available at https://codeandsupply.co/jobs birb'd via @[email protected]
. I've added //link[@rel='me']
tags to the site to indicate that RSS-parrot's profile is verified, like how other Mastodon and fediverse systems allow.
<link href='https://rss-parrot.net/@codeandsupply.co.jobs' rel='me'>
<link href='https://rss-parrot.net/web/feeds/codeandsupply.co.jobs' rel='me'>
It doesn't look like RSS-parrot supports this right now. It'd be cool if it did.
The feed https://www.google.de/alerts/feeds/15238767306718225030/1632617747796897053
gets the response
"Hm, I can't find a feed for this site.
Is the address right? It can also happen that the site is temporarily down, or it doesn't have a valid RSS or Atom feed."
Tried to follow myself: https://neuromatch.social/@jonny/111709784531341231
got this error message: https://rss-parrot.net/u/birb/status/1704442136821027061
it seems like this was the one i was supposed to get, right?:
rss-parrot/src/server/logic/inbox.go
Line 343 in 4d150e8
something not working right in that "get account for feed" function or the control flow in there :)
cool thing!!! nice work!
edit: sorry that reads as sarcastic, i meant it sincerely
It happens that @birb is mentioned in a conversation or responses. It tends to respond with a message saying "no URL found," polluting timelines unnecessarily.
Restrict the scenarios when the service replies to messages to the initial mentions.
Hi,
What a nice idea, RSS to Fediverse. I ran into an issue though. When a domain has more RSS Feeds there is only one account created. For instance I host some LastFM RSS feeds, all on the same domain: lfm.xiffy.nl
When I added https://lfm.xiffy.nl/thexiffy and https://lfm.xiffy.nl/thexiffy/loved they got mingled together as one account, which seems incorrect.
Feed discovery for github.blog appears to be incorrect, using some random person's gist feed instead?
https://rss-parrot.net/web/feeds/github.blog
Discovered: https://gist.github.com/kconner.atom
Should be
<link rel="alternate" type="application/rss+xml" title="The GitHub Blog » Feed" href="https://github.blog/feed/">
Subscribing to a feed can be frustrating as the feed might not change for some time. It means that the user starts following the feed, and nothing happens for days or even weeks.
The onboarding experience would be much nicer if the parrot immediately sent a toot with the last entry of the feed.
Test if Mastodon servers accept POST requests from us where the body is Gzipped.
This would reduce outgoing data volume, which helps with hosting fees.
A popular Burmese news website feed is not working for me. I can add the feed and it works on Fluent Reader on Linux and Feeder app on Android. RSS Parrot is returning
Hm, I can't find a feed for this site. Is the address right? It can also happen that the site is temporarily down, or it doesn't have a valid RSS or Atom feed.
Link to website - https://burma.irrawaddy.com
Link to feed - https://burma.irrawaddy.com/category/news/feed
Hi again! Now that we have multiple feed-to-fediverse bridges - RSS Parrot, Bridgy Fed, MastoFeed, rss-to-activitypub, feed2toot, feed2fedi - we'll inevitably end up with multiple fediverse accounts for the same web site, each run by a different bridge. Not a big problem, but it'd still be nice to avoid.
One approach could be to let sites indicate their "preferred" bridge with eg <link rel="me bridge">
in their home page's HTML, similar to #16. If example.com wants to use RSS Parrot to get its posts into the fediverse, it would add something like this in its HTML:
<link rel="me bridge" href="https://rss-parrot.net/web/feeds/example.com">
Then, when other bridges start to create a fediverse account for example.com, they'd first check its home page HTML for a link rel=bridge
. If one exists, and it doesn't point to them, they'd stop and give up.
One difficulty is that a site could want to use multiple bridges for different networks, eg RSS Parrot for the fediverse and https://atomstr.data.haus/ for Nostr. Maybe we'd allow multiple <link rel="me bridge">
s to handle that, maybe differentiated by type
, or maybe that differentiation isn't necessary.
Thoughts?
Use a consensus-based blocklist so the birb doesn't accept requests from bad Mastodon servers
The birb set up this account for waterwaymap.org but doesn't appear to have noticed/posted the last few updates. Any idea? Any other diagnostic I can provide.
Here's a link into the thread I had with the bot:
https://rss-parrot.net/u/birb/status/1704748268325307221
Many thanks for this lovely idea.
[@[email protected]](https://darmstadt.social/users/Atemu) Hm, I can't find a feed for this site.
Is the address right? It can also happen that the site is temporarily down, or it doesn't have a valid RSS or Atom feed.
If I send a message to RSS parrot from a GoToSocial account, I never get a response from the bot.
Logs from the GTS side suggest that RSS Parrot doesn't like the formatting of the request. Messages from GTS to other platforms like Mastodon do work, so I'm guessing it's a parse issue and not a generating issue.
I'll see about getting some more detail logs including what GoToSocial is sending.
timestamp="11/01/2024 02:47:13.361" func=federation.(*federatingActor).Send level=INFO requestID=rtj6nxmc04001n481h4g msg="send activity Create via outbox https://gts.keysmash.xyz/users/kelsonv/outbox"
timestamp="11/01/2024 02:47:13.366" func=httpclient.(*Client).DoSigned level=INFO method=POST url=https://rss-parrot.net/inbox requestID=rtj6nxmc04001n481h4g pubKeyID=https://gts.keysmash.xyz/users/kelsonv/main-key msg="performing request"
timestamp="11/01/2024 02:47:13.581" func=workers.(*clientAPI).CreateStatus level=ERROR requestID=rtj6nxmc04001n481h4g msg="error federating status: CreateStatus: error sending Create activity via outbox https://gts.keysmash.xyz/users/kelsonv/outbox: func1: error delivering to https://rss-parrot.net/inbox: deliver: POST request to https://rss-parrot.net/inbox failed: status=\"400 Bad Request\" body=\"{\"error\":\"Request body is not valid JSON\",\"status\":400}\n\""
In the background process that updates feeds, check if the account still has any followers. If it has no followers, delete the account and its related posts and toots.
This will bring the number of accounts from the current 13600+ (68 pages of 200 accounts) down to a lower value - only those that have been actually requested since the Parrot's go-alive.
Hi @gugray! RSS Parrot is great, I love seeing this kind of work in the fediverse. Congrats on launching it!
I run a similar service, https://fed.brid.gy/, and one of its features that I've already used a handful of times is opt out, ie letting people ask to prevent my service from bridging their sites or accounts. Just curious, have you considered that for RSS Parrot yet?
I'd like to opt-out, because I believe creators should be in control who's publishing what and where. That means it should be opt-in, especially because it's not hard to create another fediverse account for just publishing their own feed.
I don't think opting out by e-mail is reasonable, because it exposes an otherwise not exposed e-mail address.
I also don't think putting a hashtag on a profile is reasonable, because it litters the profile with unrelated info and won't work for many "services".
Having the automatic feed account deleted is important to achieve a full opt-out, because I don't want a feed with my name on lingering around.
You can gather the feed in question from my GitHub profile.
Curious how often this service polls for updates to the RSS feeds. Didn't see anything mentioned about it in https://rss-parrot.net/web/about.
It seems like rss-parrot creates one account per website, but that fails when a website has multiple rss feeds.
To reproduce
Message the bot with example.com/feed1.xml. An account should be created for example.com.
Message the bot with example.com/feed2.xml. You should get a reply with the previously created account which has the wrong feed.
Would be nice to have the possibility to attach media files, at least images would be a great feature. So this is a feature request for adding RSS enclosures as media attachments when sending out new toots.
Tried using rss-parrot on a lemmy community RSS feed and nothing seems to be coming through the bot when I can confirm new posts have come through on an ordinary RSS app (eg, feedly).
The bot: https://rss-parrot.net/web/feeds/lemmy.ml.c.test
The lemmy community: https://lemmy.ml/c/test
Posts made since the bot was created that haven't been posted: https://lemmy.ml/post/10189784 https://lemmy.ml/post/10191680
The two posts above did come through on feedly.
Every time I've entered a website address that I know has <link>
-based autodiscovery, I've gotten the "Hm, I can't find a feed for this site." response from the bot. Some examples:
https://wordpress.org/news/ (and every other WordPress site I've tried)
https://kvibber.com/
It has no problem if I ask it for the feed URLs, but it's not finding the <link rel="alternate"...
feeds for some reason.
I use a service out there to translate my Steam Achievements into an RSS feed. However when I ask the bird to turn this into an account online, the bird can't find anything. I'm not really all that interested in getting this feed uplifted into Mastodon, however I will say that the feed is valid, however I suspect the server is blocking the bird from reading the RSS feed. I thought I'd bring it up. Here is a link to the feed that is clearly a feed, but the bird is blind to.
Feed: https://truesteamachievements.com/friendfeedrss.aspx?gamerid=90878
I suspect this is also messing with youtube's atom feeds at the moment.
For example, this youtube feed was set up a while ago and apparently works fine
https://rss-parrot.net/web/feeds/www.youtube.com.channel.ucb9awk0xfz2p-ny2nsxghra
however new youtube feeds get the
Hm, I can't find a feed for this site.
response
Originally posted by @gwater in #12 (comment)
It seems every (French) feeds based on SPIP , an old French CRM, are not working.
For example :
https://orientxxi.info has a RSS flux here: https://orientxxi.info/?page=backend&lang=fr
Maybe related to this POST attributes.
Yes or no?
Quick fix: just unescape the entities which appear to appear frequently
Deep fix: check a lot of retrieved descriptions, see to what extent they have HTML markup, come up with a good-enough approach to sanitize them if needed.
I tried to request a feed, but I wrote some text describing the feed after the URL, which was not super descriptive by itself. It didn't work. Worked fine when I then submitted just the URL.
Created accounts on rss-parrot are not working correctly on Mitra instances.
Test machines for non-mastodon-interop tweaks are available HERE.
Thanks :)
.
Many RSS subscriptions would benefit from having one or more default Hashtag associated to them. These would be specified at the time the subscription was created?
E.g., birb couldn't receive feed requests from infosec.exchange
Thread with report: https://infosec.exchange/@darthnull/111692488979893636
I added https://wallnot.dk/rss to the service and it seems to work (I havent seen a post from it yet, but the account is generated).
There is however one problem. In the bio text for the account it has a link to the source, but this has an / added to the the end of the address like https://wallnot.dk/rss/
Since /rss is a file and not a folder, this will simply not work.
Use website's favicon as profile image of parrot account
Requested feed: http://www.giantitp.com/comics/oots.rss
From thread: https://genart.social/@twilliability/111691696204075211
Symtom A:
Symptob B:
On the server I am following RSS Parrot account on, older posts are not always visible:
When I click the page, I end up on the (nice) landing page, e.g. https://rss-parrot.net/web/feeds/nanocommons.github.io.erm-database
But for new RSS Parrots, I often like to "advertise" it, by boosting an older post from the RSS. But for that I need to Mastodon post URL. Because I cannot get that from my server, I was wondering if that it can be added to that page?
If a new item's description in the RSS feed is long (e.g., it contains the entire content of the post), then the toot that the Parrot sends about it can also be very long. Two examples of feeds with long content:
https://rss-parrot.net/web/feeds/dev.to
https://rss-parrot.net/web/feeds/ludic.mataroa.blog
It is desirable to truncate the description at something like 250 chars in the toot. Otherwise the toots can be unpleasant to read, and they can clutter up the public timeline of instances.
Oftenm, items in Podcast feeds have no element. Instead, they have an element with a link to the episode's audio file.
If there is no link in an item, the birb should look for the link in and use that.
E.g.: https://rss-parrot.net/u/eurogamer.net/status/1704232245944629476
Should they?
This is a wild idea that popped to my head:
Would it be possible to detect whether the author of i.e. the blog post already shared it on their verified Fedi account and boost that post instead?
How I'd imagine this to work would be that the parrot would look for a Fedi verification link on the followed website and follow the author. If a new link appears in the website's feed, the parrot would check whether the author has mentioned the new link in a post of theirs.
If they have, the parrot would boost that post. If they haven't, it would fall back on creating a new post of its own.
Now obviously, you'd have to wait a certain amount of time before checking as the author may need some time to type out the Fedi post.
This would allow me to boost the author's post that A. has their account linked to it and B. may provide better extra info such as a short summary.
(Why not follow the author directly? I usually don't want to see every single thing an author posts on their Fedi account in my feed but do want to see their higher effort articles.)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.