moviepy_with_manga_test / bilibili_api /article_category.py
rogerxavier's picture
Upload 258 files
0aee47a verified
"""
bilibili_api.article_category
专栏分类相关
"""
import os
import copy
import json
from enum import Enum
from typing import List, Tuple, Optional
from .utils.utils import get_api
from .utils.network import Api
API = get_api("article-category")
class ArticleOrder(Enum):
"""
专栏排序方式.
+ DEFAULT: 默认
+ TIME: 投稿时间排序
+ LIKE: 点赞数最多
+ COMMENTS: 评论数最多
+ FAVORITES: 收藏数最多
"""
DEFAULT = 0
TIME = 1
LIKE = 2
COMMENTS = 3
FAVORITES = 4
def get_category_info_by_id(id: int) -> Tuple[Optional[dict], Optional[dict]]:
"""
获取专栏分类信息
Args:
id (int): id
Returns:
Tuple[dict | None, dict | None]: 第一个是主分区,第二个是字分区。没有找到则为 (None, None)
"""
with open(
os.path.join(os.path.dirname(__file__), "data/article_category.json"),
encoding="utf-8",
) as f:
data = json.loads(f.read())
for main_category in data:
if main_category["id"] == id:
return main_category, None
for sub_category in main_category["children"]:
if sub_category["id"] == id:
return main_category, sub_category
else:
return None, None
def get_category_info_by_name(name: str) -> Tuple[Optional[dict], Optional[dict]]:
"""
获取专栏分类信息
Args:
name (str): 分类名
Returns:
Tuple[dict | None, dict | None]: 第一个是主分区,第二个是字分区。没有找到则为 (None, None)
"""
with open(
os.path.join(os.path.dirname(__file__), "data/article_category.json"),
encoding="utf-8",
) as f:
data = json.loads(f.read())
for main_category in data:
if main_category["name"] == name:
return main_category, None
for sub_category in main_category["children"]:
if sub_category["name"] == name:
return main_category, sub_category
else:
return None, None
def get_categories_list() -> List[dict]:
"""
获取所有的分类的数据
Returns:
List[dict]: 所有分区的数据
"""
with open(
os.path.join(os.path.dirname(__file__), "data/article_category.json"),
encoding="utf-8",
) as f:
data = json.loads(f.read())
categories_list = []
for main_category in data:
main_category_copy = copy.copy(main_category)
categories_list.append(main_category_copy)
main_category_copy.pop("children")
for sub_category in main_category["children"]:
sub_category_copy = copy.copy(sub_category)
sub_category_copy["father"] = main_category_copy
categories_list.append(sub_category_copy)
return categories_list
def get_categories_list_sub() -> dict:
"""
获取所有分区的数据
含父子关系(即一层次只有主分区)
Returns:
dict: 所有分区的数据
"""
with open(
os.path.join(os.path.dirname(__file__), "data/article_category.json"),
encoding="utf-8",
) as f:
return json.loads(f.read())
async def get_category_recommend_articles(
category_id: int = 0,
order: ArticleOrder = ArticleOrder.DEFAULT,
page_num: int = 1,
page_size: int = 20,
) -> dict:
"""
获取指定分区的推荐文章
Args:
category_id (int) : 专栏分类的 id, 0 为全部. Defaults to 0.
order (ArticleOrder): 排序方式. Defaults to ArticleOrder.DEFAULT.
page_num (int) : 页码. Defaults to 1.
page_size (int) : 每一页数据大小. Defaults to 20.
Returns:
dict: 调用 API 返回的结果
"""
api = API["info"]["recommends"]
params = {"cid": category_id, "sort": order.value, "pn": page_num, "ps": page_size}
return await Api(**api).update_params(**params).result