Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,10 +5,10 @@ from linebot.v3 import WebhookHandler
|
|
| 5 |
from linebot.v3.exceptions import InvalidSignatureError
|
| 6 |
from linebot.v3.messaging import (
|
| 7 |
Configuration, ApiClient, MessagingApi,
|
| 8 |
-
ReplyMessageRequest, TextMessage
|
|
|
|
|
|
|
| 9 |
)
|
| 10 |
-
# --- ✨✨✨ CORRECTION: Import ImageSendMessage from the correct module ✨✨✨ ---
|
| 11 |
-
from linebot.v3.messaging.models.image_send_message import ImageSendMessage
|
| 12 |
from linebot.v3.webhooks import MessageEvent, TextMessageContent
|
| 13 |
|
| 14 |
import requests
|
|
@@ -118,9 +118,12 @@ def handle_message(event):
|
|
| 118 |
line_bot_api = MessagingApi(api_client)
|
| 119 |
|
| 120 |
if "臺灣地震畫圖" in user_message or "台灣地震畫圖" in user_message:
|
|
|
|
| 121 |
line_bot_api.reply_message_with_http_info(ReplyMessageRequest(
|
| 122 |
reply_token=event.reply_token, messages=[TextMessage(text="🗺️ 收到指令!正在繪製地震分佈圖,請稍候...")]
|
| 123 |
))
|
|
|
|
|
|
|
| 124 |
result = fetch_taiwan_earthquake_data_df()
|
| 125 |
if isinstance(result, pd.DataFrame):
|
| 126 |
filename = create_and_save_map(result)
|
|
@@ -132,6 +135,7 @@ def handle_message(event):
|
|
| 132 |
line_bot_api.push_message(body={'to': event.source.user_id, 'messages': [TextMessage(text=result)]})
|
| 133 |
return
|
| 134 |
|
|
|
|
| 135 |
reply_text = ""
|
| 136 |
if user_message == "/help":
|
| 137 |
reply_text = """📖 地震預警dayichen 指令說明
|
|
@@ -157,12 +161,12 @@ def handle_message(event):
|
|
| 157 |
if isinstance(result, pd.DataFrame):
|
| 158 |
count = len(result)
|
| 159 |
reply_text = f"🇹🇼 今年 ({datetime.now().year}年) 台灣區域顯著地震 (M≥5.0),共 {count} 筆:\n{'-'*20}\n"
|
| 160 |
-
|
|
|
|
| 161 |
time_str = row['time'].strftime('%Y-%m-%d %H:%M')
|
| 162 |
reply_text += f"震級: {row['magnitude']:.1f} | 時間: {time_str} (UTC)\n地點: {row['place']}\n\n"
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
break
|
| 166 |
else:
|
| 167 |
reply_text = result
|
| 168 |
elif "地震" in user_message or "quake" in user_message:
|
|
|
|
| 5 |
from linebot.v3.exceptions import InvalidSignatureError
|
| 6 |
from linebot.v3.messaging import (
|
| 7 |
Configuration, ApiClient, MessagingApi,
|
| 8 |
+
ReplyMessageRequest, TextMessage,
|
| 9 |
+
# --- ✨✨✨ CORRECTION: ImageSendMessage is now directly in messaging ✨✨✨ ---
|
| 10 |
+
ImageSendMessage
|
| 11 |
)
|
|
|
|
|
|
|
| 12 |
from linebot.v3.webhooks import MessageEvent, TextMessageContent
|
| 13 |
|
| 14 |
import requests
|
|
|
|
| 118 |
line_bot_api = MessagingApi(api_client)
|
| 119 |
|
| 120 |
if "臺灣地震畫圖" in user_message or "台灣地震畫圖" in user_message:
|
| 121 |
+
# We must reply to the webhook post request quickly, so we send a "processing" message first.
|
| 122 |
line_bot_api.reply_message_with_http_info(ReplyMessageRequest(
|
| 123 |
reply_token=event.reply_token, messages=[TextMessage(text="🗺️ 收到指令!正在繪製地震分佈圖,請稍候...")]
|
| 124 |
))
|
| 125 |
+
|
| 126 |
+
# Then we process the data and send the image with a push message.
|
| 127 |
result = fetch_taiwan_earthquake_data_df()
|
| 128 |
if isinstance(result, pd.DataFrame):
|
| 129 |
filename = create_and_save_map(result)
|
|
|
|
| 135 |
line_bot_api.push_message(body={'to': event.source.user_id, 'messages': [TextMessage(text=result)]})
|
| 136 |
return
|
| 137 |
|
| 138 |
+
# --- Handle other text-based commands ---
|
| 139 |
reply_text = ""
|
| 140 |
if user_message == "/help":
|
| 141 |
reply_text = """📖 地震預警dayichen 指令說明
|
|
|
|
| 161 |
if isinstance(result, pd.DataFrame):
|
| 162 |
count = len(result)
|
| 163 |
reply_text = f"🇹🇼 今年 ({datetime.now().year}年) 台灣區域顯著地震 (M≥5.0),共 {count} 筆:\n{'-'*20}\n"
|
| 164 |
+
# To avoid exceeding LINE message length limits, we only show a few recent ones.
|
| 165 |
+
for index, row in result.head(15).iterrows():
|
| 166 |
time_str = row['time'].strftime('%Y-%m-%d %H:%M')
|
| 167 |
reply_text += f"震級: {row['magnitude']:.1f} | 時間: {time_str} (UTC)\n地點: {row['place']}\n\n"
|
| 168 |
+
if count > 15:
|
| 169 |
+
reply_text += f"... (還有 {count-15} 筆,請使用「臺灣地震畫圖」查看全部)"
|
|
|
|
| 170 |
else:
|
| 171 |
reply_text = result
|
| 172 |
elif "地震" in user_message or "quake" in user_message:
|