Update code
This commit is contained in:
parent
929f8effda
commit
bbb397b1d2
5 changed files with 117 additions and 9 deletions
|
|
@ -3,8 +3,6 @@ A way to watch YouTube on your Wii with WiiMC.
|
||||||
|
|
||||||
The code is extremely simple. All it does is:
|
The code is extremely simple. All it does is:
|
||||||
|
|
||||||
1. Use Inviduous API to search for videos, or browse trending or popular videos (probably tech-related because that's what Inviduous tends to grab).
|
1. For YouTube, uses Inviduous API to search for videos, or browse trending or popular videos (probably tech-related because that's what Inviduous tends to grab). Or uses the Vimeo or Dailymotion API.
|
||||||
2. Returns a playlist file in WiiMC format.
|
2. Returns a playlist file in WiiMC format.
|
||||||
3. Uses the pytube Python module to determine the exact URL of the video file, and proxies that to the Wii.
|
3. Uses yt-dlp to download video file, and proxies that to the Wii.
|
||||||
|
|
||||||
It's very simple, and I haven't seen any stuttering of the video or anything like that.
|
|
||||||
|
|
@ -1,19 +1,32 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from sys import stdout
|
|
||||||
from cgi import FieldStorage
|
from cgi import FieldStorage
|
||||||
from pytube import YouTube
|
from pytube import YouTube
|
||||||
|
from sys import stdout
|
||||||
|
import io
|
||||||
import requests
|
import requests
|
||||||
import json
|
import subprocess
|
||||||
|
|
||||||
form = FieldStorage()
|
form = FieldStorage()
|
||||||
|
|
||||||
url = YouTube("https://www.youtube.com/watch?v=" + form["q"].value).streams.get_lowest_resolution().url
|
video_url = "https://youtube.com/watch?v=" + form["q"].value
|
||||||
|
|
||||||
|
try:
|
||||||
|
if form["site"].value == "vimeo":
|
||||||
|
video_url = "https://vimeo.com/" + form["q"].value
|
||||||
|
elif form["site"].value == "dailymotion":
|
||||||
|
video_url = "https://dailymotion.com/video/" + form["q"].value
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
stdout.buffer.write(b"Content-Type:application/octet-stream\n\n")
|
stdout.buffer.write(b"Content-Type:application/octet-stream\n\n")
|
||||||
stdout.flush()
|
stdout.flush()
|
||||||
|
|
||||||
r = requests.get(url, stream=True)
|
if "youtube" in video_url or "vimeo" in video_url:
|
||||||
|
proc = subprocess.Popen(["yt-dlp", "-f", "[width<=640]", video_url, "-o", "-"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
for chunk in r.iter_content(chunk_size=2048):
|
elif "dailymotion" in video_url:
|
||||||
|
proc = subprocess.Popen(["yt-dlp", "-f", "[tbr<=850]", video_url, "-o", "-"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
|
for chunk in iter(proc.stdout):
|
||||||
stdout.flush()
|
stdout.flush()
|
||||||
stdout.buffer.write(chunk)
|
stdout.buffer.write(chunk)
|
||||||
|
|
|
||||||
49
video/wii/index_old.cgi
Normal file
49
video/wii/index_old.cgi
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
from cgi import FieldStorage
|
||||||
|
from pytube import YouTube
|
||||||
|
from sys import stdout
|
||||||
|
import io
|
||||||
|
import requests
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
form = FieldStorage()
|
||||||
|
|
||||||
|
video_url = "https://youtube.com/watch?v=" + form["q"].value
|
||||||
|
|
||||||
|
try:
|
||||||
|
if form["site"].value == "vimeo":
|
||||||
|
video_url = "https://vimeo.com/" + form["q"].value
|
||||||
|
elif form["site"].value == "dailymotion":
|
||||||
|
video_url = "https://dailymotion.com/video/" + form["q"].value
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
stdout.buffer.write(b"Content-Type:application/octet-stream\n\n")
|
||||||
|
stdout.flush()
|
||||||
|
|
||||||
|
if "youtube" in video_url:
|
||||||
|
url = YouTube("https://www.youtube.com/watch?v=" + form["q"].value).streams.get_lowest_resolution().url
|
||||||
|
|
||||||
|
r = requests.get(url, stream=True)
|
||||||
|
|
||||||
|
for chunk in r.iter_content(chunk_size=2048):
|
||||||
|
stdout.flush()
|
||||||
|
stdout.buffer.write(chunk)
|
||||||
|
|
||||||
|
else:
|
||||||
|
if "vimeo" in video_url:
|
||||||
|
protocol = "https"
|
||||||
|
|
||||||
|
elif "dailymotion" in video_url:
|
||||||
|
protocol = "http"
|
||||||
|
|
||||||
|
proc = subprocess.Popen(["yt-dlp", "-f", "[width<=640]", "-f", "[protocol=" + protocol + "]", video_url, "-o", "-"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
|
||||||
|
"""for line in io.TextIOWrapper(proc.stderr, encoding="utf-8"):
|
||||||
|
if "Invoking downloader" in line:
|
||||||
|
url = line.replace("[debug] Invoking downloader on ", "")[1:-2]
|
||||||
|
break"""
|
||||||
|
|
||||||
|
for chunk in iter(proc.stdout):
|
||||||
|
stdout.flush()
|
||||||
|
stdout.buffer.write(chunk)
|
||||||
22
wiimc/dailymotion/index.cgi
Normal file
22
wiimc/dailymotion/index.cgi
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
from cgi import FieldStorage
|
||||||
|
import dailymotion
|
||||||
|
|
||||||
|
form = FieldStorage()
|
||||||
|
|
||||||
|
d = dailymotion.Dailymotion()
|
||||||
|
|
||||||
|
api = d.get('/videos', params={"search": form["q"].value, "limit": 50})["list"]
|
||||||
|
|
||||||
|
print("Content-Type: text/plain;charset=UTF-8;\n");
|
||||||
|
|
||||||
|
print("[Playlist]")
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
|
||||||
|
for entry in api:
|
||||||
|
print("File" + str(i) + "=" + "http://riitube.rc24.xyz/video/wii/?q=" + entry["id"] + "&site=dailymotion".replace("https://dailymotion.com/", ""))
|
||||||
|
print("Title" + str(i) + "=" + entry["title"])
|
||||||
|
print("Length" + str(i) + "=" + str(0))
|
||||||
|
|
||||||
|
i += 1
|
||||||
26
wiimc/vimeo/index.cgi
Normal file
26
wiimc/vimeo/index.cgi
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
from cgi import FieldStorage
|
||||||
|
import vimeo
|
||||||
|
|
||||||
|
v = vimeo.VimeoClient(
|
||||||
|
token="redacted",
|
||||||
|
key="redacted",
|
||||||
|
secret="redacted"
|
||||||
|
)
|
||||||
|
|
||||||
|
form = FieldStorage()
|
||||||
|
|
||||||
|
api = v.get('/videos', params={"query": form["q"].value, "per_page": 50}).json()["data"]
|
||||||
|
|
||||||
|
print("Content-Type: text/plain;charset=UTF-8;\n");
|
||||||
|
|
||||||
|
print("[Playlist]")
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
|
||||||
|
for entry in api:
|
||||||
|
print("File" + str(i) + "=" + "http://riitube.rc24.xyz/video/wii/?q=" + entry["link"].replace("https://vimeo.com/", "") + "&site=vimeo")
|
||||||
|
print("Title" + str(i) + "=" + entry["name"])
|
||||||
|
print("Length" + str(i) + "=" + str(entry["duration"]))
|
||||||
|
|
||||||
|
i += 1
|
||||||
Loading…
Add table
Add a link
Reference in a new issue