media_download.py 850 B

12345678910111213141516171819202122
  1. """Shared media download helpers for acquisition and decode adapters."""
  2. from __future__ import annotations
  3. import httpx
  4. REFERER = {
  5. "douyin": "https://www.douyin.com/",
  6. "kuaishou": "https://www.kuaishou.com/",
  7. "bilibili": "https://www.bilibili.com/",
  8. "shipinhao": "https://channels.weixin.qq.com/",
  9. "xiaohongshu": "https://www.xiaohongshu.com/",
  10. "weixin": "https://mp.weixin.qq.com/",
  11. }
  12. IOS_UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15"
  13. def download_media_bytes(url: str, platform: str, timeout: float = 180.0) -> bytes:
  14. headers = {"User-Agent": IOS_UA, "Referer": REFERER.get(platform, "")}
  15. with httpx.stream("GET", url, headers=headers, timeout=timeout, follow_redirects=True) as response:
  16. response.raise_for_status()
  17. return b"".join(response.iter_bytes())