From a785e4fc638a327866c3d1e5f0519f55bc09c9c8 Mon Sep 17 00:00:00 2001 From: zjf Date: Thu, 29 May 2025 10:49:58 +0800 Subject: [PATCH] rpa m --- .runtime.env | 2 +- src/cluster/rpa.py | 58 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/.runtime.env b/.runtime.env index dbc5e5b..755ef41 100644 --- a/.runtime.env +++ b/.runtime.env @@ -1,5 +1,5 @@ MODAL_ENVIRONMENT=dev -modal_app_name=bowong-ai-video +modal_app_name=rpa S3_mount_dir=/mntS3 S3_bucket_name=modal-media-cache S3_region=ap-northeast-2 diff --git a/src/cluster/rpa.py b/src/cluster/rpa.py index f556600..55dc06d 100644 --- a/src/cluster/rpa.py +++ b/src/cluster/rpa.py @@ -5,6 +5,8 @@ import os import time from pathlib import Path from typing import List, Optional + +import aiohttp import httpx from ulid import ULID @@ -442,8 +444,36 @@ def submit_job(data: LiveStreamProductWatchRequest): return call.object_id +def submit_job_new(data: LiveStreamProductWatchRequest): + call = rpa_new.spawn(data) + return call.object_id + + ########################################rpa_image start###################################################### -with rpa_image.imports(): +with (rpa_image.imports()): + @app.function(timeout=8 * 60 * 60, volumes={"/data": rpa_vol}, cloud="gcp", region="ap") + async def rpa_new(data: LiveStreamProductWatchRequest): + webcast_id = data.live_id + url = f"https://live.douyin.com/{webcast_id}?open_promotion_list=1" + print(url) + async with async_playwright() as p: + browser: Browser = await p.chromium.launch(headless=True, channel='msedge') + context = await browser.new_context() + await context.add_cookies(cookies) + print("Loaded cookies") + + page = await context.new_page() + await page.goto(url) + + print("goto end") + + print("title:", await page.title()) + + await page.wait_for_load_state("networkidle") + + await browser.close() + + @app.function(timeout=8 * 60 * 60, volumes={"/data": rpa_vol}, cloud="gcp", region="ap") async def rpa_run(data: LiveStreamProductWatchRequest) -> dict: """ @@ -470,12 +500,17 @@ with rpa_image.imports(): "liveId": data.live_id }, headers={ "Authentication": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOiI5ZjIwZDM0MC0xY2U0LTQ5MzAtYTA5NC0yZjM2ODYzNGRiYzciLCJ1aWQiOiI1ZTQzYTc1ZC1hN2M3LTQ1NjQtOTI0OS01NWEyMDIxZDk0YzUiLCJ1c24iOiJ1c2VyQGJvd29uZ2FpLmNvbSIsImV4cCI6MTc0ODQxNjA1Nn0.IWMxl47oSFJyNYQV6M511-rU8GDIGh8r9H5Yt8LShGw"}) - status_code = res.raise_for_status().status_code - print(status_code) + try: + res.raise_for_status() + except BaseException as e: + print(e) data_res = res.json() print(f"!!!!!! data_res:{data_res}") - if status_code == 200 and data_res['code'] == 0: + if data_res is not None \ + and 'code' in data_res \ + and data_res['code'] == 0: + result.ext_data = data_res['data'] else: result.msg = "createLivePull2Push 推流失败" @@ -500,7 +535,7 @@ with rpa_image.imports(): await context.add_cookies(cookies) logger.info("Loaded cookies") page: Page = await context.new_page() - url = f"https://live.douyin.com/{webcast_id}?open_promotion_list=1" + url = f"https://live.douyin.com/{webcast_id}?open_promotion_list=1&from_search=true" logger.info(f"Navigating to {url}") await page.goto(url, wait_until="domcontentloaded") logger.info(f"Navigating to end {url}") @@ -539,11 +574,13 @@ with rpa_image.imports(): # 312898731614 # webcast_ids = ["36861064178"] # webcast_ids = ["36861064178"] - webcast_id = "333555252930" + webcast_id = "65731953339" - data: LiveStreamProductWatchRequest = LiveStreamProductWatchRequest(live_id=webcast_id,live_stream_name=str(ULID())) + data: LiveStreamProductWatchRequest = LiveStreamProductWatchRequest(live_id=webcast_id, + live_stream_name=str(ULID())) # TODO other info call_id = submit_job(data) + # call_id = submit_job_new(data) print("------call_id:", call_id) result = get_job_result(call_id, 8 * 60 * 60) # result = get_job_result(call_id) @@ -563,8 +600,8 @@ with rpa_image.imports(): # title = await rpa_run.remote.aio(webcast_id="36861064178") # logger.info(f"title = {title}") -########################################rpa_image end###################################################### +########################################rpa_image end###################################################### def local_main_test(): @@ -579,6 +616,7 @@ def local_main_test(): print(status_code) print(res.json()) + def foo(webcast_id): with sync_playwright() as p: url = f"https://live.douyin.com/{webcast_id}?open_promotion_list=1" @@ -591,8 +629,4 @@ def foo(webcast_id): if __name__ == '__main__': - # local_main_test() - foo("333555252930") - - pass