youngtsai commited on
Commit
13da3b2
·
1 Parent(s): 93b2b32
Files changed (1) hide show
  1. app.py +48 -49
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
- # 這個迴圈只負責執行刷新並記錄結果,不直接更新 Sheet
 
 
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
- # 7. 批次更新刷新結果 (OO for success, XX for failure)
2359
- # --- 更新 Sheet 的程式碼在這裡 ---
2360
- update_data_oo2 = []
2361
- update_data_xx = []
2362
- sheet_name = SHEET_SERVICE.get_sheet_name_by_url(sheet_url) # 再次獲取或使用之前獲取的
2363
-
2364
- if sheet_name:
2365
- # 準備成功刷新的更新資料
2366
- for vid, row_num in successfully_refreshed_ids:
2367
- update_data_oo2.append({
2368
- 'range': f"{sheet_name}!{qa_col_letter}{row_num}",
2369
- 'value': sheet_qa_success_tag
2370
- })
2371
- # 準備刷新失敗的更新資料
2372
- for vid, row_num in failed_refresh_ids:
2373
- update_data_xx.append({
2374
- 'range': f"{sheet_name}!{qa_col_letter}{row_num}",
2375
- 'value': sheet_qa_failed_tag
2376
- })
2377
-
2378
- # 執行成功的批次更新
2379
- if update_data_oo2:
2380
- print(f"\n準備批次更新 {len(update_data_oo2)} 個 Video ID 的 QA 為 '{sheet_qa_success_tag}' (刷新成功)...")
2381
- try:
2382
- SHEET_SERVICE.batch_update_cells(sheet_url, update_data_oo2) # <--- 實際呼叫更新 Sheet 的函數
2383
- print(f"成功批次更新 {len(update_data_oo2)} 個儲存格為 '{sheet_qa_success_tag}'。")
2384
- except Exception as e:
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]