import random import time from typing import Iterable def _safe_float(value) -> float: try: return float(value or 0) except (TypeError, ValueError): return 0.0 def generate_timeline_id() -> str: return f"{int(time.time() * 1000)}{random.randint(1000, 9999)}" def build_media_xml(media_items: Iterable[dict]) -> str: parts = [] for index, item in enumerate(media_items): url = item.get("url", "") thumb = item.get("thumb", url) media_id = item.get("id") or f"{int(time.time() * 1000)}{index}" md5 = item.get("md5", "") total_size = item.get("total_size", 0) width = item.get("width", 0) height = item.get("height", 0) parts.append( f""" """.strip() ) return "\n".join(parts) def build_friend_circle_xml(wxid: str, content: str, media_items: list[dict] | None = None, timeline_id: str | None = None, create_time: int | None = None) -> str: media_items = media_items or [] timeline_id = timeline_id or generate_timeline_id() create_time = create_time or int(time.time()) content_style = 1 if media_items else 2 media_xml = build_media_xml(media_items) return f""" 0 0 0 {media_xml} """.strip()