diff --git a/.gitignore b/.gitignore index 04b03ee..59ed096 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ credentials.json secrets/* browsertrix/* browsertrix-tmp/* -instaloader/* \ No newline at end of file +instaloader/* +instaloader.session \ No newline at end of file diff --git a/archivers/instagram_archiver.py b/archivers/instagram_archiver.py index 46b53b8..d7a3989 100644 --- a/archivers/instagram_archiver.py +++ b/archivers/instagram_archiver.py @@ -26,8 +26,16 @@ class InstagramArchiver(Archiver): try: self.insta.login(config.instagram_config.username, config.instagram_config. password) + #TODO: wait for this issue to be fixed https://github.com/instaloader/instaloader/issues/1758 + self.insta.save_session_to_file(config.instagram_config.session_file) except Exception as e: - logger.error(f"Unable to finish login: {e}\n{traceback.format_exc()}") + logger.error(f"Unable to finish login (retrying from file): {e}\n{traceback.format_exc()}") + try: + self.insta.load_session_from_file(config.instagram_config.username, config.instagram_config.session_file) + except Exception as e2: + logger.error(f"Unable to login from session file: {e2}\n{traceback.format_exc()}") + + def download(self, url, check_if_exists=False): post_matches = self.post_pattern.findall(url) diff --git a/configs/config.py b/configs/config.py index 80e4881..372b3d7 100644 --- a/configs/config.py +++ b/configs/config.py @@ -185,7 +185,8 @@ class Config: if "instagram" in secrets: self.instagram_config = InstagramConfig( username=secrets["instagram"]["username"], - password=secrets["instagram"]["password"] + password=secrets["instagram"]["password"], + session_file=secrets["instagram"].get("session_file", "instaloader.session") ) else: self.instagram_config = None diff --git a/configs/instagram_config.py b/configs/instagram_config.py index 73c45bc..a9f26b4 100644 --- a/configs/instagram_config.py +++ b/configs/instagram_config.py @@ -6,3 +6,4 @@ from dataclasses import dataclass class InstagramConfig: username: str password: str + session_file: str diff --git a/example.config.yaml b/example.config.yaml index b26f58f..7cd4ecb 100644 --- a/example.config.yaml +++ b/example.config.yaml @@ -71,6 +71,7 @@ secrets: instagram: username: "username" password: "password" + session_file: "instaloader.session" # <- default value google_sheets: # local filename: defaults to service_account.json, see https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account