From 9a74d9e1092e37d4e1f8b6c6431b18a4793781d7 Mon Sep 17 00:00:00 2001 From: Alexander Graf <17130992+aandergr@users.noreply.github.com> Date: Sat, 26 Oct 2024 17:59:04 +0200 Subject: [PATCH] Post._obtain_metadata: Use new XDT doc_id graphql query Fixes #2384. --- instaloader/structures.py | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/instaloader/structures.py b/instaloader/structures.py index c9ae5a1..bdcc52c 100644 --- a/instaloader/structures.py +++ b/instaloader/structures.py @@ -319,13 +319,23 @@ class Post: def _obtain_metadata(self): if not self._full_metadata_dict: - pic_json = self._context.graphql_query( - '2b0673e0dc4580674a88d426fe00ea90', - {'shortcode': self.shortcode} - ) - self._full_metadata_dict = pic_json['data']['shortcode_media'] - if self._full_metadata_dict is None: + pic_json = self._context.doc_id_graphql_query( + "8845758582119845", {"shortcode": self.shortcode} + )["data"]["xdt_shortcode_media"] + if pic_json is None: raise BadResponseException("Fetching Post metadata failed.") + try: + xdt_types = { + "XDTGraphImage": "GraphImage", + "XDTGraphVideo": "GraphVideo", + "XDTGraphSidecar": "GraphSidecar", + } + pic_json["__typename"] = xdt_types[pic_json["__typename"]] + except KeyError as exc: + raise BadResponseException( + f"Unknown __typename in metadata: {pic_json['__typename']}." + ) from exc + self._full_metadata_dict = pic_json if self.shortcode != self._full_metadata_dict['shortcode']: self._node.update(self._full_metadata_dict) raise PostChangedException @@ -734,7 +744,11 @@ class Post: # Avoid doing additional requests if there are no comments return [] - comment_edges = self._field('edge_media_to_comment', 'edges') + try: + comment_edges = self._field("edge_media_to_parent_comment", "edges") + except KeyError: + comment_edges = self._field("edge_media_to_comment", "edges") + answers_count = sum(edge['node'].get('edge_threaded_comments', {}).get('count', 0) for edge in comment_edges) if self.comments == len(comment_edges) + answers_count: