From 715582138b32a0a44d24c8d0e600d0b9de99eb25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Koch-Kramer?= Date: Thu, 13 Jul 2017 22:33:01 +0200 Subject: [PATCH] Replaced usages of shortcode with mediaid --- instaloader.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/instaloader.py b/instaloader.py index aad2b9f..b4cf94b 100755 --- a/instaloader.py +++ b/instaloader.py @@ -71,6 +71,10 @@ class LoginRequiredException(NonfatalException): pass +class InvalidArgumentException(NonfatalException): + pass + + class BadCredentialsException(InstaloaderException): pass @@ -134,16 +138,14 @@ def get_anonymous_session() -> requests.Session: def shortcode_to_mediaid(code: str) -> int: if len(code) > 11: - print("Wrong shortcode \"{0}\", unable to convert to mediaid.".format(code), file = sys.stderr) - return + raise InvalidArgumentException("Wrong shortcode \"{0}\", unable to convert to mediaid.".format(code)) code = 'A' * (12 - len(code)) + code return int.from_bytes(b64decode(code.encode(), b'-_'), 'big') def mediaid_to_shortcode(mediaid: int) -> str: if mediaid.bit_length() > 64: - print("Wrong mediaid {0}, unable to convert to shortcode".format(str(mediaid)), file = sys.stderr) - return + raise InvalidArgumentException("Wrong mediaid {0}, unable to convert to shortcode".format(str(mediaid))) return b64encode(mediaid.to_bytes(9, 'big'), b'-_').decode().replace('A', ' ').lstrip().replace(' ','A') @@ -519,7 +521,8 @@ class Instaloader: date = node["date"] if "date" in node else node["taken_at_timestamp"] if '__typename' in node: if node['__typename'] == 'GraphSidecar': - sidecar_data = self.session.get('https://www.instagram.com/p/' + node['code'] + '/', + sidecar_data = self.session.get('https://www.instagram.com/p/' + + mediaid_to_shortcode(int(node['id'])) + '/', params={'__a': 1}).json() edge_number = 1 downloaded = True @@ -553,7 +556,8 @@ class Instaloader: self.save_caption(name, date, node["caption"]) else: self._log("", end=' ', flush=True) - node_code = node['shortcode'] if 'shortcode' in node else node['code'] + node_id = node['id'] if 'id' in node else node['media_id'] + node_code = mediaid_to_shortcode(int(node_id)) if node["is_video"] and download_videos: video_data = self.get_json('p/' + node_code) self.download_pic(name, @@ -646,7 +650,8 @@ class Instaloader: if max_count is not None and count > max_count: return if lookup_username: - metadata = self.get_node_metadata(node['shortcode'] if 'shortcode' in node else node['code']) + node_id = node['id'] if 'id' in node else node['media_id'] + metadata = self.get_node_metadata(mediaid_to_shortcode(int(node_id))) pathname = metadata['owner']['username'] else: pathname = '#{0}'.format(hashtag)