【发布时间】:2021-01-30 06:56:05
【问题描述】:
我正在开发一个瓶子项目,代码正在从任何网站下载视频。下载过程还可以,但问题是当两个用户使用我的网站和两个不同的视频 url 时,服务器会下载文件,但如果返回快速下载我的意思是哪个视频下载速度快,代码将该视频返回给所有用户。这是一个问题,因为当两个用户使用我的网站下载到不同的视频时,他们必须需要相同的视频,因为他们提供了 url。 所以请帮我把所有用户分开。 所以我需要,对于每个用户,我的服务器将返回他们粘贴 url 的视频。我使用线程服务器粘贴。 请帮我看看我该怎么做。
from bottle import route, run,request,static_file
import os
try:
import youtube_dl
except:
os.system('pip install youtube_dl')
import youtube_dl
x=[]
def cvtmp3(filename):
p=filename.split('.')
print(p)
a=p[0]
audio=a+'.mp3'
os.rename(filename,audio)
print(audio)
def download(url):
global filename
# url=input('type the valid url: ')
ydl_opts = {'format': 'bestaudio/best'}
os.chdir('/storage/emulated/0/')
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
#p=ydl.extract_info('https://www.youtube.com/watch?v=n06H7OcPd-g')
#print(p)
info = ydl.extract_info(url, download=True)
filename = ydl.prepare_filename(info)
#ydl.download(['https://www.youtube.com/watch?v=n06H7OcPd-g'])
@route('/')
def index():
return '''
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
width: 120px;
height: 120px;
text-align:center;
margin-left:auto;
margin-right:auto;
-webkit-animation: spin 2s linear infinite; /* Safari */
animation: spin 2s linear infinite;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body>
<h2>paste any video link to download</h2>
<form action="/submit" method="post">
<textarea name="text"></textarea>
<input type="submit" onclick="show()">
</form>
<div class="loader" style="display:none;"></div>
<script>
function show(){
document.getElementsByTagName("h2")[0].innerText="Please wait :) you will be redirected to download page ";
document.getElementsByTagName("form")[0].style.display="none";
document.getElementsByClassName("loader")[0].style.display="block";}
</script>
'''
@route('/submit',method='POST')
def submit():
#return "<h1>processing url</h1>"
try:
text=request.forms.get('text')
if ',' in text:
urls=text.split(',')
else:urls=text.split('\n')
except:pass
global filename
x=urls
for url in urls:
download(url.strip())
#return "<h1>processing url</h1>"
return '''<h1>processing done !!!</h1><br/><a href="/downloading">download</a> '''
#%(os.getcwd()+'/'+filename)
@route('/downloading')
def downloading():
global urls
#for i in range(len(x)):
#print('hao',i)
#return 'halo'+str(i)
return static_file(filename, root=os.getcwd(), download=True)
run(port=8080)
我在我的手机上托管了这个,所以如果你有两部手机,你可以检查一下。但有时可以更改网址 Link of the website
【问题讨论】:
-
使用发送 url 时,您应该将其保存在具有唯一编号的数据库中 - 并将此唯一编号发送给客户端(作为 cookie 或 HTML 或在 url 中)- 客户端应使用此唯一编号仅访问它的视频。这种方式适用于许多门户网站 - 即 YouTube 或 pastebin.org - 当您在 YT 上发送文件或将文件发送到 pastebin 时,它会为您提供具有唯一编号的 URL 以访问此文件。
-
第一步:摆脱你的全局变量。例如,由于
filename是一个全局变量,所有请求都将共享相同的值。