Nyanpre commited on
Commit
ab26e11
·
verified ·
1 Parent(s): 05e3b13

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -38
app.py CHANGED
@@ -1,60 +1,76 @@
1
  import gradio as gr
2
  import pandas as pd
3
  from atproto import Client
4
- from huggingface_hub import HfApi, hf_hub_download
5
  import os
 
6
 
7
- # --- 設定 ---
8
- # 保存先のデータセット名(例: "ユーザー名/タセット名")
9
- DATASET_ID = "your-username/bluesky-archive-data"
10
  DATA_FILE = "data.csv"
11
-
12
- # Hugging Faceの書き込み権限(Settings -> Access Tokens で作成したものを Secret に設定推奨)
13
  HF_TOKEN = os.getenv("HF_TOKEN")
14
 
15
  api = HfApi()
16
 
17
- # --- データを取得して保存する関数 ---
18
  def fetch_and_save():
19
- client = Client()
20
- # Blueskyから検索
21
- response = client.app.bsky.feed.search_posts(q="#青空怪文庫", limit=50)
22
-
23
- new_data = []
24
- for post in response.posts:
25
- new_data.append({
26
- "日付": post.record.created_at,
27
- "投稿者": post.author.handle,
28
- "本文": post.record.text,
29
- "URL": f"https://bsky.app/profile/{post.author.did}/post/{post.uri.split('/')[-1]}"
30
- })
31
-
32
- df = pd.DataFrame(new_data)
33
-
34
- # 1. 一旦ローカルに保存
35
- df.to_csv(DATA_FILE, index=False)
36
-
37
- # 2. Hugging Face Datasetリポジトリにアップロード
38
- if HF_TOKEN:
39
- api.upload_file(
40
- path_or_fileobj=DATA_FILE,
41
- path_in_repo=DATA_FILE,
42
- repo_id=DATASET_ID,
43
- repo_type="dataset",
44
- token=HF_TOKEN
45
- )
46
-
47
- return df
 
 
 
 
 
 
 
48
 
49
- # --- UI部分 (Gradio) ---
 
 
 
 
 
50
  with gr.Blocks() as demo:
51
  gr.Markdown("# 👻 #青空怪文庫 自動アーカイブ")
52
 
53
  with gr.Row():
54
  refresh_btn = gr.Button("最新データを取得&保存", variant="primary")
55
 
 
 
 
56
  data_table = gr.Dataframe()
57
 
58
- refresh_btn.click(fn=fetch_and_save, outputs=data_table)
 
 
 
 
59
 
60
  demo.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
  from atproto import Client
4
+ from huggingface_hub import HfApi
5
  import os
6
+ import traceback # エラー詳細を取得するために追加
7
 
8
+ # --- 設定(ここを自分の環境に合わせて書き換えてください) ---
9
+ DATASET_ID = "Nyanpre/kaibunnko_data" # スクリンショットに合わせて変更しました
 
10
  DATA_FILE = "data.csv"
 
 
11
  HF_TOKEN = os.getenv("HF_TOKEN")
12
 
13
  api = HfApi()
14
 
 
15
  def fetch_and_save():
16
+ try:
17
+ # 1. Bluesky API 接続
18
+ client = Client()
19
+ # 検索(※公開APIですが、稀にログインが必要な場合があります)
20
+ response = client.app.bsky.feed.search_posts(q="#青空怪文庫", limit=50)
21
+
22
+ if not response.posts:
23
+ return "ポストが見つかりませんでした。", pd.DataFrame()
24
+
25
+ new_data = []
26
+ for post in response.posts:
27
+ new_data.append({
28
+ "日付": post.record.created_at,
29
+ "投稿者": post.author.handle,
30
+ "本文": post.record.text,
31
+ "URL": f"https://bsky.app/profile/{post.author.did}/post/{post.uri.split('/')[-1]}"
32
+ })
33
+
34
+ df = pd.DataFrame(new_data)
35
+
36
+ # 2. ローカル保存
37
+ df.to_csv(DATA_FILE, index=False)
38
+
39
+ # 3. アップロード (Tokenがある場合のみ)
40
+ upload_status = "保存未実行(Tokenなし)"
41
+ if HF_TOKEN:
42
+ api.upload_file(
43
+ path_or_fileobj=DATA_FILE,
44
+ path_in_repo=DATA_FILE,
45
+ repo_id=DATASET_ID,
46
+ repo_type="dataset",
47
+ token=HF_TOKEN
48
+ )
49
+ upload_status = "Datasetに保存完了!"
50
+
51
+ return f"成功: {len(df)}件取得しました。({upload_status})", df
52
 
53
+ except Exception as e:
54
+ # エラーの全容を文字列として取得
55
+ error_detail = traceback.format_exc()
56
+ return f"❌ エラーが発生しました:\n{error_detail}", pd.DataFrame()
57
+
58
+ # --- UI ---
59
  with gr.Blocks() as demo:
60
  gr.Markdown("# 👻 #青空怪文庫 自動アーカイブ")
61
 
62
  with gr.Row():
63
  refresh_btn = gr.Button("最新データを取得&保存", variant="primary")
64
 
65
+ # ログ出力用のテキストボックスを追加
66
+ status_log = gr.Textbox(label="実行ログ / エラー詳細", interactive=False)
67
+
68
  data_table = gr.Dataframe()
69
 
70
+ # ボタンクリック時に「ログ」と「テーブル」の両方を更新
71
+ refresh_btn.click(
72
+ fn=fetch_and_save,
73
+ outputs=[status_log, data_table]
74
+ )
75
 
76
  demo.launch()