Browse Source

feat: 新增秘塔ai搜索session检查功能

master
zzx 3 months ago
parent
commit
b5a04c3751
  1. 8
      abs_spider.py
  2. 2
      main.py
  3. 25
      spiders/ai_seo/metaso.py
  4. 2
      utils/ai_seo_api_utils.py

8
abs_spider.py

@ -72,6 +72,7 @@ class AbstractAiSeoSpider(ABC):
if self.load_session:
self.session_info = await get_spider_session(self.platform_id, id)
if self.platform_id != 8:
print(self.session_info['session_path'])
self.browser_content = await self.browser.new_context(storage_state=self.session_info['session_path'])
else:
self.browser_content = await self.browser.new_context()
@ -129,7 +130,12 @@ class AbstractAiSeoSpider(ABC):
logger.error(f"[{self.get_platform_name()}]session状态无效! ❌ id: {session_id}")
# 更新session状态
await AiSeoApis.update_spider_session(session_id, 1 if result else 2)
status = None
if self.get_platform_id() != 13:
status = 1 if result else 2
else:
status = 1 if result else 3
await AiSeoApis.update_spider_session(session_id, status)
return result

2
main.py

@ -84,7 +84,7 @@ async def test():
await asyncio.sleep(config.TEST_INTERVAL * 6)
async def test_check_session():
sessions = await AiSeoApis.list_spider_session(1)
sessions = await AiSeoApis.list_spider_session(13)
playwright, browser = await init_browser()
for session in sessions:
spider = get_spider(session['platform_id'], '你好', '品牌词', browser)

25
spiders/ai_seo/metaso.py

@ -112,10 +112,6 @@ class MetasoSpider(AbstractAiSeoSpider):
def get_platform_name(self) -> str:
return 'Metaso'
async def __listen_response(self, response):
url = response.url
if response.status == 200:
@ -194,6 +190,7 @@ class MetasoSpider(AbstractAiSeoSpider):
else:
pass
def handle_listen_response_error(self, func):
"""
@ -214,6 +211,26 @@ class MetasoSpider(AbstractAiSeoSpider):
return wrapper
async def do_check_session(self) -> bool:
try:
await self.browser_page.goto(self.get_home_url(), timeout=200000)
await asyncio.sleep(2)
info = await self.browser_page.wait_for_selector(
'#left-menu > div > div.LeftMenu_footer__qsJdJ > div > div > div > button', timeout=600000)
await info.click()
edu = self.browser_page.locator(
'//div[@aria-label="每天有100搜索额度"]/following-sibling::div[1]//span[contains(@class, "MuiTypography-root")]')
edu_txt = await edu.text_content()
if edu_txt == '0':
return False
# 开始操作
chat_input_element = self.browser_page.locator("//textarea[contains(@class, 'search-consult-textarea')]")
# 输入提问词
await chat_input_element.fill(self.prompt)
logger.info(f"[{self.get_platform_name()}]查询还剩{edu_txt} 次")
return True
except Exception:
return False
async def run():

2
utils/ai_seo_api_utils.py

@ -180,7 +180,7 @@ class AiSeoApis:
uri = '/api/third/getOneSpiderSession'
url = AiSeoApis.build_full_url(uri)
json_data = {**config.AI_SEO_API_AUTH, 'platform_id': platform_id}
if not id:
if id:
json_data['id'] = id
async with httpx.AsyncClient() as client:
response = await client.get(url, params=json_data, timeout=60)

Loading…
Cancel
Save