{"id":23113715,"url":"https://github.com/cmdr-nova/blog-poster","last_synced_at":"2026-04-20T14:01:45.469Z","repository":{"id":268360593,"uuid":"869298900","full_name":"cmdr-nova/blog-poster","owner":"cmdr-nova","description":"A tiny and simple Python bot that grabs items from your RSS feed, and then posts them to Mastodon.","archived":false,"fork":false,"pushed_at":"2024-10-13T14:52:36.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-15T13:04:45.777Z","etag":null,"topics":["blog","blogging","bot","mastodon","parser","poster","python","toot","tooter"],"latest_commit_sha":null,"homepage":"https://nova.mkultra.monster","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cmdr-nova.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-08T04:12:09.000Z","updated_at":"2024-10-13T14:52:40.000Z","dependencies_parsed_at":"2024-12-16T10:04:26.435Z","dependency_job_id":null,"html_url":"https://github.com/cmdr-nova/blog-poster","commit_stats":null,"previous_names":["cmdr-nova/blog-poster"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cmdr-nova/blog-poster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdr-nova%2Fblog-poster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdr-nova%2Fblog-poster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdr-nova%2Fblog-poster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdr-nova%2Fblog-poster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmdr-nova","download_url":"https://codeload.github.com/cmdr-nova/blog-poster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmdr-nova%2Fblog-poster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32050451,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","blogging","bot","mastodon","parser","poster","python","toot","tooter"],"created_at":"2024-12-17T03:13:28.804Z","updated_at":"2026-04-20T14:01:45.444Z","avatar_url":"https://github.com/cmdr-nova.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Hello! This is my third little bot. This guy will go onto your VPS and live in 5 minute intervals. But let me explain. I got tired of the slog of having to copy and paste the links from my new posts, and then having to type up something about them, and then also hit the post button. So I made this bot to do it for me, instead.\n\nWhat it does:\n\n- Upon initial load, it will check your feed for all existing links, and parse them into a brand new json file, automatically. It does this, so that when it runs the rest of the script, it doesn't spam your entire Mastodon feed with a billion posts and links, and from this point forward, will *only* look for brand new feed items.\n- Once a new blog post emerges into your RSS feed, it posts to Mastodon and Discord, and then adds that brand new item to the aforementioned json, that acts as an effective ignore list.\n\n*The reason I set it up like this, is because Jekyll sometimes does this weird thing where, if you just grab from the RSS feed all willy nilly without ignoring old entries, it'll re-share those old entries at random whenever you build the site. You know. When you're updating it ... But not anymore!*\n\nThat's it!\n\nDo this:\n\n```\npip install feedparser Mastodon.py\n```\n\nThen, use Nano to create the path and also the file.\n\n```\nnano path/you/want/blog-poster.py\n```\n\nPaste the source code into it, then edit the credentials to match what you're using. For Mastodon API, go into the Developer tab under preferences, create an app, and grab the access key. For the RSS feed, that's pretty self explanatory. For the Discord webhook, create a webhook one whichever channel in whichever server you want, and then copy the webhook URL.\n\nOnce complete, write out, then exit Nano.\n\nSet us up the job!\n\nMake sure the script is executable ...\n\n```\nchmod +x /path/to/blog-poster.py\n```\n\nOpen up the cron ...\n\n```\ncrontab -e\n```\n\nSet it to check every five minutes for new posts (you can set the timer to be longer, I just prefer to have it check all the time, and fast).\n\n```\n*/5 * * * * /usr/bin/python3 /path/to/blog-poster.py\n```\n\nDone!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmdr-nova%2Fblog-poster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmdr-nova%2Fblog-poster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmdr-nova%2Fblog-poster/lists"}