Skip to content

Commit aa19ebd

Browse files
committed
Add Inoreader webhook support
1 parent 01c0445 commit aa19ebd

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

app/routers/inoreader.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@
4040

4141

4242
async def get_inoreader_item_async(
43-
data: Optional[Dict] = None,
44-
trigger: bool = False,
45-
params: Optional[Dict] = None,
46-
# filters: Optional[Dict] = None,
43+
data: Optional[Dict] = None,
44+
trigger: bool = False,
45+
params: Optional[Dict] = None,
46+
# filters: Optional[Dict] = None,
4747
) -> None:
4848
stream_id = None
4949
use_inoreader_content = True
@@ -76,19 +76,19 @@ async def get_inoreader_item_async(
7676

7777

7878
async def process_inoreader_data(
79-
data: list,
80-
use_inoreader_content: bool,
81-
telegram_channel_id: Union[int, str] = default_telegram_channel_id,
82-
stream_id: str = None,
79+
data: list,
80+
use_inoreader_content: bool,
81+
telegram_channel_id: Union[int, str] = default_telegram_channel_id,
82+
stream_id: str = None,
8383
):
8484
for item in data:
8585
url_type_item = await get_url_metadata(item["aurl"])
8686
url_type_dict = url_type_item.to_dict()
8787
logger.debug(f"ino original: {use_inoreader_content}")
8888
if (
89-
use_inoreader_content is True
90-
or url_type_dict["content_type"] == "unknown"
91-
# or url_type_dict["source"] == "zhihu"
89+
use_inoreader_content is True
90+
or url_type_dict["content_type"] == "unknown"
91+
# or url_type_dict["source"] == "zhihu"
9292
):
9393
is_video = url_type_dict["content_type"] == "video"
9494
content_type = url_type_dict["content_type"] if is_video else "social_media"
@@ -118,6 +118,10 @@ async def process_inoreader_data(
118118
)
119119

120120

121+
async def get_inoreader_webhook_data(data: dict):
122+
result = data["items"]
123+
return result
124+
121125
# @router.post("/", dependencies=[Security(verify_api_key)])
122126
# async def inoreader_repost_webhook(request: Request, background_tasks: BackgroundTasks):
123127
# data = await request.json()
@@ -142,3 +146,11 @@ async def inoreader_trigger_webhook(request: Request):
142146
params = request.query_params
143147
await get_inoreader_item_async(trigger=True, params=params)
144148
return "ok"
149+
150+
151+
@router.post("/webhook", dependencies=[Security(verify_api_key)])
152+
async def inoreader_tag_webhook(request: Request):
153+
data = await request.json()
154+
data = await Inoreader.process_items_data(data)
155+
await process_inoreader_data(data=data, use_inoreader_content=True, telegram_channel_id=default_telegram_channel_id)
156+
return "ok"

app/services/inoreader/__init__.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from typing import Optional
12
from urllib.parse import quote
23

34
import httpx
@@ -97,7 +98,7 @@ async def get_api_item_data(
9798
tag: str = None,
9899
feed: str = None,
99100
params: dict = None,
100-
) -> dict:
101+
) -> Optional[dict | list]:
101102
stream_id = Inoreader.get_stream_id(stream_type=stream_type, tag=tag, feed=feed)
102103
request_url = INOREADER_CONTENT_URL + stream_id
103104
default_params = {
@@ -112,23 +113,29 @@ async def get_api_item_data(
112113
resp = await Inoreader.get_api_info(url=request_url, params=params)
113114
logger.debug(resp.text)
114115
data = resp.json()
116+
data = await Inoreader.process_items_data(data)
117+
return data
118+
119+
@staticmethod
120+
async def process_items_data(data: dict) -> Optional[dict | list]:
115121
expression = """
116-
items[].{
117-
"aurl": canonical[0].href,
118-
"title": title,
119-
"author": origin.title,
120-
"author_url": origin.htmlUrl,
121-
"content": summary.content,
122-
"category": categories[-1],
123-
"message": comments[0].commentBody,
124-
"timestamp": updated
125-
}
126-
"""
122+
items[].{
123+
"aurl": canonical[0].href,
124+
"title": title,
125+
"author": origin.title,
126+
"author_url": origin.htmlUrl,
127+
"content": summary.content,
128+
"category": categories[-1],
129+
"message": comments[0].commentBody,
130+
"timestamp": updated
131+
}
132+
"""
127133
data = jmespath.search(expression, data)
128134
for item in data:
129135
item["category"] = item["category"].split("/")[-1]
130136
return data
131137

138+
132139
@staticmethod
133140
async def get_api_info(
134141
url: str,

0 commit comments

Comments
 (0)