Last active 1698081812

a script to forward fediverse posts from a jsonfeed url to a discord webhook, optionally filtering by keyword/hashtag

Revision 245387ae66abe2d6883d0d51d6ae47ccf0a6f109

fedipost.py Raw
1#!/usr/bin/env python3
2# usage: fedipost.py jsonfeed_url webhook_url [filter_text]
3# e.g: fedipost.py https://blahaj.zone/@alypet.json webhook #alyblog
4from markdownify import markdownify
5from requests import get,post
6import os, sys
7
8WH = sys.argv[2]
9
10try:
11 with open("posts.txt") as f:
12 posts = f.read().strip().split("\n")
13except:
14 posts = []
15
16feed = get(sys.argv[1]).json()
17items = []
18for item in feed["items"]:
19 if item["url"] in posts:
20 continue
21 if len(sys.argv) > 3:
22 if sys.argv[3] not in item["content_html"]:
23 continue
24 content, img_url = item["content_html"].split('<span class="new_note')[0].split("<img",1)
25 img_url = img_url.split(' src="',1)[1].split('"')[0]
26 content = markdownify(content).strip()
27 data = {
28 "username": "Fediverse",
29 "avatar_url": feed["icon"],
30 "embeds": [
31 {
32 "title": feed["title"],
33 "url": feed["home_page_url"],
34 "color": 16711829,
35 "image": {
36 "url": img_url
37 },
38 "fields": [
39 {
40 "name": "New post",
41 "value": content
42 }
43 ],
44 "url": item["url"],
45 "timestamp": item["date_modified"][:-5] + "Z"
46 }
47 ]
48 }
49 post(WH, json=data)
50 posts.append(item["url"])
51 with open("posts.txt", "w") as f:
52 f.write("\n".join(posts))