def media_comment(self, media_id: str, text: str, replied_to_comment_id: Optional[int] = None) -> Comment: """ Post a comment on a media Parameters ---------- media_id: str Unique identifier of a Media text: str String to be posted on the media Returns ------- Comment An object of Comment type """ assert self.user_id, "Login required" media_id = self.media_id(media_id) data = { "delivery_class": "organic", "feed_position": "0", "container_module": "self_comments_v2_feed_contextual_self_profile", # "comments_v2", "user_breadcrumb": self.gen_user_breadcrumb(len(text)), "idempotence_token": self.generate_uuid(), "comment_text": text, } if replied_to_comment_id: data["replied_to_comment_id"] = int(replied_to_comment_id) result = self.private_request( f"media/{media_id}/comment/", self.with_action_data(data), ) return extract_comment(result["comment"])
def media_comments(self, media_id: str) -> List[Comment]: """ Get comments on a media Parameters ---------- media_id: str Unique identifier of a Media Returns ------- List[Comment] A list of objects of Comment """ # TODO: to public or private media_id = self.media_id(media_id) max_id = None comments = [] while True: try: result = self.private_request(f"media/{media_id}/comments/", params={"max_id": max_id}) for comment in result["comments"]: comments.append(extract_comment(comment)) if not result["has_more_comments"]: break max_id = result["next_max_id"] except ClientNotFoundError as e: raise MediaNotFound(e, media_id=media_id, **self.last_json) except ClientError as e: if "Media not found" in str(e): raise MediaNotFound(e, media_id=media_id, **self.last_json) raise e return comments
def get_comments(): if result.get("comments"): for comment in result.get("comments"): comments.append(extract_comment(comment))