diff --git a/maigret/activation.py b/maigret/activation.py index 9ad9d4c..41d341d 100644 --- a/maigret/activation.py +++ b/maigret/activation.py @@ -39,6 +39,47 @@ class ParsingActivator: bearer_token = r.json()["accessToken"] site.headers["authorization"] = f"Bearer {bearer_token}" + @staticmethod + def weibo(site, logger): + headers = dict(site.headers) + import requests + + session = requests.Session() + # 1 stage: get the redirect URL + r = session.get( + "https://weibo.com/clairekuo", + headers=headers, + allow_redirects=False + ) + logger.debug( + f"1 stage: {'success' if r.status_code == 302 else 'no 302 redirect, fail!'}" + ) + location = r.headers.get("Location") + + # 2 stage: go to passport visitor page + headers["Referer"] = location + r = session.get(location, headers=headers) + logger.debug( + f"2 stage: {'success' if r.status_code == 200 else 'no 200 response, fail!'}" + ) + + # 3 stage: gen visitor token + headers["Referer"] = location + r = session.post( + "https://passport.weibo.com/visitor/genvisitor2", + headers=headers, + data={ + 'cb': 'visitor_gray_callback', + 'tid': '', + 'from': 'weibo' + }, + ) + cookies = r.headers.get('set-cookie') + logger.debug( + f"3 stage: {'success' if r.status_code == 200 and cookies else 'no 200 response and cookies, fail!'}" + ) + site.headers["Cookie"] = cookies + def import_aiohttp_cookies(cookiestxt_filename): cookies_obj = MozillaCookieJar(cookiestxt_filename) diff --git a/maigret/checking.py b/maigret/checking.py index bb203ea..549b596 100644 --- a/maigret/checking.py +++ b/maigret/checking.py @@ -277,14 +277,16 @@ def process_site_result( ) if site.activation and html_text and is_need_activation: + logger.debug(f"Activation for {site.name}") method = site.activation["method"] try: activate_fun = getattr(ParsingActivator(), method) # TODO: async call activate_fun(site, logger) - except AttributeError: + except AttributeError as e: logger.warning( - f"Activation method {method} for site {site.name} not found!" + f"Activation method {method} for site {site.name} not found!", + exc_info=True, ) except Exception as e: logger.warning( diff --git a/maigret/resources/data.json b/maigret/resources/data.json index c09635d..10c08bb 100644 --- a/maigret/resources/data.json +++ b/maigret/resources/data.json @@ -30186,20 +30186,39 @@ }, "Weibo": { "absenceStrs": [ - "username_box\\", - "info_list username\\" + "

400 Bad Request

" ], "presenseStrs": [ - "pf_username\\", - "use_num\\" + "{\"ok\":1,\"data\":{\"user\":" ], + "headers": { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.5", + "Upgrade-Insecure-Requests": "1", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "cross-site", + "Priority": "u=0, i", + "Pragma": "no-cache", + "Cache-Control": "no-cache", + "Accept-Encoding": "gzip, deflate, br, zstd", + "TE": "trailers", + "Cookie": "SUB=_2AkMQDkYqf8NxqwFRmf4QzWnqbop-wwHEieKmUrfxJRMxHRl-yT9kqm4gtRB6O45oxc8K9O2Jsarg5zYMmQy3bR_LfISF; expires=Saturday, 06-Dec-2025 09:51:25 GMT; path=/; domain=.weibo.com; secure; httponly; SameSite=None, SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9Whze9rurqv2pUdg7sY.DTbO; expires=Saturday, 06-Dec-2025 09:51:25 GMT; path=/; domain=.weibo.com, SRT=D.QqHBTrsMMFkSVdRtOeYoWrSNUdRr4Q9QUeE8U3vkW3WzMdbbN-sPVcStNbHi5mYNUCsuPDbhVdrrS3MNAZSLiDP65FJtNqbLJ%219qRQHeiQ9SOdsM5Oi84byJS%21bOMX77%2AB.vAflW-P9Rc0lR-ykKDvnJqiQVbiRVPBtS%21r3J8sQVqbgVdWiMZ4siOzu4DbmKPWf5c4uVePpVQRpVEP%21SqWqdNumPFHL; expires=Mon, 04-Dec-2034 09:51:25 GMT; Max-Age=315360000; path=/; domain=.passport.weibo.com; secure; HttpOnly, SRF=1733478685; expires=Mon, 04-Dec-2034 09:51:25 GMT; Max-Age=315360000; path=/; domain=.passport.weibo.com; secure" + }, + "activation": { + "method": "weibo", + "marks": [ + "\u5fae\u535a</title", + "<title>Sina Visitor System" + ], + "url": "https://passport.weibo.com/visitor/genvisitor2" + }, + "urlProbe": "https://weibo.com/ajax/profile/info?custom={username}", "url": "https://weibo.com/{username}", "urlMain": "https://weibo.com", "usernameClaimed": "clairekuo", "usernameUnclaimed": "noonewouldeverusethis7", - "headers": { - "Cookie": "SUB=_2AkMXyuc_f8NxqwJRmP8SyWPrbo13zAvEieKhlhbkJRMxHRl-123" - }, "checkType": "message", "tags": [ "cn",