#!/usr/bin/python3
# -*- coding: UTF-8 -*-
#author:Wos
#youtube music player,support search
import readline
import requests
import os
import sys
import pyperclip
tag = [251,140]
tlink = [] #links
tlist = [] #titles
pn = 1 #page number
lk = "" #search link
premain = "https://invidious.io.lol" #invidious instance
proxies = {}
pxy = ""
def flushscreen():
os.system('echo stty')
os.system('clear')
def show():
global pn
flushscreen()
j = 1
if len(tlist) == 0:
return search()
print("\t\t[youtube music player]")
print("current instance:\033[92m"+premain+"\033[0m")
for i in tlist:
print(str(j)+"):\033[96;40m"+str(i)+"\033[0m")
j += 1
sid = input("\n(\033[36;40m0:Search,Return:Next Page,-1:Pre Page\033[0m)Choose:")
if sid == "0":
return search()
elif str(sid).strip() == "-1":
if pn > 1:
pn -= 1
url = lk+str(pn)
get_link(url)
return show()
else:
pn = 1
url = lk+str(pn)
get_link(url)
elif str(sid).strip() == "":
pn += 1
url = lk+str(pn)
get_link(url)
return show()
elif sid.isdigit() and int(sid) > 0 and int(sid) < len(tlist)+1:
play(tlink[int(sid)-1])
return show()
else:
return show()
def get_link(url):
global tlink,tlist
tlink,tlist = [],[]
hdr = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Goanna/5.2 Firefox/102.0 PaleMoon/31.3.0.1",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language":"zh-CN,en-US;q=0.7,en;q=0.3"
}
res = requests.get(url,proxies=proxies,headers=hdr)
res.encoding = 'utf-8'
temp = res.text.split("class=\"pure-u-1 pure-u-md-1-4\">")
i = 1
while i < len(temp):
l = temp[i].split("href=\"")[1].split("\"")[0]
t = temp[i].split("dir=\"auto\">")[1].split("<")[0]
tlink.append(l)
tlist.append(t)
i += 1
def search():
global premain,lk,pn
flushscreen()
lk = ""
pg = 1
print("\t\t[youtube music player]")
print("current instance:\033[92m"+premain+"\033[0m")
keyword = input("Singer Search:")
if str(keyword).strip() == "exit()":
sys.exit()
elif str(keyword).strip() == "":
url = premain+"/search?q=music&page=1&date=none&type=video&duration=long&sort=relevance"
lk = premain+"/search?q=music&date=none&type=video&duration=long&sort=relevance&page="
else:
url = premain+"/search?q="+str(keyword)+"+ music&page=1&date=none&type=video&duration=long&sort=relevance"
lk = premain+"/search?q="+str(keyword)+"+ music&date=none&type=video&duration=long&sort=relevance&page="
get_link(url)
show()
def play(url):
try:
vid = str(url).split("watch?v=")[1].split("&")[0]
except:
vid = str(url).split("embed/")[1].split("?")[0]
pass
i = 0
temp = ""
while i < len(tag):
try:
url2 = premain+"/latest_version?id="+vid+"&itag="+str(tag[i])
hdr = {
'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Goanna/4.8 Firefox/68.0 PaleMoon/29.4.4'
}
res = requests.get(url2,headers=hdr,proxies=proxies,allow_redirects=False)
temp = res.headers['location']
break
except:
i += 1
continue
if temp:
#instance proxy
#link = premain+"/videoplayback?"+temp.split("videoplayback?")[1]+"&title="+str(vid)
#google direct link
link = temp+"&title="+str(vid)
pyperclip.copy(link)
cmdline = ("mpv --really-quiet %s \"%s\""%(pxy,link))
print("\n(\033[93;40mm:mute,9:-vol,0:+vol,q:exit,space:pause,up:forward 1 miniute\033[0m)")
status = os.system(cmdline)
if str(status) == "0":
return
else:
return play(url)
if __name__ == '__main__':
sid = input("Enable Proxy ?(Y/N)")
if sid == "Y" or sid == "y":
proxies = {'http':'socks5://127.0.0.1:7891','https':'socks5://127.0.0.1:7891'}
pxy = ' --http-proxy=http://127.0.0.1:7890'
search()