a57ed57616
Live validation: businessFriendList uses 'page' (not pageNum) and REQUIRES departmentId (root) + type or returns empty. Same class of bug as wxUser/list. Co-Authored-By: Claude <noreply@anthropic.com>
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
"""Seed a slice of WhatsApp friends + one conversation's messages into smoke.db."""
|
|
import asyncio
|
|
import time
|
|
|
|
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
|
|
|
from app.db import models # noqa: F401
|
|
from app.scraper.wechat import scrape_departments
|
|
from app.scraper.whatsapp import scrape_whatsapp_friends, scrape_whatsapp_messages
|
|
from app.storage.repos import upsert_customer, upsert_messages
|
|
from scripts.smoke_wechat import _push_settings_into_environ, build_client_from_env
|
|
|
|
# A known active WhatsApp conversation (Pasha-hesucar <-> Алекс).
|
|
UID = "15638182659@s.whatsapp.net"
|
|
FRIEND_UID = "375292581799@s.whatsapp.net"
|
|
|
|
|
|
async def _root_department_id(client) -> str | None:
|
|
async for d in scrape_departments(client):
|
|
if not d.get("parent_id"):
|
|
return d.get("dept_id")
|
|
return None
|
|
|
|
|
|
async def main() -> None:
|
|
_push_settings_into_environ()
|
|
client = build_client_from_env()
|
|
engine = create_async_engine("sqlite+aiosqlite:///./smoke.db")
|
|
sm = async_sessionmaker(engine, expire_on_commit=False)
|
|
|
|
root_dept = await _root_department_id(client)
|
|
friends = []
|
|
async for rec in scrape_whatsapp_friends(
|
|
client, department_id=root_dept or "", page_size=10
|
|
):
|
|
friends.append(rec)
|
|
if len(friends) >= 10:
|
|
break
|
|
|
|
now = int(time.time() * 1000)
|
|
msgs = []
|
|
async for m in scrape_whatsapp_messages(client, UID, FRIEND_UID, now - 60 * 86_400_000, now):
|
|
msgs.append(m)
|
|
if len(msgs) >= 40:
|
|
break
|
|
|
|
async with sm() as session:
|
|
for rec in friends:
|
|
await upsert_customer(session, rec)
|
|
nmsg = await upsert_messages(session, msgs)
|
|
await session.commit()
|
|
print(f"upserted {len(friends)} whatsapp friends, {nmsg} whatsapp messages")
|
|
await client.aclose()
|
|
await engine.dispose()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|