mirror of
https://github.com/instaloader/instaloader.git
synced 2024-09-11 16:22:24 +02:00
Merge branch 'master' into upcoming/v4.9
This commit is contained in:
commit
d6fd4c560c
11
.github/ISSUE_TEMPLATE/feature_request.md
vendored
11
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -6,13 +6,15 @@ labels: "feature suggestion"
|
|||||||
---
|
---
|
||||||
|
|
||||||
**Provide us a use case of the feature**
|
**Provide us a use case of the feature**
|
||||||
How could the user invoke the new function? Which problem would it solve? If new information is obtained, how would it be further processed?
|
How could the user invoke the new function? Which problem would it solve?
|
||||||
|
If new information is obtained, how would it be further processed?
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
**Describe the solution you'd like**
|
||||||
A clear and concise description of what you want to happen.
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
**Describe alternatives you've considered**
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
How do you achieve the here-described goal without the feature you are requesting?
|
||||||
|
|
||||||
**If the feature request is accepted, would you be willing to submit a pull request?**
|
**If the feature request is accepted, would you be willing to submit a pull request?**
|
||||||
Yes / No
|
Yes / No
|
||||||
@ -21,4 +23,9 @@ Yes / No
|
|||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the feature request here.
|
Add any other context about the feature request here.
|
||||||
|
|
||||||
<!-- please also see https://instaloader.github.io/contributing.html for how to suggest a feature -->
|
<!--
|
||||||
|
Also see https://instaloader.github.io/contributing.html for how to suggest a feature.
|
||||||
|
|
||||||
|
Please understand that a feature suggestion issue that lacks the required information cannot be
|
||||||
|
processed.
|
||||||
|
-->
|
||||||
|
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@ -8,7 +8,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: [3.8, 3.9]
|
python-version: ["3.8", "3.9", "3.10"]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Instaloader Repository
|
- name: Checkout Instaloader Repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
4
.github/workflows/windows_exe.yml
vendored
4
.github/workflows/windows_exe.yml
vendored
@ -10,9 +10,9 @@ jobs:
|
|||||||
- name: Checkout Instaloader repository
|
- name: Checkout Instaloader repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v1
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: "3.9"
|
||||||
architecture: x64
|
architecture: x64
|
||||||
- name: Get the tagged version
|
- name: Get the tagged version
|
||||||
id: get_version
|
id: get_version
|
||||||
|
@ -45,7 +45,7 @@ with open('__main__.py', 'w+') as f:
|
|||||||
|
|
||||||
# install dependencies and invoke PyInstaller
|
# install dependencies and invoke PyInstaller
|
||||||
commands = ["pip install pipenv==2021.5.29",
|
commands = ["pip install pipenv==2021.5.29",
|
||||||
"pipenv sync --dev",
|
f"pipenv --python {sys.version_info.major}.{sys.version_info.minor} sync --dev",
|
||||||
"pipenv run pyinstaller --log-level=DEBUG instaloader.spec"]
|
"pipenv run pyinstaller --log-level=DEBUG instaloader.spec"]
|
||||||
|
|
||||||
for command in commands:
|
for command in commands:
|
||||||
|
@ -377,20 +377,23 @@ class Post:
|
|||||||
def video_url(self) -> Optional[str]:
|
def video_url(self) -> Optional[str]:
|
||||||
"""URL of the video, or None."""
|
"""URL of the video, or None."""
|
||||||
if self.is_video:
|
if self.is_video:
|
||||||
version_urls = [self._field('video_url')]
|
version_urls = []
|
||||||
|
try:
|
||||||
|
version_urls.append(self._field('video_url'))
|
||||||
|
except (InstaloaderException, KeyError, IndexError) as err:
|
||||||
|
self._context.error(f"Warning: Unable to fetch video from graphql of {self}: {err}")
|
||||||
if self._context.iphone_support and self._context.is_logged_in:
|
if self._context.iphone_support and self._context.is_logged_in:
|
||||||
try:
|
try:
|
||||||
version_urls.extend(version['url'] for version in self._iphone_struct['video_versions'])
|
version_urls.extend(version['url'] for version in self._iphone_struct['video_versions'])
|
||||||
except (InstaloaderException, KeyError, IndexError) as err:
|
except (InstaloaderException, KeyError, IndexError) as err:
|
||||||
self._context.error(f"Unable to fetch high-quality video version of {self}: {err}")
|
self._context.error(f"Unable to fetch high-quality video version of {self}: {err}")
|
||||||
return version_urls[0]
|
version_urls = list(dict.fromkeys(version_urls))
|
||||||
else:
|
if len(version_urls) == 0:
|
||||||
|
return None
|
||||||
|
if len(version_urls) == 1:
|
||||||
return version_urls[0]
|
return version_urls[0]
|
||||||
url_candidates: List[Tuple[int, str]] = []
|
url_candidates: List[Tuple[int, str]] = []
|
||||||
for idx, version_url in enumerate(version_urls):
|
for idx, version_url in enumerate(version_urls):
|
||||||
if any(url_candidate[1] == version_url for url_candidate in url_candidates):
|
|
||||||
# Skip duplicates
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
url_candidates.append((
|
url_candidates.append((
|
||||||
int(self._context.head(version_url, allow_redirects=True).headers.get('Content-Length', 0)),
|
int(self._context.head(version_url, allow_redirects=True).headers.get('Content-Length', 0)),
|
||||||
@ -1129,20 +1132,23 @@ class StoryItem:
|
|||||||
def video_url(self) -> Optional[str]:
|
def video_url(self) -> Optional[str]:
|
||||||
"""URL of the video, or None."""
|
"""URL of the video, or None."""
|
||||||
if self.is_video:
|
if self.is_video:
|
||||||
version_urls = [self._node['video_resources'][-1]['src']]
|
version_urls = []
|
||||||
|
try:
|
||||||
|
version_urls.append(self._node['video_resources'][-1]['src'])
|
||||||
|
except (InstaloaderException, KeyError, IndexError) as err:
|
||||||
|
self._context.error(f"Warning: Unable to fetch video from graphql of {self}: {err}")
|
||||||
if self._context.iphone_support and self._context.is_logged_in:
|
if self._context.iphone_support and self._context.is_logged_in:
|
||||||
try:
|
try:
|
||||||
version_urls.extend(version['url'] for version in self._iphone_struct['video_versions'])
|
version_urls.extend(version['url'] for version in self._iphone_struct['video_versions'])
|
||||||
except (InstaloaderException, KeyError, IndexError) as err:
|
except (InstaloaderException, KeyError, IndexError) as err:
|
||||||
self._context.error(f"Unable to fetch high-quality video version of {self}: {err}")
|
self._context.error(f"Unable to fetch high-quality video version of {self}: {err}")
|
||||||
return version_urls[0]
|
version_urls = list(dict.fromkeys(version_urls))
|
||||||
else:
|
if len(version_urls) == 0:
|
||||||
|
return None
|
||||||
|
if len(version_urls) == 1:
|
||||||
return version_urls[0]
|
return version_urls[0]
|
||||||
url_candidates: List[Tuple[int, str]] = []
|
url_candidates: List[Tuple[int, str]] = []
|
||||||
for idx, version_url in enumerate(version_urls):
|
for idx, version_url in enumerate(version_urls):
|
||||||
if any(url_candidate[1] == version_url for url_candidate in url_candidates):
|
|
||||||
# Skip duplicates
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
url_candidates.append((
|
url_candidates.append((
|
||||||
int(self._context.head(version_url, allow_redirects=True).headers.get('Content-Length', 0)),
|
int(self._context.head(version_url, allow_redirects=True).headers.get('Content-Length', 0)),
|
||||||
|
Loading…
Reference in New Issue
Block a user