Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1227,6 +1227,64 @@ def process_messenger_video(video_url, sender_id):
|
|
| 1227 |
print(f"處理 Messenger 影片時發生錯誤:{e}")
|
| 1228 |
send_message(sender_id, "處理影片時發生錯誤,請稍後再試。")
|
| 1229 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1230 |
#--------------------
|
| 1231 |
# WebSocket 路由 (即時手語辨識)
|
| 1232 |
#--------------------
|
|
|
|
| 1227 |
print(f"處理 Messenger 影片時發生錯誤:{e}")
|
| 1228 |
send_message(sender_id, "處理影片時發生錯誤,請稍後再試。")
|
| 1229 |
|
| 1230 |
+
def _fix_facebook_cdn_url(url):
|
| 1231 |
+
"""修復包含佔位符 'xx' 的 Facebook CDN URL"""
|
| 1232 |
+
if 'xx.fbcdn.net' not in url:
|
| 1233 |
+
return url
|
| 1234 |
+
|
| 1235 |
+
# 首先測試原始 URL 是否真的無法訪問
|
| 1236 |
+
print(f"🔍 先測試原始 URL 是否可訪問:{url}")
|
| 1237 |
+
try:
|
| 1238 |
+
response = requests.head(url, timeout=10, verify=False, allow_redirects=True)
|
| 1239 |
+
if response.status_code == 200:
|
| 1240 |
+
print(f"✅ 原始 URL 實際上是可以訪問的!狀態碼:{response.status_code}")
|
| 1241 |
+
return url # 如果原始 URL 可以訪問,直接返回
|
| 1242 |
+
except requests.exceptions.RequestException as e:
|
| 1243 |
+
print(f"⚠️ 原始 URL 測試失敗:{e},開始嘗試修復...")
|
| 1244 |
+
|
| 1245 |
+
# 擴展的 Facebook CDN 子域名列表(包含更多可能性)
|
| 1246 |
+
common_subdomains = [
|
| 1247 |
+
# 主要數據中心
|
| 1248 |
+
'fsin2-1', 'fsin2-2', 'fsin6-1', 'fsin6-2', # 新加坡
|
| 1249 |
+
'fsjc1-1', 'fsjc1-2', 'fsjc2-1', 'fsjc2-2', # 加州
|
| 1250 |
+
'fmaa1-1', 'fmaa1-2', 'fmaa2-1', 'fmaa2-2', # 馬來西亞
|
| 1251 |
+
'fatl1-1', 'fatl1-2', # 亞特蘭大
|
| 1252 |
+
'fsea1-1', 'fsea1-2', # 西雅圖
|
| 1253 |
+
'fiad1-1', 'fiad1-2', # 愛爾蘭都柏林
|
| 1254 |
+
'flin1-1', 'flin1-2', # 倫敦
|
| 1255 |
+
'ffor1-1', 'ffor1-2', # 法蘭克福
|
| 1256 |
+
'ftpe1-1', 'ftpe1-2', # 台灣
|
| 1257 |
+
'fhkg1-1', 'fhkg1-2', # 香港
|
| 1258 |
+
'fbom1-1', 'fbom1-2', # 孟買
|
| 1259 |
+
'fsyd1-1', 'fsyd1-2', # 悉尼
|
| 1260 |
+
'fssa1-1', 'fssa1-2', # 南非
|
| 1261 |
+
'fgig1-1', 'fgig1-2', # 巴西
|
| 1262 |
+
# 備用和測試子域名
|
| 1263 |
+
'video', # 有時直接用 video
|
| 1264 |
+
'scontent', # 靜態內容
|
| 1265 |
+
'external', # 外部內容
|
| 1266 |
+
]
|
| 1267 |
+
|
| 1268 |
+
print(f"🔧 開始測試 {len(common_subdomains)} 個可能的子域名...")
|
| 1269 |
+
|
| 1270 |
+
# 替換 'xx' 為每個可能的子域名並測試
|
| 1271 |
+
for subdomain in common_subdomains:
|
| 1272 |
+
fixed_url = url.replace('xx.fbcdn.net', f'{subdomain}.fbcdn.net')
|
| 1273 |
+
print(f"🔍 測試:{fixed_url}")
|
| 1274 |
+
|
| 1275 |
+
try:
|
| 1276 |
+
# 快速測試 URL 是否可訪問
|
| 1277 |
+
response = requests.head(fixed_url, timeout=5, verify=False, allow_redirects=True)
|
| 1278 |
+
if response.status_code == 200:
|
| 1279 |
+
print(f"✅ 找到有效的 URL:{fixed_url}")
|
| 1280 |
+
return fixed_url
|
| 1281 |
+
except requests.exceptions.RequestException:
|
| 1282 |
+
continue
|
| 1283 |
+
|
| 1284 |
+
# 如果都失敗,返回原始 URL(因為用戶說可以訪問)
|
| 1285 |
+
print(f"❌ 無法找到更好的 URL,但原始 URL 可能仍然有效:{url}")
|
| 1286 |
+
return url
|
| 1287 |
+
|
| 1288 |
#--------------------
|
| 1289 |
# WebSocket 路由 (即時手語辨識)
|
| 1290 |
#--------------------
|