Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ef7dda14a | ||
|
|
ee31cedae0 | ||
|
d3b0cb5e13
|
|||
|
0a79974d11
|
|||
|
4e327944a0
|
|||
|
09a437f7fb
|
|||
|
3cbe18aac0
|
|||
|
|
62418f8e95 | ||
|
bfd3760969
|
|||
|
efd89b2e64
|
|||
|
0dc1747178
|
|||
|
8577164785
|
|||
|
8af98968dd
|
|||
|
8f00cbcdd6
|
|||
|
af75551bc2
|
23
.gitea/workflows/ci.yaml
Normal file
23
.gitea/workflows/ci.yaml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.11
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
pip install --upgrade pip
|
||||||
|
pip install -r requirements-dev.txt
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: pytest
|
||||||
40
.gitea/workflows/git-sync.yaml
Normal file
40
.gitea/workflows/git-sync.yaml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: git-sync-with-mirror
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
git-sync:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: git-sync
|
||||||
|
env:
|
||||||
|
git_sync_source_repo: git@git.fridu.us:heckyel/yt-local.git
|
||||||
|
git_sync_destination_repo: ssh://git@c.fridu.us/software/yt-local.git
|
||||||
|
if: env.git_sync_source_repo && env.git_sync_destination_repo
|
||||||
|
uses: astounds/git-sync@v1
|
||||||
|
with:
|
||||||
|
source_repo: git@git.fridu.us:heckyel/yt-local.git
|
||||||
|
source_branch: "master"
|
||||||
|
destination_repo: ssh://git@c.fridu.us/software/yt-local.git
|
||||||
|
destination_branch: "master"
|
||||||
|
source_ssh_private_key: ${{ secrets.GIT_SYNC_SOURCE_SSH_PRIVATE_KEY }}
|
||||||
|
destination_ssh_private_key: ${{ secrets.GIT_SYNC_DESTINATION_SSH_PRIVATE_KEY }}
|
||||||
|
|
||||||
|
- name: git-sync-sourcehut
|
||||||
|
env:
|
||||||
|
git_sync_source_repo: git@git.fridu.us:heckyel/yt-local.git
|
||||||
|
git_sync_destination_repo: git@git.sr.ht:~heckyel/yt-local
|
||||||
|
if: env.git_sync_source_repo && env.git_sync_destination_repo
|
||||||
|
uses: astounds/git-sync@v1
|
||||||
|
with:
|
||||||
|
source_repo: git@git.fridu.us:heckyel/yt-local.git
|
||||||
|
source_branch: "master"
|
||||||
|
destination_repo: git@git.sr.ht:~heckyel/yt-local
|
||||||
|
destination_branch: "master"
|
||||||
|
source_ssh_private_key: ${{ secrets.GIT_SYNC_SOURCE_SSH_PRIVATE_KEY }}
|
||||||
|
destination_ssh_private_key: ${{ secrets.GIT_SYNC_DESTINATION_SSH_PRIVATE_KEY }}
|
||||||
|
continue-on-error: true
|
||||||
@@ -8,14 +8,14 @@ gevent==24.2.1
|
|||||||
greenlet==3.0.3
|
greenlet==3.0.3
|
||||||
iniconfig==2.0.0
|
iniconfig==2.0.0
|
||||||
itsdangerous==2.1.2
|
itsdangerous==2.1.2
|
||||||
Jinja2==3.1.3
|
Jinja2==3.1.4
|
||||||
MarkupSafe==2.1.5
|
MarkupSafe==2.1.5
|
||||||
packaging==24.0
|
packaging==24.0
|
||||||
pluggy==1.4.0
|
pluggy==1.4.0
|
||||||
PySocks==1.7.1
|
PySocks==1.7.1
|
||||||
pytest==8.1.1
|
pytest==8.1.1
|
||||||
stem==1.8.2
|
stem==1.8.2
|
||||||
urllib3==2.2.1
|
urllib3==2.2.2
|
||||||
Werkzeug==3.0.1
|
Werkzeug==3.0.3
|
||||||
zope.event==5.0
|
zope.event==5.0
|
||||||
zope.interface==6.2
|
zope.interface==6.2
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ Flask==3.0.2
|
|||||||
gevent==24.2.1
|
gevent==24.2.1
|
||||||
greenlet==3.0.3
|
greenlet==3.0.3
|
||||||
itsdangerous==2.1.2
|
itsdangerous==2.1.2
|
||||||
Jinja2==3.1.3
|
Jinja2==3.1.4
|
||||||
MarkupSafe==2.1.5
|
MarkupSafe==2.1.5
|
||||||
PySocks==1.7.1
|
PySocks==1.7.1
|
||||||
stem==1.8.2
|
stem==1.8.2
|
||||||
urllib3==2.2.1
|
urllib3==2.2.2
|
||||||
Werkzeug==3.0.1
|
Werkzeug==3.0.3
|
||||||
zope.event==5.0
|
zope.event==5.0
|
||||||
zope.interface==6.2
|
zope.interface==6.2
|
||||||
|
|||||||
@@ -667,25 +667,16 @@ def to_valid_filename(name):
|
|||||||
|
|
||||||
# https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/extractor/youtube.py#L72
|
# https://github.com/yt-dlp/yt-dlp/blob/master/yt_dlp/extractor/youtube.py#L72
|
||||||
INNERTUBE_CLIENTS = {
|
INNERTUBE_CLIENTS = {
|
||||||
'android_music': {
|
'web_creator': {
|
||||||
'INNERTUBE_API_KEY': 'AIzaSyAOghZGza2MQSZkY_zfZ370N-PUdXEo8AI',
|
'INNERTUBE_API_KEY': 'AIzaSyBUPetSUmoZL-OhlxA7wSac5XinrygCqMo',
|
||||||
'INNERTUBE_CONTEXT': {
|
'INNERTUBE_CONTEXT': {
|
||||||
'client': {
|
'client': {
|
||||||
'hl': 'en',
|
'clientName': 'WEB_CREATOR',
|
||||||
'gl': 'US',
|
'clientVersion': '1.20240723.03.00',
|
||||||
'clientName': 'ANDROID_MUSIC',
|
},
|
||||||
'clientVersion': '6.44.54',
|
|
||||||
'osName': 'Android',
|
|
||||||
'osVersion': '14',
|
|
||||||
'androidSdkVersion': 34,
|
|
||||||
'platform': 'MOBILE',
|
|
||||||
'userAgent': 'com.google.android.apps.youtube.music/6.44.54 (Linux; U; Android 14; US) gzip'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 21,
|
'INNERTUBE_CONTEXT_CLIENT_NAME': 62,
|
||||||
'REQUIRE_JS_PLAYER': False
|
|
||||||
},
|
},
|
||||||
|
|
||||||
'android': {
|
'android': {
|
||||||
'INNERTUBE_API_KEY': 'AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w',
|
'INNERTUBE_API_KEY': 'AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w',
|
||||||
'INNERTUBE_CONTEXT': {
|
'INNERTUBE_CONTEXT': {
|
||||||
@@ -693,12 +684,12 @@ INNERTUBE_CLIENTS = {
|
|||||||
'hl': 'en',
|
'hl': 'en',
|
||||||
'gl': 'US',
|
'gl': 'US',
|
||||||
'clientName': 'ANDROID',
|
'clientName': 'ANDROID',
|
||||||
'clientVersion': '19.12.36',
|
'clientVersion': '19.15.35',
|
||||||
'osName': 'Android',
|
'osName': 'Android',
|
||||||
'osVersion': '14',
|
'osVersion': '14',
|
||||||
'androidSdkVersion': 34,
|
'androidSdkVersion': 34,
|
||||||
'platform': 'MOBILE',
|
'platform': 'MOBILE',
|
||||||
'userAgent': 'com.google.android.youtube/19.13.36 (Linux; U; Android 14; en_US; Google Pixel 6 Pro) gzip'
|
'userAgent': 'com.google.android.youtube/19.15.35 (Linux; U; Android 14; en_US; Google Pixel 6 Pro) gzip'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 3,
|
'INNERTUBE_CONTEXT_CLIENT_NAME': 3,
|
||||||
@@ -712,9 +703,12 @@ INNERTUBE_CLIENTS = {
|
|||||||
'hl': 'en',
|
'hl': 'en',
|
||||||
'gl': 'US',
|
'gl': 'US',
|
||||||
'clientName': 'IOS',
|
'clientName': 'IOS',
|
||||||
'clientVersion': '19.12.3',
|
'clientVersion': '19.29.1',
|
||||||
'deviceModel': 'iPhone14,3',
|
'deviceMake': 'Apple',
|
||||||
'userAgent': 'com.google.ios.youtube/19.12.3 (iPhone14,3; U; CPU iOS 15_6 like Mac OS X)'
|
'deviceModel': 'iPhone16,2',
|
||||||
|
'userAgent': 'com.google.ios.youtube/19.29.1 (iPhone16,2; U; CPU iOS 17_5_1 like Mac OS X;)',
|
||||||
|
'osName': 'iPhone',
|
||||||
|
'osVersion': '17.5.1.21F90',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 5,
|
'INNERTUBE_CONTEXT_CLIENT_NAME': 5,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__version__ = '0.2.15'
|
__version__ = '0.2.19'
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ def _add_to_error(info, key, additional_message):
|
|||||||
def fetch_player_response(client, video_id):
|
def fetch_player_response(client, video_id):
|
||||||
return util.call_youtube_api(client, 'player', {
|
return util.call_youtube_api(client, 'player', {
|
||||||
'videoId': video_id,
|
'videoId': video_id,
|
||||||
'params': 'CgIIAQ==',
|
'params': 'CgIIAdgDAQ==',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -372,7 +372,7 @@ def extract_info(video_id, use_invidious, playlist_id=None, index=None):
|
|||||||
tasks = (
|
tasks = (
|
||||||
# Get video metadata from here
|
# Get video metadata from here
|
||||||
gevent.spawn(fetch_watch_page_info, video_id, playlist_id, index),
|
gevent.spawn(fetch_watch_page_info, video_id, playlist_id, index),
|
||||||
gevent.spawn(fetch_player_response, 'android', video_id)
|
gevent.spawn(fetch_player_response, 'ios', video_id)
|
||||||
)
|
)
|
||||||
gevent.joinall(tasks)
|
gevent.joinall(tasks)
|
||||||
util.check_gevent_exceptions(*tasks)
|
util.check_gevent_exceptions(*tasks)
|
||||||
|
|||||||
Reference in New Issue
Block a user