diff --git a/instaloader/instaloader.py b/instaloader/instaloader.py index adfb156..c425093 100644 --- a/instaloader/instaloader.py +++ b/instaloader/instaloader.py @@ -811,7 +811,7 @@ class Instaloader: last_scraped = latest_stamps.get_last_story_timestamp(name) scraped_timestamp = datetime.now().astimezone() for item in user_story.get_items(): - if latest_stamps is not None and item.date_local <= last_scraped: + if latest_stamps is not None and item.date_utc.replace(tzinfo=timezone.utc) <= last_scraped: break if storyitem_filter is not None and not storyitem_filter(item): self.context.log("<{} skipped>".format(item), flush=True) @@ -1206,7 +1206,7 @@ class Instaloader: posts_takewhile: Optional[Callable[[Post], bool]] = None if latest_stamps is not None: last_scraped = latest_stamps.get_last_tagged_timestamp(profile.username) - posts_takewhile = lambda p: p.date_local > last_scraped + posts_takewhile = lambda p: p.date_utc.replace(tzinfo=timezone.utc) > last_scraped tagged_posts = profile.get_tagged_posts() self.posts_download_loop(tagged_posts, target if target @@ -1214,7 +1214,7 @@ class Instaloader: _PostPathFormatter.sanitize_path(':tagged')), fast_update, post_filter, takewhile=posts_takewhile) if latest_stamps is not None and tagged_posts.first_item is not None: - latest_stamps.set_last_tagged_timestamp(profile.username, tagged_posts.first_item.date_local) + latest_stamps.set_last_tagged_timestamp(profile.username, tagged_posts.first_item.date_local.astimezone()) def download_igtv(self, profile: Profile, fast_update: bool = False, post_filter: Optional[Callable[[Post], bool]] = None, @@ -1229,12 +1229,12 @@ class Instaloader: posts_takewhile: Optional[Callable[[Post], bool]] = None if latest_stamps is not None: last_scraped = latest_stamps.get_last_igtv_timestamp(profile.username) - posts_takewhile = lambda p: p.date_local > last_scraped + posts_takewhile = lambda p: p.date_utc.replace(tzinfo=timezone.utc) > last_scraped igtv_posts = profile.get_igtv_posts() self.posts_download_loop(igtv_posts, profile.username, fast_update, post_filter, total_count=profile.igtvcount, owner_profile=profile, takewhile=posts_takewhile) if latest_stamps is not None and igtv_posts.first_item is not None: - latest_stamps.set_last_igtv_timestamp(profile.username, igtv_posts.first_item.date_local) + latest_stamps.set_last_igtv_timestamp(profile.username, igtv_posts.first_item.date_local.astimezone()) def _get_id_filename(self, profile_name: str) -> str: if ((format_string_contains_key(self.dirname_pattern, 'profile') or @@ -1427,14 +1427,14 @@ class Instaloader: if latest_stamps is not None: # pylint:disable=cell-var-from-loop last_scraped = latest_stamps.get_last_post_timestamp(profile_name) - posts_takewhile = lambda p: p.date_local > last_scraped + posts_takewhile = lambda p: p.date_utc.replace(tzinfo=timezone.utc) > last_scraped posts_to_download = profile.get_posts() self.posts_download_loop(posts_to_download, profile_name, fast_update, post_filter, total_count=profile.mediacount, owner_profile=profile, takewhile=posts_takewhile) if latest_stamps is not None and posts_to_download.first_item is not None: latest_stamps.set_last_post_timestamp(profile_name, - posts_to_download.first_item.date_local) + posts_to_download.first_item.date_local.astimezone()) if stories and profiles: with self.context.error_catcher("Download stories"): diff --git a/instaloader/structures.py b/instaloader/structures.py index d749370..59f0b31 100644 --- a/instaloader/structures.py +++ b/instaloader/structures.py @@ -3,7 +3,7 @@ import lzma import re from base64 import b64decode, b64encode from collections import namedtuple -from datetime import datetime, timezone +from datetime import datetime from pathlib import Path from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple, Union @@ -225,12 +225,16 @@ class Post: @property def date_local(self) -> datetime: """Timestamp when the post was created (local time zone).""" - return datetime.fromtimestamp(self.get_timestamp_date_created()).astimezone() + return datetime.fromtimestamp(self._node["date"] + if "date" in self._node + else self._node["taken_at_timestamp"]) @property def date_utc(self) -> datetime: """Timestamp when the post was created (UTC).""" - return datetime.utcfromtimestamp(self.get_timestamp_date_created()).replace(tzinfo=timezone.utc) + return datetime.utcfromtimestamp(self._node["date"] + if "date" in self._node + else self._node["taken_at_timestamp"]) @property def date(self) -> datetime: @@ -271,12 +275,6 @@ class Post: return len(edges) return 1 - def get_timestamp_date_created(self) -> float: - """Timestamp when the post was created""" - return (self._node["date"] - if "date" in self._node - else self._node["taken_at_timestamp"]) - def get_is_videos(self) -> List[bool]: """ Return a list containing the ``is_video`` property for each media in the post. @@ -1081,12 +1079,12 @@ class StoryItem: @property def date_local(self) -> datetime: """Timestamp when the StoryItem was created (local time zone).""" - return datetime.fromtimestamp(self._node['taken_at_timestamp']).astimezone() + return datetime.fromtimestamp(self._node['taken_at_timestamp']) @property def date_utc(self) -> datetime: """Timestamp when the StoryItem was created (UTC).""" - return datetime.utcfromtimestamp(self._node['taken_at_timestamp']).replace(tzinfo=timezone.utc) + return datetime.utcfromtimestamp(self._node['taken_at_timestamp']) @property def date(self) -> datetime: