Skip to content

Commit

Permalink
Merge pull request #445 from Nemo2011/dev
Browse files Browse the repository at this point in the history
  • Loading branch information
z0z0r4 authored Aug 19, 2023
2 parents bb9c7eb + 97a8faa commit ad07f7b
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 1,017 deletions.
4 changes: 4 additions & 0 deletions CHANGELOGS/v15.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 15.5.5
- fix: user.get_dynamics https://github.com/Nemo2011/bilibili-api/pull/439
- feat: session.get_at https://github.com/Nemo2011/bilibili-api/pull/443

# 15.5.4 2023/8/16
- fix: [BREADKING CHANGE] 更新 user.get_dynamics 接口 https://github.com/Nemo2011/bilibili-api/pull/432
- fix: 无法实时获取弹幕 by @Drelf2018 in https://github.com/Nemo2011/bilibili-api/pull/430 and @whille in https://github.com/Nemo2011/bilibili-api/pull/429
Expand Down
2 changes: 1 addition & 1 deletion bilibili_api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
interactive_video,
)

BILIBILI_API_VERSION = "15.5.4"
BILIBILI_API_VERSION = "15.5.5"

# 如果系统为 Windows,则修改默认策略,以解决代理报错问题
if "windows" in platform.system().lower():
Expand Down
10 changes: 8 additions & 2 deletions bilibili_api/data/api/session.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,23 @@
"comment": "获取点赞"
},
"unread": {
"url": "https://api.bilibili.com/x/msgfeed/unread?build=0&mobi_app=web",
"url": "https://api.bilibili.com/x/msgfeed/unread",
"method": "GET",
"verify": true,
"comment": "获取未读的信息"
},
"replies": {
"url": "https://api.bilibili.com/x/msgfeed/reply?platform=web&build=0&mobi_app=web",
"url": "https://api.bilibili.com/x/msgfeed/reply",
"method": "GET",
"verify": true,
"comment": "获取收到的回复"
},
"at": {
"url": "https://api.bilibili.com/x/msgfeed/at",
"method": "GET",
"verify": true,
"comment": "获取未读 AT"
},
"system_msg": {
"url": "https://message.bilibili.com/x/sys-msg/query_user_notify",
"method": "GET",
Expand Down
13 changes: 12 additions & 1 deletion bilibili_api/data/api/user.json
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,17 @@
"comment": "专栏文集"
},
"dynamic": {
"url": "https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history",
"method": "GET",
"verify": false,
"params": {
"host_uid": "int: uid",
"offset_dynamic_id": "int: 动态偏移用,第一页为 0",
"need_top": "int bool: 是否显示置顶动态"
},
"comment": "用户动态信息"
},
"dynamic_new": {
"url": "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space",
"method": "GET",
"verify": false,
Expand Down Expand Up @@ -570,4 +581,4 @@
}
}
}
}
}
57 changes: 47 additions & 10 deletions bilibili_api/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import asyncio
import logging
import datetime
from typing import Union
from typing import Union, Optional

from apscheduler.schedulers.asyncio import AsyncIOScheduler

Expand Down Expand Up @@ -129,45 +129,82 @@ async def get_session_detail(
return await Api(**api, credential=credential).update_params(**params).result


async def get_likes(credential: Credential) -> dict:
async def get_replies(
credential: Credential,
last_reply_id: Optional[int] = None,
reply_time: Optional[int] = None,
) -> dict:
"""
获取收到的回复
Args:
credential (Credential): 凭据类.
last_reply_id (Optional, int) 最后一个评论的 ID
reply_time (Optional, int) 最后一个评论发送时间
Returns:
dict: 调用 API 返回的结果
"""
api = API["session"]["replies"]
params = {"id": last_reply_id, "reply_time": reply_time}
return await Api(**api, credential=credential).update_params(**params).result


async def get_likes(
credential: Credential, last_id: int = None, like_time: int = None
) -> dict:
"""
获取收到的赞
Args:
credential (Credential): 凭据类.
last_id (Optional, int) 最后一个 ID
like_time (Optional, int) 最后一个点赞发送时间
Returns:
dict: 调用 API 返回的结果
"""
api = API["session"]["likes"]
return await Api(**api, credential=credential).result
params = {"id": last_id, "like_time": like_time}
return await Api(**api, credential=credential).update_params(**params).result


async def get_unread_messages(credential: Credential) -> dict:
async def get_at(
credential: Credential, last_uid: int = None, at_time: int = None
) -> dict:
"""
获取未读的信息
获取收到的 AT
Args:
credential (Credential): 凭据类.
last_id (Optional, int) 最后一个 ID
at_time (Optional, int) 最后一个点赞发送时间
Returns:
dict: 调用 API 返回的结果
"""
api = API["session"]["unread"]
return await Api(**api, credential=credential).result
api = API["session"]["at"]
params = {"id": last_uid, "at_time": at_time}
return await Api(**api, credential=credential).update_params(**params).result


async def get_replies(credential: Credential) -> dict:
async def get_unread_messages(credential: Credential) -> dict:
"""
获取收到的回复
获取未读的信息
Args:
credential (Credential): 凭据类.
Returns:
dict: 调用 API 返回的结果
"""
api = API["session"]["replies"]
api = API["session"]["unread"]
return await Api(**api, credential=credential).result


Expand Down
48 changes: 37 additions & 11 deletions bilibili_api/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,39 +469,65 @@ async def get_article_list(
api = API["info"]["article_lists"]
params = {"mid": self.__uid, "sort": order.value}
return await Api(**api, credential=self.credential).update_params(**params).result

async def get_dynamics(self, offset: int = 0) -> dict:
async def get_dynamics(self, offset: int = 0, need_top: bool = False) -> dict:
"""
获取用户动态。
建议使用 user.get_dynamics_new() 新接口。
Args:
offset (str, optional): 该值为第一次调用本方法时,数据中会有个 next_offset 字段,
指向下一动态列表第一条动态(类似单向链表)。
根据上一次获取结果中的 next_offset 字段值,
循环填充该值即可获取到全部动态。
0 为从头开始。
Defaults to 0.
need_top (bool, optional): 显示置顶动态. Defaults to False.
Returns:
dict: 调用接口返回的内容。
"""
api = API["info"]["dynamic"]
params = {
"host_uid": self.__uid,
"offset_dynamic_id": offset,
"need_top": 1 if need_top else 0,
}
data = await Api(**api, credential=self.credential).update_params(**params).result
# card 字段自动转换成 JSON。
if "cards" in data:
for card in data["cards"]:
card["card"] = json.loads(card["card"])
card["extend_json"] = json.loads(card["extend_json"])
return data

async def get_dynamics_new(self, offset: int = "") -> dict:
"""
获取用户动态。
Args:
offset (str, optional): 该值为第一次调用本方法时,数据中会有个 offset 字段,
指向下一动态列表第一条动态(类似单向链表)。
根据上一次获取结果中的 next_offset 字段值,
循环填充该值即可获取到全部动态。
0 为从头开始
Defaults to 0.
空字符串为从头开始
Defaults to "".
Returns:
dict: 调用接口返回的内容。
"""
api = API["info"]["dynamic"]
self.credential.raise_for_no_sessdata()
api = API["info"]["dynamic_new"]
params = {
"host_mid": self.__uid,
"offset": offset,
"features": "itemOpusStyle",
"timezone_offset": -480
}
data = await Api(**api, credential=self.credential).update_params(**params).result
# card 字段自动转换成 JSON。
if "cards" in data:
for card in data["cards"]:
card["card"] = json.loads(card["card"])
card["extend_json"] = json.loads(card["extend_json"])
return data

async def get_subscribed_bangumi(
Expand Down
Loading

0 comments on commit ad07f7b

Please sign in to comment.