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\\" + "