49 lines
1.7 KiB
Python
Executable file
49 lines
1.7 KiB
Python
Executable file
#!/usr/bin/python
|
|
|
|
import gzip
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
import urllib.request
|
|
# NO EXTERNAL DEPENDENCIES YAY
|
|
# Wait does mpv count???
|
|
|
|
# I hate this website
|
|
url = 'https://www.bilibili.com/video/'
|
|
|
|
# Gimme a video ID
|
|
cur = sys.argv[1]
|
|
while True:
|
|
# First start mpv in the background
|
|
# Also enable subtitles because why not
|
|
proc = subprocess.Popen(['mpv', '--no-video', '--slang=zh-CN', url + cur])
|
|
# I could use the Python requests library...
|
|
# Nope, external dependencies suck, so enjoy this abomination
|
|
body = gzip.decompress(urllib.request.urlopen(url + cur).read()).decode('utf-8')
|
|
# Sometimes I forget what I'm even listening to
|
|
# I WILL parse HTML with regex, you can't stop me
|
|
print('NOW PLAYING', url + cur, re.search('"true">(.*?)<', body).group(1))
|
|
# Get recommended stuff
|
|
# I figured out the regexes by playing around with curl --compressed and then grepping
|
|
lines = body.split('\n')
|
|
rec = [
|
|
(
|
|
re.search('/video/(.*?)/', line).group(1), # ID
|
|
re.search('title="(.*?)"', line).group(1), # Video name
|
|
re.search('"name">(.*?)<', line).group(1), # up主 name
|
|
lines[i + 1].strip() # View count
|
|
)
|
|
for i, line in enumerate(lines) if 'recommend_more' in line
|
|
]
|
|
# Print it out the smart way!
|
|
# Who needs loops smh
|
|
print(*enumerate(rec), sep='\n')
|
|
proc.wait()
|
|
# Choose a recommended video
|
|
# If you don't like any, just stop the app, burn your computer, and try again
|
|
cur = rec[int(input("Choose next: "))][0]
|
|
# Give instant feedback so it doesn't look like the app is hanging
|
|
print(cur)
|
|
# I have more comments than code so I must be doing something right right?
|
|
# Right???
|