From dbfc2502d73d5b3ee1a2707a77b4e3568083b2b5 Mon Sep 17 00:00:00 2001 From: Franklin-F Date: Tue, 8 Jul 2025 20:36:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5API=E4=BB=A5=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E8=A7=86=E9=A2=91=E6=98=AF=E5=90=A6=E5=B7=B2=E4=B8=8B?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- is_offline_api.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 is_offline_api.py diff --git a/is_offline_api.py b/is_offline_api.py new file mode 100644 index 0000000..f4252f8 --- /dev/null +++ b/is_offline_api.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# app.py +import requests +from flask import Flask, jsonify, abort + +app = Flask(__name__) + + +def check_video_removed(video_id): + """ + 调用 Dailymotion API 判断视频是否已下架/删除 + 返回: + 1 → 已被删除 / 不存在 / 已下架 / 设为私有 + 0 → 正常公开中 + """ + url = f"https://api.dailymotion.com/video/{video_id}" + params = {"fields": "published,private,status"} + try: + resp = requests.get(url, params=params, timeout=10) + except requests.RequestException as exc: + # 网络错误时返回 503,让上游知道需要重试 + abort(503, description=f"Upstream request failed: {exc}") + + # 404 → 不存在或已被删除 + if resp.status_code == 404: + return 1 + + # 其他非 2xx 状态码 → 直接透传给客户端 + if resp.status_code // 100 != 2: + abort(resp.status_code, description=resp.text) + + data = resp.json() + # published=False 或 private=True 都视作“已下架” + if not data.get("published", False) or data.get("private", False): + return 1 + + return 0 + + +@app.route("/video//status", methods=["GET"]) +def video_status(video_id): + removed = check_video_removed(video_id) + return jsonify({"video_id": video_id, "removed": removed}) + + +if __name__ == "__main__": + # 支持通过环境变量覆盖监听地址和端口 + import os + host = os.getenv("HOST", "0.0.0.0") + port = int(os.getenv("PORT", "5100")) + app.run(host=host, port=port, debug=False)