mirror of
https://github.com/instaloader/instaloader.git
synced 2026-11-01 13:05:29 -08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
754c3845d7 | ||
|
|
e3b8c38f8c |
@@ -1,7 +1,7 @@
|
|||||||
"""Download pictures (or videos) along with their captions and other metadata from Instagram."""
|
"""Download pictures (or videos) along with their captions and other metadata from Instagram."""
|
||||||
|
|
||||||
|
|
||||||
__version__ = '4.12.1'
|
__version__ = '4.12.2'
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from datetime import datetime, timedelta
|
|||||||
from lzma import LZMAError
|
from lzma import LZMAError
|
||||||
from typing import Any, Callable, Dict, Iterable, Iterator, NamedTuple, Optional, Tuple, TypeVar
|
from typing import Any, Callable, Dict, Iterable, Iterator, NamedTuple, Optional, Tuple, TypeVar
|
||||||
|
|
||||||
from .exceptions import AbortDownloadException, InvalidArgumentException, QueryReturnedBadRequestException
|
from .exceptions import AbortDownloadException, InvalidArgumentException
|
||||||
from .instaloadercontext import InstaloaderContext
|
from .instaloadercontext import InstaloaderContext
|
||||||
|
|
||||||
class FrozenNodeIterator(NamedTuple):
|
class FrozenNodeIterator(NamedTuple):
|
||||||
@@ -66,7 +66,7 @@ class NodeIterator(Iterator[T]):
|
|||||||
See also :func:`resumable_iteration` for a high-level context manager that handles a resumable iteration.
|
See also :func:`resumable_iteration` for a high-level context manager that handles a resumable iteration.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_graphql_page_length = 50
|
_graphql_page_length = 12
|
||||||
_shelf_life = timedelta(days=29)
|
_shelf_life = timedelta(days=29)
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
@@ -98,23 +98,13 @@ class NodeIterator(Iterator[T]):
|
|||||||
pagination_variables: Dict[str, Any] = {'first': NodeIterator._graphql_page_length}
|
pagination_variables: Dict[str, Any] = {'first': NodeIterator._graphql_page_length}
|
||||||
if after is not None:
|
if after is not None:
|
||||||
pagination_variables['after'] = after
|
pagination_variables['after'] = after
|
||||||
try:
|
data = self._edge_extractor(
|
||||||
data = self._edge_extractor(
|
self._context.graphql_query(
|
||||||
self._context.graphql_query(
|
self._query_hash, {**self._query_variables, **pagination_variables}, self._query_referer
|
||||||
self._query_hash, {**self._query_variables, **pagination_variables}, self._query_referer
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
self._best_before = datetime.now() + NodeIterator._shelf_life
|
)
|
||||||
return data
|
self._best_before = datetime.now() + NodeIterator._shelf_life
|
||||||
except QueryReturnedBadRequestException:
|
return data
|
||||||
new_page_length = int(NodeIterator._graphql_page_length / 2)
|
|
||||||
if new_page_length >= 12:
|
|
||||||
NodeIterator._graphql_page_length = new_page_length
|
|
||||||
self._context.error("HTTP Error 400 (Bad Request) on GraphQL Query. Retrying with shorter page length.",
|
|
||||||
repeat_at_end=False)
|
|
||||||
return self._query(after)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|||||||
Reference in New Issue
Block a user