From 01fd5dfe217f61ef0120a983465699994c68b869 Mon Sep 17 00:00:00 2001 From: liang-work Date: Sat, 13 Sep 2025 14:56:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=95=B4=E7=9A=84SN=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?API=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/CallServerAPIs.py | 3 +- core/SNAPI/PostCategory.py | 2 +- core/SNAPI/PostTag.py | 2 +- core/SNAPI/Publisher.py | 2 +- core/SNAPI/Realm.py | 117 +++++++++++++++++++++++++++++++++++ core/SNAPI/RealtimeCall.py | 28 +++++++++ core/SNAPI/Sticker.py | 118 ++++++++++++++++++++++++++++++++++++ core/SNAPI/WebArticle.py | 24 ++++++++ core/SNAPI/WebFeed.py | 57 +++++++++++++++++ core/SNAPI/WebFeedPublic.py | 56 +++++++++++++++++ core/SNAPI/WebReader.py | 23 +++++++ 11 files changed, 428 insertions(+), 4 deletions(-) create mode 100644 core/SNAPI/Realm.py create mode 100644 core/SNAPI/RealtimeCall.py create mode 100644 core/SNAPI/Sticker.py create mode 100644 core/SNAPI/WebArticle.py create mode 100644 core/SNAPI/WebFeed.py create mode 100644 core/SNAPI/WebFeedPublic.py create mode 100644 core/SNAPI/WebReader.py diff --git a/core/CallServerAPIs.py b/core/CallServerAPIs.py index 94a0927..3da853a 100644 --- a/core/CallServerAPIs.py +++ b/core/CallServerAPIs.py @@ -1,6 +1,5 @@ from ProjectCfg import DOMAIN from SNAPI.CallServer import _make_request -from typing import List,Any,Optional,Dict from SNAPI import * ###=========================活动API================================= @@ -36,6 +35,8 @@ def TranslationText(Authorization: str,text:str ,Tolang:str,FromLang:str) -> dic params = {"to":Tolang,"from":FromLang} return _make_request('POST', url, headers, params=params,request_body=text) +###==========================服务器版本========================== + def GetServerVersion() -> dict: """获取服务器版本""" url = f"{DOMAIN}/version" diff --git a/core/SNAPI/PostCategory.py b/core/SNAPI/PostCategory.py index 9148425..648f105 100644 --- a/core/SNAPI/PostCategory.py +++ b/core/SNAPI/PostCategory.py @@ -1,6 +1,6 @@ from ProjectCfg import DOMAIN from CallServer import _make_request -from typing import List,Any,Optional,Dict +from typing import Optional ###==========================帖子分类管理============================ def GetPostCategories(Authorization: str, query: Optional[str] = None, offset: int = 0, take: int = 20, order: Optional[str] = None) -> dict: diff --git a/core/SNAPI/PostTag.py b/core/SNAPI/PostTag.py index d021bd1..4d2d284 100644 --- a/core/SNAPI/PostTag.py +++ b/core/SNAPI/PostTag.py @@ -1,6 +1,6 @@ from ProjectCfg import DOMAIN from CallServer import _make_request -from typing import List,Any,Optional,Dict +from typing import Optional ###==========================帖子标签管理============================ def GetPostTags(Authorization: str, query: Optional[str] = None, offset: int = 0, take: int = 20, order: Optional[str] = None) -> dict: diff --git a/core/SNAPI/Publisher.py b/core/SNAPI/Publisher.py index 464269d..af2e505 100644 --- a/core/SNAPI/Publisher.py +++ b/core/SNAPI/Publisher.py @@ -1,6 +1,6 @@ from ProjectCfg import DOMAIN from CallServer import _make_request -from typing import List,Any,Optional,Dict +from typing import Optional ###==========================发布者管理============================ def GetPublisher(Authorization: str, name: str) -> dict: """获取发布者信息""" diff --git a/core/SNAPI/Realm.py b/core/SNAPI/Realm.py new file mode 100644 index 0000000..42666e5 --- /dev/null +++ b/core/SNAPI/Realm.py @@ -0,0 +1,117 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================领域部分========================== + +def GetRealm(slug:str,Authorization: str = '') -> dict: + """获取领域详情""" + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyRealm(slug:str,Authorization: str ,name:str='',description:str='',picture_id:str='',background_id:str='',is_community:bool=True,is_public:bool=True) -> dict: + """修改领域""" + request_body={ + "slug": slug, + "name": name, + "description": description, + "picture_id": picture_id, + "background_id": background_id, + "is_community": is_community, + "is_public": is_public +} + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=request_body,normal_codes=[201]) + +def DeleteRealm(slug:str,Authorization: str) -> dict: + """删除领域""" + url = f"{DOMAIN}/realms/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetJoinedRealms(Authorization: str) -> dict: + """获取加入的领域""" + url = f"{DOMAIN}/realms" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateRealm(slug:str,Authorization: str,name:str='',description:str='',picture_id:str='',background_id:str='',is_community:bool=True,is_public:bool=True) -> dict: + """创建领域""" + request_body={ + "slug": slug, + "name": name, + "description": description, + "picture_id": picture_id, + "background_id": background_id, + "is_community": is_community, + "is_public": is_public +} + url = f"{DOMAIN}/realms" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=request_body,normal_codes=[201]) + +def GetRealmInvites(Authorization: str) -> dict: + """获取领域邀请""" + url = f"{DOMAIN}/realms/invites" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def SendRealmInvite(slug:str,Authorization: str,user_id:str,role:int=0) -> dict: + """发送领域邀请""" + request_body={ + "related_user_id": user_id, + "role": role +} + url = f"{DOMAIN}/realms/invites/{slug}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=request_body,normal_codes=[201]) + +def AcceptRealmInvite(slug:str,Authorization: str) -> dict: + """接受领域邀请""" + url = f"{DOMAIN}/realms/invites/{slug}/accept" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def DeclineRealmInvite(slug:str,Authorization: str) -> dict: + """拒绝领域邀请""" + url = f"{DOMAIN}/realms/invites/{slug}/decline" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def GetRealmMembers(slug:str,Authorization: str,offset:int=0,take:int=20,withStatus:bool=False) -> dict: + """获取领域成员""" + url = f"{DOMAIN}/realms/{slug}/members" + params = {"offset":offset,"take":take,"withStatus":withStatus} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers,params=params) + +def GetRealmMemberMe(slug:str,Authorization: str) -> dict: + """获取领域成员""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def LeaveRealm(slug:str,Authorization: str) -> dict: + """退出领域""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def JoinRealm(slug:str,Authorization: str) -> dict: + """加入领域""" + url = f"{DOMAIN}/realms/{slug}/members/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def KickMemberRealm(slug:str,Authorization: str,user_id:str) -> dict: + """踢出领域成员""" + url = f"{DOMAIN}/realms/{slug}/members/{user_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def SetMemberRoleRealm(slug:str,Authorization: str,user_id:str,role:int) -> dict: + """设置领域成员角色""" + url = f"{DOMAIN}/realms/{slug}/members/{user_id}/role" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,normal_codes=[201],request_body=role) diff --git a/core/SNAPI/RealtimeCall.py b/core/SNAPI/RealtimeCall.py new file mode 100644 index 0000000..59dfee2 --- /dev/null +++ b/core/SNAPI/RealtimeCall.py @@ -0,0 +1,28 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================实时聊天========================== + +def GetRealtimeChat(Authorization: str,roomid:str ) -> dict: + """获取实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateRealtimeChat(Authorization: str,roomid:str ) -> dict: + """创建实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def LeaveRealtimeChat(Authorization: str,roomid:str ) -> dict: + """离开实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def JoinRealtimeChat(Authorization: str,roomid:str ) -> dict: + """加入实时聊天""" + url = f"{DOMAIN}/chat/realtime/{roomid}/join" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) \ No newline at end of file diff --git a/core/SNAPI/Sticker.py b/core/SNAPI/Sticker.py new file mode 100644 index 0000000..cf28282 --- /dev/null +++ b/core/SNAPI/Sticker.py @@ -0,0 +1,118 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================贴纸========================== + +def GetStickerPackageList(Authorization: str,offset:int=0,take:int=20,pub:str='',order:str='',query:str="") -> dict: + """获取贴纸包列表""" + url = f"{DOMAIN}/stickers" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take,"pub":pub,"order":order,"query":query} + return _make_request('GET', url, headers,params=params) + +def CreateStickerPackage(Authorization: str,pub:str,name:str,description:str,prefix:str) -> dict: + """创建贴纸包""" + url = f"{DOMAIN}/stickers" + RequestsBody={ + "name":name, + "description": description, + "prefix": prefix +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=RequestsBody,params={"pub":pub},normal_codes=[201]) + +def GetMyStickerList(Authorization: str) -> dict: + """获取我的贴纸列表""" + url = f"{DOMAIN}/stickers/me" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetAStickerPackageInfo(Authorization: str,sticker_id:str) -> dict: + """获取贴纸包信息""" + url = f"{DOMAIN}/stickers/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyStickerPackage(Authorization: str,sticker_id:str,name:str,description:str,prefix:str) -> dict: + """修改贴纸包""" + url = f"{DOMAIN}/stickers/{sticker_id}" + RequestsBody={ + "name":name, + "description": description, + "prefix": prefix +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=RequestsBody,normal_codes=[201]) + +def DeleteStickerPackage(Authorization: str,sticker_id:str) -> dict: + """删除贴纸包""" + url = f"{DOMAIN}/stickers/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetStickerPackageContent(Authorization: str,sticker_id:str) -> dict: + """获取贴纸包内容""" + url = f"{DOMAIN}/stickers/{sticker_id}/content" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyStickerPackageContent(Authorization: str,sticker_id:str,slug:str,image_id:str) -> dict: + """修改贴纸包内容""" + url = f"{DOMAIN}/stickers/{sticker_id}/content" + RequestsBody={ + "slug":slug, + "image_id": image_id +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=RequestsBody,normal_codes=[201]) +def GetStickerInfo(Authorization: str,sticker_id:str) -> dict: + """获取贴纸信息""" + url = f"{DOMAIN}/stickers/lookup/{sticker_id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetStickerImg(Authorization: str,sticker_id:str) -> dict: + """获取贴纸图片""" + url = f"{DOMAIN}/stickers/lookup/{sticker_id}/open" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetPackageStickerInfo(Authorization: str,packid:str,id:str) -> dict: + """获取贴纸包信息""" + url = f"{DOMAIN}/stickers/{packid}/content/{id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def CreateStickerImageInPackage(Authorization: str,packid:str,slug:str,image_id:str) -> dict: + """创建贴纸包图片""" + url = f"{DOMAIN}/stickers/{packid}/content" + RequestsBody={ + "slug":slug, + "image_id": image_id +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=RequestsBody,normal_codes=[201]) + +def DeleteStickerImageInPackage(Authorization: str,packid:str,id:str) -> dict: + """删除贴纸包图片""" + url = f"{DOMAIN}/stickers/{packid}/content/{id}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetSelfHadStickerPackageInfo(Authorization: str,packid:str) -> dict: + """获取自己已拥有的贴纸包信息""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def AddStickerPackage(Authorization: str,packid:str) -> dict: + """添加贴纸包""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def RemoveStickerPackage(Authorization: str,packid:str) -> dict: + """移除贴纸包""" + url = f"{DOMAIN}/stickers/{packid}/own" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) \ No newline at end of file diff --git a/core/SNAPI/WebArticle.py b/core/SNAPI/WebArticle.py new file mode 100644 index 0000000..2a32157 --- /dev/null +++ b/core/SNAPI/WebArticle.py @@ -0,0 +1,24 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================网页文章========================== + +def GetWebArticle(feedid:str,publisherid:str,limit:int=20,offset:int=0,Authorization: str='' ) -> dict: + """获取网页文章""" + url = f"{DOMAIN}/feeds/articles" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"feedid":feedid,"publisherid":publisherid,"limit":limit,"offset":offset} + return _make_request('GET', url, headers,params=params) + +def GetWebArticleDetail(articleid:str,Authorization: str='' ) -> dict: + """获取网页文章详情""" + url = f"{DOMAIN}/feeds/articles/{articleid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def RandomWebArticle(Authorization: str='',limit:int=5 ) -> dict: + """随机获取网页文章""" + url = f"{DOMAIN}/feeds/articles/random" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"limit":limit} + return _make_request('GET', url, headers,params=params) diff --git a/core/SNAPI/WebFeed.py b/core/SNAPI/WebFeed.py new file mode 100644 index 0000000..e237f7c --- /dev/null +++ b/core/SNAPI/WebFeed.py @@ -0,0 +1,57 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================网页流========================== + +def GetWebFeed(pubname:str,Authorization: str='') -> dict: + """获取网页流""" + url = f"{DOMAIN}/publishers/{pubname}/feeds" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + + +def SendWebFeed(pubname:str,Authorization: str='',URL:str='',Title:str='',Description:str='',ScrapPage:bool=True) -> dict: + """发送网页流""" + url = f"{DOMAIN}/publishers/{pubname}/feeds" + RequestsBody={ + "url": URL, + "title": Title, + "description": Description, + "config": { + "scrap_page": ScrapPage, + } +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,request_body=RequestsBody,normal_codes=[201]) + +def GetWebFeedDetail(feedid:str,pubname:str,Authorization: str='') -> dict: + """获取网页流详情""" + url = f"{DOMAIN}/publishers/{pubname}/feeds/{feedid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def ModifyWebFeed(feedid:str,pubname:str,Authorization: str='',URL:str='',Title:str='',Description:str='',ScrapPage:bool=True) -> dict: + """修改网页流""" + url = f"{DOMAIN}/publishers/{pubname}/feeds/{feedid}" + RequestsBody={ + "url": URL, + "title": Title, + "description": Description, + "config": { + "scrap_page": ScrapPage, + } +} + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('PATCH', url, headers,request_body=RequestsBody,normal_codes=[200]) + +def DeleteWebFeed(feedid:str,pubname:str,Authorization: str='') -> dict: + """删除网页流""" + url = f"{DOMAIN}/publishers/{pubname}/feeds/{feedid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def SetScrapPage(pubname:str,id:str,Authorization: str='') -> dict: + """设置是否采集网页""" + url = f"{DOMAIN}/publishers/{pubname}/feeds/{id}/scrap" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) diff --git a/core/SNAPI/WebFeedPublic.py b/core/SNAPI/WebFeedPublic.py new file mode 100644 index 0000000..e7f4eed --- /dev/null +++ b/core/SNAPI/WebFeedPublic.py @@ -0,0 +1,56 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================公共网页流========================== + +def SubscribeWebFeed(feedid:str,Authorization: str) -> dict: + """订阅公共网页流""" + url = f"{DOMAIN}/feeds/{feedid}/subscribe" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('POST', url, headers,normal_codes=[201]) + +def UnsubscribeWebFeed(feedid:str,Authorization: str) -> dict: + """取消订阅公共网页流""" + url = f"{DOMAIN}/feeds/{feedid}/subscribe" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers,normal_codes=[204]) + +def GetWebFeedSubscription(feedid:str,Authorization: str='') -> dict: + """获取公共网页流订阅""" + url = f"{DOMAIN}/feeds/{feedid}/subscribe" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetWebFeedSubscribed(offset:int=0,take:int=20,Authorization: str='') -> dict: + """获取公共网页流订阅""" + url = f"{DOMAIN}/feeds/subscribed" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take} + return _make_request('GET', url, headers,params=params) + +def GetWebFeedInfo(offset:int=0,take:int=20,Authorization: str='') -> dict: + """获取公共网页流信息""" + url = f"{DOMAIN}/feeds" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take} + return _make_request('GET', url, headers,params=params) + +def GetWebFeedDetail(feedid:str,Authorization: str='') -> dict: + """获取公共网页流详情""" + url = f"{DOMAIN}/feeds/{feedid}" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('GET', url, headers) + +def GetWebFeedArticles(feedid:str,offset:int=0,take:int=20,Authorization: str='') -> dict: + """获取公共网页流文章""" + url = f"{DOMAIN}/feeds/{feedid}/articles" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take} + return _make_request('GET', url, headers,params=params) + +def GetWebFeedExplore(offset:int=0,take:int=20,query='',Authorization: str='') -> dict: + """获取公共网页流探索""" + url = f"{DOMAIN}/feeds/explore" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"offset":offset,"take":take,"query":query} + return _make_request('GET', url, headers,params=params) diff --git a/core/SNAPI/WebReader.py b/core/SNAPI/WebReader.py new file mode 100644 index 0000000..d9ee59e --- /dev/null +++ b/core/SNAPI/WebReader.py @@ -0,0 +1,23 @@ +from ProjectCfg import DOMAIN +from CallServer import _make_request + +###==========================网页阅读器========================== +def ReadForURL(url:str,Authorization: str='' ) -> dict: + """通过URL读取网页""" + url = f"{DOMAIN}/scrap/link" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"url":url} + return _make_request('GET', url, headers,params=params) + +def ClearReaderCache(url:str,Authorization: str='') -> dict: + """清除缓存""" + url = f"{DOMAIN}/scrap/link/cache" + headers = {'accept': 'application/json', 'Authorization': Authorization} + params = {"url":url} + return _make_request('DELETE', url, headers,params=params) + +def ClearAllReaderCache(Authorization: str='') -> dict: + """清除所有缓存""" + url = f"{DOMAIN}/scrap/cache/all" + headers = {'accept': 'application/json', 'Authorization': Authorization} + return _make_request('DELETE', url, headers) \ No newline at end of file