diff --git a/open_linkedin_api/linkedin.py b/open_linkedin_api/linkedin.py index 7d63e15..2aa71b9 100644 --- a/open_linkedin_api/linkedin.py +++ b/open_linkedin_api/linkedin.py @@ -12,7 +12,7 @@ from urllib.parse import urlencode, quote from typing import Dict, Union, Optional, List, Literal -from open_linkedin_api.client import Client +from open_linkedin_api.client import Client, UnauthorizedException from open_linkedin_api.utils.helpers import ( get_id_from_urn, get_urn_from_raw_update, @@ -86,7 +86,19 @@ def _fetch(self, uri: str, evade=default_evade, base_request=False, **kwargs): evade() url = f"{self.client.API_BASE_URL if not base_request else self.client.LINKEDIN_BASE_URL}{uri}" - return self.client.session.get(url, **kwargs) + res = self.client.session.get(url, **kwargs) + + if res.status_code == 401: + raise UnauthorizedException() + + if not ( + 200 <= res.status_code < 300 + ): # I don't know all status_codes successfully of LkIn + raise Exception( + f"Request failed with status code {res.status_code}: {res.text}" + ) + + return res def _cookies(self): """Return client cookies""" @@ -101,7 +113,19 @@ def _post(self, uri: str, evade=default_evade, base_request=False, **kwargs): evade() url = f"{self.client.API_BASE_URL if not base_request else self.client.LINKEDIN_BASE_URL}{uri}" - return self.client.session.post(url, **kwargs) + + res = self.client.session.post(url, **kwargs) + if res.status_code == 401: + raise UnauthorizedException() + + if not ( + 200 <= res.status_code < 300 + ): # I don't know all status_codes successfully of LkIn + raise Exception( + f"Request failed with status code {res.status_code}: {res.text}" + ) + + return res def get_profile_posts( self, @@ -140,7 +164,7 @@ def get_profile_posts( res = self._fetch(url, params=url_params) data = res.json() if data and "status" in data and data["status"] != 200: - self.logger.info("request failed: {}".format(data["message"])) + self.logger.info(f"request failed:{data.get('status')} - {data.get('message')}") return [{}] while data and data["metadata"]["paginationToken"] != "": if len(data["elements"]) >= post_count: @@ -744,7 +768,7 @@ def get_profile( data = res.json() if data and "status" in data and data["status"] != 200: - self.logger.info("request failed: {}".format(data["message"])) + self.logger.info(f"request failed:{data.get('status')} - {data.get('message')}") return {} # massage [profile] data @@ -1688,7 +1712,7 @@ def get_job(self, job_id: str) -> Dict: data = res.json() if data and "status" in data and data["status"] != 200: - self.logger.info("request failed: {}".format(data["message"])) + self.logger.info(f"request failed:{data.get('status')} - {data.get('message')}") return {} return data