From 9479d1390bcaa88a1c2e587083ec50bcc9e22230 Mon Sep 17 00:00:00 2001 From: Evil0ctal Date: Wed, 6 Apr 2022 14:32:03 -0700 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=97=B3=E5=BD=93=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=80=BC=E4=B8=BA=E7=A9=BA=E6=97=B6=E8=BF=94=E5=9B=9EJSON?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API/web_api.py | 105 +++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/API/web_api.py b/API/web_api.py index b7535f3..36548e2 100644 --- a/API/web_api.py +++ b/API/web_api.py @@ -2,7 +2,7 @@ # -*- encoding: utf-8 -*- # @Author: https://github.com/Evil0ctal/ # @Time: 2021/11/06 -# @Update: 2022/04/05 +# @Update: 2022/04/06 # @Function: # 创建一个接受提交参数的Flask应用程序。 # 将scraper.py返回的内容以JSON格式返回。 @@ -85,7 +85,7 @@ def webapi(): return jsonify(status='failed', reason=str(e), time=analyze_time, function='webapi()', value=content) else: # 返回错误信息 - return jsonify(status='failed', reason='url value cannot be empty') + return jsonify(status='failed', reason='url value cannot be empty', function='api()', value=content) @app.route("/video", methods=["POST", "GET"]) @@ -93,62 +93,65 @@ def download_video(): # 用于返回视频下载请求(返回MP4文件下载请求,面对大量请求时非常吃服务器内存,容易崩,慎用。) api = Scraper() content = request.args.get("url") - post_content = find_url(content)[0] - try: - if 'douyin.com' in post_content: - # 获取视频信息 - result = api.douyin(post_content) - # 视频链接 - video_url = result['nwm_video_url'] - # 视频标题 - video_title = result['video_title'] - # 作者昵称 - video_author = result['video_author'] - # 清理文件名 - file_name = clean_filename(video_title, video_author) - elif 'tiktok.com' in post_content: - # 获取视频信息 - result = api.tiktok(post_content) - # 无水印地址 - video_url = result['nwm_video_url'] - # 视频标题 - video_title = result['video_title'] - # 作者昵称 - video_author = result['video_author'] - # 清理文件名 - file_name = clean_filename(video_title, video_author) - else: - return jsonify(Status='Failed', Reason='Check submitted parameters!') - # 获取视频文件字节流 - video_mp4 = requests.get(video_url, headers).content - # 将字节流封装成返回对象 - response = make_response(video_mp4) - # 添加响应头部信息 - response.headers['Content-Type'] = "video/mp4" - # 他妈的,费了我老大劲才解决文件中文名的问题 + if content == '': + return jsonify(status='failed', reason='url value cannot be empty', function='download_music()', value=content) + else: + post_content = find_url(content)[0] try: - filename = file_name.encode('latin-1') - except UnicodeEncodeError: - filenames = { - 'filename': unicodedata.normalize('NFKD', file_name).encode('latin-1', 'ignore'), - 'filename*': "UTF-8''{}".format(url_quote(file_name) + '.mp4'), - } - else: - filenames = {'filename': file_name + '.mp4'} - # attachment表示以附件形式下载 - response.headers.set('Content-Disposition', 'attachment', **filenames) - return response - except Exception as e: - return jsonify(status='failed', reason=str(e), function='download_video()', value=content) - + if 'douyin.com' in post_content: + # 获取视频信息 + result = api.douyin(post_content) + # 视频链接 + video_url = result['nwm_video_url'] + # 视频标题 + video_title = result['video_title'] + # 作者昵称 + video_author = result['video_author'] + # 清理文件名 + file_name = clean_filename(video_title, video_author) + elif 'tiktok.com' in post_content: + # 获取视频信息 + result = api.tiktok(post_content) + # 无水印地址 + video_url = result['nwm_video_url'] + # 视频标题 + video_title = result['video_title'] + # 作者昵称 + video_author = result['video_author'] + # 清理文件名 + file_name = clean_filename(video_title, video_author) + else: + return jsonify(Status='Failed', Reason='Check submitted parameters!') + # 获取视频文件字节流 + video_mp4 = requests.get(video_url, headers).content + # 将字节流封装成返回对象 + response = make_response(video_mp4) + # 添加响应头部信息 + response.headers['Content-Type'] = "video/mp4" + # 他妈的,费了我老大劲才解决文件中文名的问题 + try: + filename = file_name.encode('latin-1') + except UnicodeEncodeError: + filenames = { + 'filename': unicodedata.normalize('NFKD', file_name).encode('latin-1', 'ignore'), + 'filename*': "UTF-8''{}".format(url_quote(file_name) + '.mp4'), + } + else: + filenames = {'filename': file_name + '.mp4'} + # attachment表示以附件形式下载 + response.headers.set('Content-Disposition', 'attachment', **filenames) + return response + except Exception as e: + return jsonify(status='failed', reason=str(e), function='download_video()', value=content) + @app.route("/music", methods=["POST", "GET"]) def download_music(): # 用于返回视频下载请求(返回MP3文件下载请求,面对大量请求时非常吃服务器内存,容易崩,慎用。) api = Scraper() content = request.args.get("url") - if content == 'No BGM found': - return jsonify(status='failed', reason='No BGM found', function='download_music()', value=content) + if content == '': + return jsonify(status='failed', reason='url value cannot be empty', function='download_music()', value=content) else: post_content = find_url(content)[0] try: