Spaces:
Sleeping
Sleeping
debug
Browse files
app.py
CHANGED
|
@@ -2335,66 +2335,65 @@ def refresh_video_LLM_all_content_by_sheet(sheet_url, sheet_qa_column, video_ids
|
|
| 2335 |
print(f"批次更新 QA 為 '{sheet_qa_success_tag}' 時發生錯誤: {e}")
|
| 2336 |
# 這裡可以考慮是否要將這些 ID 移到失敗列表
|
| 2337 |
|
| 2338 |
-
# 6. 處理需要刷新的 ID
|
| 2339 |
-
successfully_refreshed_ids = [] # (video_id, row_number)
|
| 2340 |
-
failed_refresh_ids = [] # (video_id, row_number)
|
| 2341 |
-
|
| 2342 |
if ids_to_refresh:
|
| 2343 |
-
print(f"\n開始處理 {len(ids_to_refresh)} 個需要刷新的 Video ID...")
|
| 2344 |
-
|
|
|
|
|
|
|
| 2345 |
for video_id in ids_to_refresh:
|
| 2346 |
row_number = video_id_to_row_map[video_id] # 必定存在,前面已檢查
|
| 2347 |
print(f" 正在刷新 {video_id} (第 {row_number} 列)...")
|
|
|
|
| 2348 |
try:
|
| 2349 |
refresh_video_LLM_all_content_by_id(video_id)
|
| 2350 |
print(f" - {video_id} 刷新成功。")
|
| 2351 |
-
successfully_refreshed_ids.append((video_id, row_number)) # 記錄成功
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2352 |
time.sleep(1) # 避免過於頻繁觸發其他 API (例如 GCS 刪除/上傳)
|
| 2353 |
except Exception as e:
|
| 2354 |
print(f" - {video_id} 刷新失敗: {str(e)}")
|
| 2355 |
-
failed_refresh_ids.append((video_id, row_number)) # 記錄失敗
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2356 |
time.sleep(5) # 失敗時稍作停頓
|
| 2357 |
-
|
| 2358 |
-
|
| 2359 |
-
|
| 2360 |
-
|
| 2361 |
-
|
| 2362 |
-
|
| 2363 |
-
|
| 2364 |
-
|
| 2365 |
-
|
| 2366 |
-
|
| 2367 |
-
|
| 2368 |
-
|
| 2369 |
-
|
| 2370 |
-
|
| 2371 |
-
|
| 2372 |
-
|
| 2373 |
-
|
| 2374 |
-
|
| 2375 |
-
|
| 2376 |
-
|
| 2377 |
-
|
| 2378 |
-
|
| 2379 |
-
|
| 2380 |
-
|
| 2381 |
-
|
| 2382 |
-
|
| 2383 |
-
|
| 2384 |
-
|
| 2385 |
-
print(f"批次更新 QA 為 '{sheet_qa_success_tag}' (刷新成功) 時發生錯誤: {e}")
|
| 2386 |
-
|
| 2387 |
-
# 執行失敗的批次更新
|
| 2388 |
-
if update_data_xx:
|
| 2389 |
-
print(f"\n準備批次更新 {len(update_data_xx)} 個 Video ID 的 QA 為 '{sheet_qa_failed_tag}' (刷新失敗)...")
|
| 2390 |
-
try:
|
| 2391 |
-
SHEET_SERVICE.batch_update_cells(sheet_url, update_data_xx) # <--- 實際呼叫更新 Sheet 的函數
|
| 2392 |
-
print(f"成功批次更新 {len(update_data_xx)} 個儲存格為 '{sheet_qa_failed_tag}'。")
|
| 2393 |
-
except Exception as e:
|
| 2394 |
-
print(f"批次更新 QA 為 '{sheet_qa_failed_tag}' 時發生錯誤: {e}")
|
| 2395 |
-
else:
|
| 2396 |
-
if successfully_refreshed_ids or failed_refresh_ids:
|
| 2397 |
-
print("錯誤:無法獲取工作表名稱,無法批次更新刷新結果。")
|
| 2398 |
|
| 2399 |
# 8. 整理最終結果
|
| 2400 |
final_success_ids = [item[0] for item in ids_to_set_oo_phase1] + [item[0] for item in successfully_refreshed_ids]
|
|
|
|
| 2335 |
print(f"批次更新 QA 為 '{sheet_qa_success_tag}' 時發生錯誤: {e}")
|
| 2336 |
# 這裡可以考慮是否要將這些 ID 移到失敗列表
|
| 2337 |
|
| 2338 |
+
# 6. 逐一處理需要刷新的 Video ID,並即時更新 Sheet 狀態
|
|
|
|
|
|
|
|
|
|
| 2339 |
if ids_to_refresh:
|
| 2340 |
+
print(f"\n開始處理 {len(ids_to_refresh)} 個需要刷新的 Video ID (即時更新 Sheet)...")
|
| 2341 |
+
successfully_refreshed_ids = [] # 初始化成功列表
|
| 2342 |
+
failed_refresh_ids = [] # 初始化失敗列表
|
| 2343 |
+
# 這個迴圈負責執行刷新,並在每次完成後立即更新 Sheet
|
| 2344 |
for video_id in ids_to_refresh:
|
| 2345 |
row_number = video_id_to_row_map[video_id] # 必定存在,前面已檢查
|
| 2346 |
print(f" 正在刷新 {video_id} (第 {row_number} 列)...")
|
| 2347 |
+
update_request = None
|
| 2348 |
try:
|
| 2349 |
refresh_video_LLM_all_content_by_id(video_id)
|
| 2350 |
print(f" - {video_id} 刷新成功。")
|
| 2351 |
+
successfully_refreshed_ids.append((video_id, row_number)) # 仍然記錄成功,以備後續統計
|
| 2352 |
+
# 準備單一成功更新請求
|
| 2353 |
+
# *** 注意: 您需要確認 SHEET_NAME 和 STATUS_COL_LETTER ***
|
| 2354 |
+
update_request = [{
|
| 2355 |
+
'range': f'{SHEET_NAME}!{STATUS_COL_LETTER}{row_number}', # 例如: '工作表1!G5'
|
| 2356 |
+
'values': [['OO']]
|
| 2357 |
+
}]
|
| 2358 |
time.sleep(1) # 避免過於頻繁觸發其他 API (例如 GCS 刪除/上傳)
|
| 2359 |
except Exception as e:
|
| 2360 |
print(f" - {video_id} 刷新失敗: {str(e)}")
|
| 2361 |
+
failed_refresh_ids.append((video_id, row_number)) # 仍然記錄失敗,以備後續統計
|
| 2362 |
+
# 準備單一失敗更新請求
|
| 2363 |
+
# *** 注意: 您需要確認 SHEET_NAME 和 STATUS_COL_LETTER ***
|
| 2364 |
+
update_request = [{
|
| 2365 |
+
'range': f'{SHEET_NAME}!{STATUS_COL_LETTER}{row_number}', # 例如: '工作表1!G5'
|
| 2366 |
+
'values': [['XX']]
|
| 2367 |
+
}]
|
| 2368 |
time.sleep(5) # 失敗時稍作停頓
|
| 2369 |
+
finally:
|
| 2370 |
+
# 無論成功或失敗,都嘗試更新該行的狀態
|
| 2371 |
+
if update_request:
|
| 2372 |
+
try:
|
| 2373 |
+
print(f" - 更新 Sheet 第 {row_number} 列狀態...")
|
| 2374 |
+
# *** 假設 batch_update_cells 可以接受單一更新請求的列表 ***
|
| 2375 |
+
# *** 注意: 您需要確認 batch_update_cells 函式存在且能處理此格式 ***
|
| 2376 |
+
SHEET_SERVICE.batch_update_cells(sheet_url, update_request) # 假設使用 SHEET_SERVICE
|
| 2377 |
+
print(f" - 第 {row_number} 列狀態更新成功。")
|
| 2378 |
+
except Exception as update_e:
|
| 2379 |
+
print(f" - !! 更新 Sheet 第 {row_number} 列狀態失敗: {str(update_e)}")
|
| 2380 |
+
# 即使更新 Sheet 失敗,也要記錄下來,避免影響下一個影片的處理
|
| 2381 |
+
# 可以在這裡加入更詳細的錯誤記錄機制
|
| 2382 |
+
|
| 2383 |
+
# 7. 批次更新刷新結果 (OO for success, XX for failure) <-- 這段程式碼現在不需要了,因為已在迴圈內即時更新
|
| 2384 |
+
# if successfully_refreshed_ids or failed_refresh_ids:
|
| 2385 |
+
# print("\n開始批次更新 Google Sheet 刷新結果...")
|
| 2386 |
+
# update_requests = []
|
| 2387 |
+
# # ... (原本準備 update_requests 的程式碼) ...
|
| 2388 |
+
#
|
| 2389 |
+
# if update_requests:
|
| 2390 |
+
# try:
|
| 2391 |
+
# batch_update_cells(update_requests)
|
| 2392 |
+
# print(f" 成功更新 {len(successfully_refreshed_ids)} 個成功,{len(failed_refresh_ids)} 個失敗的狀態。")
|
| 2393 |
+
# except Exception as e:
|
| 2394 |
+
# print(f" 批次更新 Google Sheet 失敗: {str(e)}")
|
| 2395 |
+
# else:
|
| 2396 |
+
# print(" 沒有需要更新的狀態。")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2397 |
|
| 2398 |
# 8. 整理最終結果
|
| 2399 |
final_success_ids = [item[0] for item in ids_to_set_oo_phase1] + [item[0] for item in successfully_refreshed_ids]
|