video_AI_admin / app.py
youngtsai's picture
tab_name_input = gr.Textbox(label="Enter Google Sheet Tab Name", value="思考力訓練")
5187938
Raw
History Blame Contribute Delete
3.69 kB
import gradio as gr
import gspread
import os
import json
from google.cloud import storage
# 设置Google Sheets的默认值
DEFAULT_SHEET_URL = "https://docs.google.com/spreadsheets/d/161-2m7mDdEYWtMEjPeMFYlruJ6zvCZPyogns84AmVpw/edit#gid=1159223931"
GCS_BUCKET_NAME = "video_ai_assistant"
# 从环境变量获取GCS密钥
GCS_KEY_JSON = os.getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON")
GCS_KEY = json.loads(GCS_KEY_JSON)
GCS_CLIENT = storage.Client.from_service_account_info(GCS_KEY)
# 检查GCS中是否存在特定文件
def check_file_in_gcs(bucket_name, video_id, file_type):
bucket = GCS_CLIENT.bucket(bucket_name)
file_path = f"{video_id}/{video_id}_{file_type}.json"
blob = bucket.blob(file_path)
return blob.exists()
def process_sheet_data(sheet_url, sheet_tab_name):
gc = gspread.service_account_from_dict(GCS_KEY)
sh = gc.open_by_url(sheet_url)
worksheet = sh.worksheet(sheet_tab_name)
data = worksheet.get_all_records()
# 检查GCS中是否存在对应的文件
results = []
headers = ['subject', 'grade', '均一平台 標題', '均一平台 YouTube ID', '均一平台 YT Readable ID', 'cooc Youtube ID', 'transcript', 'questions', 'key_moments', 'summary', 'reading_passage', 'mind_map', 'yt_check_results', "cooc_check_results"]
for row in data:
video_ids_checked = set() # 用于存储已检查的ID
yt_check_results = []
cooc_check_results = []
readable_id = row.get('均一平台 YT Readable ID', '')
youtube_id = row.get('均一平台 YouTube ID', '')
cooc_id = row.get('cooc Youtube ID', '')
# 准备结果行
row_result = [
row.get('subject', ''), row.get('grade', ''), row.get('均一平台 標題', ''),
youtube_id, readable_id, cooc_id
]
# 檢查 readable_id
for file_type in headers[6:-3]: # 跳过前面的ID和标题列以及最后的结果列
row_result.append(check_file_in_gcs(GCS_BUCKET_NAME, readable_id, file_type))
video_ids_checked.add(readable_id)
# 檢查 youtube_id
if youtube_id in video_ids_checked:
yt_check_results = "NA"
else:
for file_type in headers[6:-3]:
yt_check_result = check_file_in_gcs(GCS_BUCKET_NAME, youtube_id, file_type)
yt_check_results.append(yt_check_result)
video_ids_checked.add(youtube_id)
# 檢查 cooc_id
if cooc_id in video_ids_checked or not cooc_id:
cooc_check_results = "NA"
else:
for file_type in headers[6:-3]:
cooc_check_result = check_file_in_gcs(GCS_BUCKET_NAME, youtube_id, file_type)
cooc_check_results.append(cooc_check_result)
row_result.append(yt_check_results)
row_result.append(cooc_check_results)
results.append(row_result)
print("=====================================")
print(row_result)
return results, headers
def update_output_table(sheet_url, sheet_tab_name):
data, headers = process_sheet_data(sheet_url, sheet_tab_name)
return gr.update(value=data, headers=headers)
with gr.Blocks() as app:
with gr.Row():
sheet_url_input = gr.Textbox(label="Enter Google Sheet URL", value=DEFAULT_SHEET_URL)
tab_name_input = gr.Textbox(label="Enter Google Sheet Tab Name", value="思考力訓練")
submit_button = gr.Button("Submit")
with gr.Row():
output_table = gr.Dataframe()
submit_button.click(
fn=update_output_table,
inputs=[sheet_url_input, tab_name_input],
outputs=[output_table]
)
app.launch()