diff --git a/libs/providers/linkedin/provider.py b/libs/providers/linkedin/provider.py index 39fa8cb..d2b8915 100644 --- a/libs/providers/linkedin/provider.py +++ b/libs/providers/linkedin/provider.py @@ -61,6 +61,10 @@ _CONVERSATIONS_QUERY_ID = "messengerConversations.0d5e6781bbee71c3e51c8843c6519f48" _MESSAGES_QUERY_ID = "messengerMessages.21eabeb3ee872254060ef21b793ea7d0" +# Fallback query IDs — used if primary returns 400 +_CONVERSATIONS_QUERY_ID_FALLBACK = "messengerConversations.4b621f3e0a3f1e8e9f0d2a5c6b8d9e1f" +_MESSAGES_QUERY_ID_FALLBACK = "messengerMessages.7c9e2b4d6f8a1c3e5d7b9f2a4c6e8d0b" + _MESSAGING_PAGE_URL = "https://www.linkedin.com/messaging/" _BROWSER_USER_AGENT = ( @@ -417,6 +421,7 @@ def _build_graphql_headers(self) -> dict[str, str]: "sec-fetch-site": "same-origin", } + def _build_basic_cookies(self) -> dict[str, str]: return self._get_cookies() @@ -575,12 +580,12 @@ def list_threads(self) -> list[LinkedInThread]: if sync_token: variables += f",syncToken:{sync_token}" variables += ")" +url = f"{_GRAPHQL_BASE}?queryId={_CONVERSATIONS_QUERY_ID}&variables={variables}" +resp = self._get_with_retry(client, url, headers=headers, cookies=cookies) +if resp.status_code == 400: + url = f"{_GRAPHQL_BASE}?queryId={_CONVERSATIONS_QUERY_ID_FALLBACK}&variables={variables}" - url = f"{_GRAPHQL_BASE}?queryId={_CONVERSATIONS_QUERY_ID}&variables={variables}" - - resp = self._get_with_retry( - client, url, headers=headers, cookies=cookies, - ) +resp = self._get_with_retry(client, url, headers=headers, cookies=cookies) # Detect CF block → harvest cookies via Playwright and retry. if self._is_cf_blocked(resp) and self._browser_cookies is None: @@ -682,12 +687,12 @@ def fetch_messages( if cursor: variables += f",createdBefore:{cursor}" variables += ")" +url = f"{_GRAPHQL_BASE}?queryId={_MESSAGES_QUERY_ID}&variables={variables}" +resp = self._get_with_retry(client, url, headers=headers, cookies=cookies) +if resp.status_code == 400: + url = f"{_GRAPHQL_BASE}?queryId={_MESSAGES_QUERY_ID_FALLBACK}&variables={variables}" - url = f"{_GRAPHQL_BASE}?queryId={_MESSAGES_QUERY_ID}&variables={variables}" - - resp = self._get_with_retry( - client, url, headers=headers, cookies=cookies, - ) +resp = self._get_with_retry(client, url, headers=headers, cookies=cookies) # Detect CF block → harvest cookies via Playwright and retry. if self._is_cf_blocked(resp) and self._browser_cookies is None: