Skip to content

Commit

Permalink
feat: 支持获取简书积分兑换平台贝市挂单信息
Browse files Browse the repository at this point in the history
  • Loading branch information
FHU-yezi committed Feb 19, 2024
1 parent 6b0b399 commit aad271f
Show file tree
Hide file tree
Showing 4 changed files with 252 additions and 4 deletions.
62 changes: 62 additions & 0 deletions jianshu_apis/简书积分兑换平台/获取贝市买单挂单.bru
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
meta {
name: 获取贝市买单挂单
type: http
seq: 1
}

post {
url: https://20221023.jianshubei.com/api/getList/furnish.bei/?page=1
body: json
auth: none
}

query {
page: 1
}

body:json {
{
"filter": [
{
"trade": 1
},
{
"status": 1
},
{
"finish": 0
},
{
"tradable": {
">": "0"
}
}
],
"sort": "price,pub_date",
"bind": [
{
"member.user": {
"filter": [
{
"id": "{{uid}}"
}
],
"addField": [
{
"username_md5": "username_md5"
}
],
"fields": "id,username,avatarUrl,credit,pay_types"
}
}
],
"addField": [
{
"tradeCount": "tradeCount"
},
{
"tradeNum": "tradeNum"
}
]
}
}
62 changes: 62 additions & 0 deletions jianshu_apis/简书积分兑换平台/获取贝市卖单挂单.bru
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
meta {
name: 获取贝市卖单挂单
type: http
seq: 2
}

post {
url: https://20221023.jianshubei.com/api/getList/furnish.bei/?page=1
body: json
auth: none
}

query {
page: 1
}

body:json {
{
"filter": [
{
"trade": 0
},
{
"status": 1
},
{
"finish": 0
},
{
"tradable": {
">": "0"
}
}
],
"sort": "-price,pub_date",
"bind": [
{
"member.user": {
"filter": [
{
"id": "{{uid}}"
}
],
"addField": [
{
"username_md5": "username_md5"
}
],
"fields": "id,username,avatarUrl,credit,pay_types"
}
}
],
"addField": [
{
"tradeCount": "tradeCount"
},
{
"tradeNum": "tradeNum"
}
]
}
}
12 changes: 8 additions & 4 deletions jkit/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from httpx import AsyncClient
from httpx._types import ProxiesTypes, TimeoutTypes
from msgspec import field

from jkit._base import CONFIG_CONFIG, ConfigObject
from jkit._constraints import NonEmptyStr
Expand Down Expand Up @@ -39,6 +40,7 @@ class _EndpointsConfig(ConfigObject, **CONFIG_CONFIG):
"""API 端点配置"""

jianshu: NonEmptyStr = "https://www.jianshu.com"
jpep: NonEmptyStr = "https://20221023.jianshubei.com/api"


class _ResourceCheckConfig(ConfigObject, **CONFIG_CONFIG):
Expand All @@ -65,10 +67,12 @@ class _DataValidationConfig(ConfigObject, **CONFIG_CONFIG):


class _Config(ConfigObject, **CONFIG_CONFIG):
network: _NetworkConfig = _NetworkConfig()
endpoints: _EndpointsConfig = _EndpointsConfig()
resource_check: _ResourceCheckConfig = _ResourceCheckConfig()
data_validation: _DataValidationConfig = _DataValidationConfig()
network: _NetworkConfig = field(default_factory=_NetworkConfig)
endpoints: _EndpointsConfig = field(default_factory=_EndpointsConfig)
resource_check: _ResourceCheckConfig = field(default_factory=_ResourceCheckConfig)
data_validation: _DataValidationConfig = field(
default_factory=_DataValidationConfig
)


CONFIG = _Config()
120 changes: 120 additions & 0 deletions jkit/jpep/ftn_macket.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
from enum import Enum
from typing import AsyncGenerator, Literal, Optional, Tuple

from jkit._base import DATA_OBJECT_CONFIG, DataObject, ResourceObject
from jkit._constraints import (
NonEmptyStr,
NonNegativeInt,
NormalizedDatetime,
PositiveFloat,
PositiveInt,
)
from jkit._network_request import send_post
from jkit._normalization import normalize_datetime
from jkit.config import CONFIG


class PaymentChannels(Enum):
WECHAT_PAY = "微信支付"
ALIPAY = "支付宝"
ANT_CREDIT_PAY = "蚂蚁花呗"


class FTNMacketOrderPublisherInfo(DataObject, **DATA_OBJECT_CONFIG):
is_anonymous: bool
id: Optional[PositiveInt]
name: Optional[NonEmptyStr]
hashed_name: Optional[NonEmptyStr]
avatar_url: Optional[NonEmptyStr]
credit: Optional[NonNegativeInt]


class FTNMacketOrder(DataObject, **DATA_OBJECT_CONFIG):
id: PositiveInt
price: PositiveFloat

total_amount: PositiveInt
traded_amount: NonNegativeInt
tradable_amount: NonNegativeInt
minimum_trade_amount: PositiveInt

traded_count: NonNegativeInt
publish_time: NormalizedDatetime
supported_payment_channels: Tuple[PaymentChannels, ...]

publisher_info: FTNMacketOrderPublisherInfo


class FTNMacket(ResourceObject):
async def iter_orders(
self,
*,
type: Literal["buy", "sell"], # noqa: A002
start_page: int = 1,
) -> AsyncGenerator[FTNMacketOrder, None]:
now_page = start_page
while True:
data = await send_post(
endpoint=CONFIG.endpoints.jpep,
path="/getList/furnish.bei/",
params={"page": now_page},
json={
"filter": [
{"trade": 1 if type == "buy" else 0},
{"status": 1},
{"finish": 0},
{"tradable": {">": "0"}},
],
"sort": "price,pub_date" if type == "buy" else "-price,pub_date",
"bind": [
{
"member.user": {
"filter": [{"id": "{{uid}}"}],
"addField": [{"username_md5": "username_md5"}],
"fields": "id,username,avatarUrl,credit,pay_types",
}
}
],
"addField": [
{"tradeCount": "tradeCount"},
{"tradeNum": "tradeNum"},
],
},
)

if not data["data"]:
break

for item in data["data"]:
yield FTNMacketOrder(
id=item["id"],
price=item["price"],
total_amount=item["totalNum"],
traded_amount=item["tradeNum"],
tradable_amount=item["tradable"],
minimum_trade_amount=item["minNum"],
traded_count=item["tradeCount"],
publish_time=normalize_datetime(item["pub_date"]),
supported_payment_channels=tuple(
{
1: PaymentChannels.WECHAT_PAY,
2: PaymentChannels.ALIPAY,
3: PaymentChannels.ANT_CREDIT_PAY,
}[int(x)]
for x in item["member.user"][0]["pay_types"].split("|")
)
if item["member.user"][0]["pay_types"]
else (),
publisher_info=FTNMacketOrderPublisherInfo(
is_anonymous=bool(item["anony"]),
id=item["member.user"][0]["id"],
name=item["member.user"][0]["username"],
hashed_name=item["member.user"][0]["username_md5"],
avatar_url=item["member.user"][0]["avatarUrl"]
if item["member.user"][0]["avatarUrl"]
else None,
credit=item["member.user"][0]["credit"],
),
)

now_page += 1

0 comments on commit aad271f

Please sign in to comment.