import csv import time import requests import fire RepostAPI = "https://m.weibo.cn/api/statuses/repostTimeline" class Main(): def _get_repost_page(self, weiboId, page, session=requests): params = {"id": weiboId, "page": page} response = session.get(RepostAPI, params=params) return response.json() def _get_reposts(self, cookie, weiboId, wait): max_page = None i = 0 with requests.Session() as session: session.headers.update({"Cookie": cookie}) while max_page is None or i < max_page: i += 1 print(f"Fetching page {i}...") page = self._get_repost_page(weiboId, i, session) if max_page is None: max_page = page["data"]["max"] for repost in page["data"]["data"]: yield repost time.sleep(wait) def _to_row(self, repost): user = repost["user"]["screen_name"] time = repost["created_at"] text = repost["raw_text"] url = f'https://www.weibo.com/{repost["user"]["id"]}/{repost["bid"]}' return [user, time, text, url] def fetch_reposts(self, output, wait=1): weiboId = input("Weibo ID: ") cookie = input("Cookie: ") with open(output, "w", newline="") as f: writer = csv.writer(f) writer.writerow(["User", "Time", "Text", "URL"]) for repost in self._get_reposts(cookie, weiboId, wait): writer.writerow(self._to_row(repost)) print(f"Reposts saved to {output}") fire.Fire(Main)