from typing import Callable
from typing import TYPE_CHECKING
from typing import Union
from src.extract import Extractor
from src.interface.detail import Detail
from src.interface.template import API
from src.translation import _
if TYPE_CHECKING:
from src.config import Parameter
from src.testers import Params
class Mix(API):
def __init__(
self,
params: Union["Parameter", "Params"],
cookie: str = "",
proxy: str = None,
mix_id: str = None,
detail_id: str = None,
cursor=0,
count=12,
*args,
**kwargs,
):
super().__init__(params, cookie, proxy, *args, **kwargs)
self.mix_title = None
self.mix_id = mix_id
self.detail_id = detail_id
self.count = count
self.cursor = cursor
self.api = f"{self.domain}aweme/v1/web/mix/aweme/"
self.text = _("合集作品")
self.detail = Detail(
params,
cookie,
proxy,
self.detail_id,
)
def generate_params(
self,
) -> dict:
return self.params | {
"mix_id": self.mix_id,
"cursor": self.cursor,
"count": self.count,
"version_code": "170400",
"version_name": "17.4.0",
}
async def run(
self,
referer: str = None,
single_page=False,
data_key: str = "aweme_list",
error_text="",
cursor="cursor",
has_more="has_more",
params: Callable = lambda: {},
data: Callable = lambda: {},
method="GET",
headers: dict = None,
*args,
**kwargs,
):
await self.__get_mix_id()
if not self.mix_id:
self.log.warning(_("获取合集 ID 失败"))
return self.response
return await super().run(
referer,
single_page,
data_key,
error_text,
cursor,
has_more,
params,
data,
method,
headers,
*args,
**kwargs,
)
async def __get_mix_id(self):
if not self.mix_id:
self.mix_id = Extractor.extract_mix_id(await self.detail.run())
async def test():
from src.testers import Params
async with Params() as params:
i = Mix(
params,
mix_id="",
detail_id="",
)
print(await i.run())
if __name__ == "__main__":
from asyncio import run
run(test())