mirror of
http://gitea.phreedom.club/localhost_frssoft/funkwlmpv
synced 2024-11-25 14:11:26 +00:00
update
This commit is contained in:
parent
f701359f8c
commit
447c7e020d
|
@ -1,17 +1,74 @@
|
||||||
import requests
|
import requests
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
tracks_stor = []
|
tracks_stor = []
|
||||||
with open('instances') as instances:
|
with open('instances') as instances:
|
||||||
instances = instances.read().split('\n')
|
instances = instances.read().strip().split('\n')
|
||||||
|
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog='funkwhale playlist',
|
||||||
|
description='Create playlist from query or just random playlist tracks from funkwhale instances')
|
||||||
|
parser.add_argument('-s', '--search')
|
||||||
|
parser.add_argument('-t', '--tag')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def create_playlist_file(track_list):
|
||||||
|
with open('playlist.m3u8', 'w') as file:
|
||||||
|
file.write('#EXTM3U\n')
|
||||||
|
for i in track_list:
|
||||||
|
file.write('\n' + i)
|
||||||
|
|
||||||
|
|
||||||
|
def filter_tracks(tracks):
|
||||||
|
Path('filter_tags').touch()
|
||||||
|
Path('filter_artists').touch()
|
||||||
|
Path('filter_raw_urls').touch()
|
||||||
|
with open('filter_tags') as tags_file:
|
||||||
|
block_tags = tags_file.read().strip().split('\n')
|
||||||
|
|
||||||
|
with open('filter_artists') as artists_file:
|
||||||
|
block_artists = artists_file.read().strip().split('\n')
|
||||||
|
|
||||||
|
with open('filter_raw_urls') as raw_urls_file:
|
||||||
|
block_raw_urls = raw_urls_file.read().strip().split('\n')
|
||||||
|
|
||||||
|
for i in tracks:
|
||||||
|
if [tag.lower() for tag in i['tags']] in block_tags:
|
||||||
|
continue
|
||||||
|
if i['artist']['name'].lower() in block_artists:
|
||||||
|
continue
|
||||||
|
if i['listen_url'].lower() in block_raw_urls:
|
||||||
|
continue
|
||||||
|
tracks_stor.append(i)
|
||||||
|
|
||||||
|
|
||||||
def search_tracks_on_instance(instance, tag='', query=''):
|
def search_tracks_on_instance(instance, tag='', query=''):
|
||||||
tracks = requests.get(f'https://{instance}/api/v1/tracks', params={'tag': tag, 'q': query}).json()
|
tracks = requests.get(f'https://{instance}/api/v1/tracks', params={'tag': tag, 'q': query,
|
||||||
|
'local': True, 'playable': True,
|
||||||
|
'ordering': 'random'}, timeout=10).json()
|
||||||
|
tracks_replacer = []
|
||||||
|
for track in tracks['results']:
|
||||||
|
track['listen_url'] = f'https://{instance}' + track['listen_url']
|
||||||
|
tracks_replacer.append(track)
|
||||||
|
tracks['results'] = tracks_replacer
|
||||||
return tracks
|
return tracks
|
||||||
#filter_tracks(tracks)
|
|
||||||
|
|
||||||
with concurrent.futures.ThreadPoolExecutor() as executor: # optimally defined number of threads
|
|
||||||
res = [executor.submit(search_tracks_on_instance, instance, '', '') for instance in instances]
|
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor:
|
||||||
|
res = [executor.submit(search_tracks_on_instance, instance, args.tag, args.search) for instance in instances]
|
||||||
concurrent.futures.wait(res)
|
concurrent.futures.wait(res)
|
||||||
|
playlist_files = []
|
||||||
|
for idx, instance in enumerate(instances):
|
||||||
|
try:
|
||||||
|
tracks = res[idx].result()
|
||||||
|
filter_tracks(tracks['results'])
|
||||||
|
except Exception as E:
|
||||||
|
print(E)
|
||||||
|
for track in tracks_stor:
|
||||||
|
artist, album, title, play_url = track['artist']['name'], track['album']['title'], track['title'], track['listen_url']
|
||||||
|
playlist_files.append(f'#EXTINF:-1,{artist} - {album} - {title}\n{play_url}')
|
||||||
|
create_playlist_file(playlist_files)
|
||||||
|
|
Loading…
Reference in a new issue