Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask在PyTube Youtube下载应用程序中抛出JSON序列化错误_Python_Json_Flask_Youtube_Pytube - Fatal编程技术网

Python Flask在PyTube Youtube下载应用程序中抛出JSON序列化错误

Python Flask在PyTube Youtube下载应用程序中抛出JSON序列化错误,python,json,flask,youtube,pytube,Python,Json,Flask,Youtube,Pytube,信息: 我正在使用模块PyTube(3)构建一个Youtube下载Web应用程序。 它是以烧瓶为基础的 额外文件的工作: 使用YouTubeDownload.py文件,因此在app.py文件中,所有内容都是干净的。 用于清理不需要的数据 工作原理: 首先在索引中呈现一个HTML页面,该页面包含一个带有URL输入表单的表单,该表单将其提交给“/details”。 onsubmit函数运行以显示正在加载的gif 然后,url被传递到yt对象,该对象由YouTubeDownload.py中的You

信息:

我正在使用模块PyTube(3)构建一个Youtube下载Web应用程序。 它是以烧瓶为基础的

额外文件的工作:

使用
YouTubeDownload.py
文件,因此在
app.py
文件中,所有内容都是干净的。 用于清理不需要的数据

工作原理:

首先在索引中呈现一个HTML页面,该页面包含一个带有URL输入表单的表单,该表单将其提交给“/details”。 onsubmit函数运行以显示正在加载的gif


然后,url被传递到yt对象,该对象由YouTubeDownload.py中的YoutubeVideo初始化

然后使用try,除了不同的异常之外,它使用带有流id的JINJA将可供下载的流列表传递到HTML页面

然后将流id设置为“下载/-流的id”。e、 g.“下载/5” 因此,调用“/download/”,它从url获取流id,然后根据id下载流,并在下载完成时运行称为redirectUser的函数

redirect user函数将bool作为str和下载的视频/音频文件名传递到HTML页面(脚本标记内),然后将用户重定向到“/download/f/-The-file-name-from js”

然后,donwload/f/filename使用flask的render_from_目录从dir返回文件

注意:我已经使许多变量成为全局变量,因此我可以从不同的函数访问它们

错误:

我得到了完全脱离上下文的JSON类型错误,因为我没有使用它,似乎在任何模块中都存在一些问题

我还提到了下面的错误

app.py

从flask导入flask、请求、呈现\u模板、从\u目录发送\u、响应、重定向、闪存
从YoutubeDownload导入YoutubeVideo
从线程导入计时器
从日期时间导入日期时间
导入操作系统
导入系统
#烧瓶应用程序初始化
app=烧瓶(“名称”)
#应用程序配置
app.secret_key='-secret key-'
#全局变量
yt=“”
url=“”
streams=“”
下载_文件_name=“”
#请求变量
isAudio=假
延迟(单位:秒)=5
downloadStatus=False
YOUTUBE\u FILES=“YOUTUBE\u FILES”
#从目录中删除下载的文件
def removeFile(文件名):
删除(os.path.join(YOUTUBE_文件,文件名))
#将重定向状态下载为True并运行删除文件功能
def重定向用户(流、文件路径):
全局下载状态,下载文件名,isAudio
downloadStatus=True
下载\u file\u name=os.path.basename(文件路径)
如果是音频:
下载文件名=os.path.splitext(下载文件名)[0]+“.mp3”
音频文件路径=os.path.join(YOUTUBE文件,下载文件名)
重命名(文件路径、音频文件路径)
线程=计时器(延迟秒,删除文件,[下载文件名])
thread.start()
#从文件名获取文件扩展名
def get_文件扩展名(文件名):
如果文件名中没有“.”:
返回错误
返回文件名.rsplit(“.”,1)[1].upper()
#检查请求是音频还是视频
def checkFileRequest(流,流id):
对于范围内的i(len(streams)):
如果str(streams[i][0])==str(stream\u id):
如果str(流[i][3])中的“音频”:
返回真值
其他:
返回错误
#网站的索引url
@app.route(“/”,methods=[“GET”])
@应用程序路径(“/索引”)
def index():
返回渲染模板(“index.html”)
#有关表单POST请求和显示流的详细信息
@app.route(“/details”,methods=[“POST”])
def details():
如果request.method==“POST”:
尝试:
yturl=request.form.get(“url”)
除AttributeError外,其他属性为:
返回重定向(“/”,404)
全球yt,溪流
尝试:
yt=YoutubeVideo(yturl)
除:
错误=sys.exc_info()
如果str(sys.exc_info()[1])中的“get_ytplayer_config”:
flash(“输入有效的视频url!”)
返回重定向(“/”)
str(sys.exc_info()[1])中的elif“getaddrinfo失败”:
网络=错误
flash(“无法获取数据。请检查您的internet连接”,“危险”)
返回重定向(“/”)
其他:
闪光(错误,“危险”)
重定向(“/”)
尝试:
streams=yt.get_streams()
details=yt.get_details()
除属性错误为e外:
flash(“输入有效的youtube url!”)
返回重定向(“/”)
返回呈现模板('details.html',streams=streams,details=details)
其他:
返回重定向(“/”)
#在使用流id访问时,它将重定向以从dir发送
@app.route(“/download/”,方法=[“GET”])
def下载(流id):
全局yt、下载状态、下载文件名、流、isAudio
isAudio=checkFileRequest(流,流\u id)
尝试:
yt.下载完成(重定向用户)
下载(流id、YOUTUBE文件)
除属性错误为e外:
flash(“出现问题,请重试!”)
返回重定向(“/”)
返回渲染模板(“download.html”,downloadStatus=downloadStatus,fileName=download\u file\u name)
#从dir发送文件
@app.route(“/download/f/”,方法=[“GET”])
def returnFile(文件名):
从目录返回发送(YOUTUBE\u文件,文件名,as\u attachment=True)
@app.errorhandler(404)
def pagenotFound(错误):
返回渲染模板(“404.html”)
@app.errorhandler(405)
不允许使用def方法(错误):
返回渲染模板(“405.html”)
如果名称=“\uuuuu main\uuuuuuuu”:
运行(调试=True,端口=5001)
以下是错误日志:

Traceback (most recent call last):
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "F:\Youtube Do\venv\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 1953, in full_dispatch_request
    return self.finalize_request(rv)
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 1970, in finalize_request
    response = self.process_response(response)
  File "F:\Youtube Do\venv\lib\site-packages\flask\app.py", line 2269, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "F:\Youtube Do\venv\lib\site-packages\flask\sessions.py", line 378, in save_session
    val = self.get_signing_serializer(app).dumps(dict(session))
  File "F:\Youtube Do\venv\lib\site-packages\itsdangerous\serializer.py", line 166, in dumps
    payload = want_bytes(self.dump_payload(obj))
  File "F:\Youtube Do\venv\lib\site-packages\itsdangerous\url_safe.py", line 42, in dump_payload
    json = super(URLSafeSerializerMixin, self).dump_payload(obj)
  File "F:\Youtube Do\venv\lib\site-packages\itsdangerous\serializer.py", line 133, in dump_payload
    return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
  File "F:\Youtube Do\venv\lib\site-packages\flask\json\tag.py", line 305, in dumps
    return dumps(self.tag(value), separators=(",", ":"))
  File "F:\Youtube Do\venv\lib\site-packages\flask\json\__init__.py", line 211, in dumps
    rv = _json.dumps(obj, **kwargs)
  File "c:\users\sohel\appdata\local\programs\python\python37\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "c:\users\sohel\appdata\local\programs\python\python37\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "c:\users\sohel\appdata\local\programs\python\python37\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "F:\Youtube Do\venv\lib\site-packages\flask\json\__init__.py", line 100, in default
    return _json.JSONEncoder.default(self, o)
  File "c:\users\sohel\appdata\local\programs\python\python37\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type type is not JSON serializable
YoutubeDownload.py


从pytube导入YouTube
导入请求
类YoutubeVideo():
定义初始化(self,url):
self.url=url
self.Video=YouTube(url)
self.streams=self.Video.st