Spaces:
Running
Running
Update watcher.py
Browse files- watcher.py +49 -0
watcher.py
CHANGED
|
@@ -61,7 +61,47 @@ def extract_youtube_id(text):
|
|
| 61 |
if m:
|
| 62 |
return m.group(1)
|
| 63 |
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
def extract_youtube_and_option(text):
|
| 66 |
parts = re.split(r"[ \u3000]+", text.strip())
|
| 67 |
video_id = extract_youtube_id(parts[0])
|
|
@@ -303,7 +343,16 @@ def main():
|
|
| 303 |
|
| 304 |
if not urls:
|
| 305 |
send_to_channel("リンクが取得できませんでした。別の方法を試すか、ログを確認してください。")
|
|
|
|
|
|
|
|
|
|
| 306 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 307 |
processed_messages.add(latest_msg["id"])
|
| 308 |
print(f"処理完了: {video_id}")
|
| 309 |
|
|
|
|
| 61 |
if m:
|
| 62 |
return m.group(1)
|
| 63 |
return None
|
| 64 |
+
|
| 65 |
+
def upload_file_to_channel(file_url):
|
| 66 |
+
# mp4バイナリ取得
|
| 67 |
+
file_res = requests.get(file_url, timeout=60)
|
| 68 |
+
file_res.raise_for_status()
|
| 69 |
|
| 70 |
+
upload_url = "https://media.channel.io/cht/v1/pri-file/200605/groups/519217/message/send_yt_video_file.mp4"
|
| 71 |
+
|
| 72 |
+
files = {
|
| 73 |
+
"file": ("video.mp4", file_res.content, "video/mp4")
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
headers = {
|
| 77 |
+
"x-account": X_ACCOUNT,
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
res = requests.post(upload_url, headers=headers, files=files, timeout=60)
|
| 81 |
+
res.raise_for_status()
|
| 82 |
+
|
| 83 |
+
return res.json() # ←これを messages POST の body.files に入れる
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
def send_video_message(file_json):
|
| 87 |
+
request_id = f"desk-web-{int(time.time() * 1000)}"
|
| 88 |
+
|
| 89 |
+
payload = {
|
| 90 |
+
"requestId": request_id,
|
| 91 |
+
"blocks": [
|
| 92 |
+
{"type": "text", "value": "プレビュー:"}
|
| 93 |
+
],
|
| 94 |
+
"files": [file_json], # ←ここが重要!
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
res = requests.post(
|
| 98 |
+
POST_URL,
|
| 99 |
+
headers=HEADERS_POST,
|
| 100 |
+
data=json.dumps(payload),
|
| 101 |
+
timeout=30
|
| 102 |
+
)
|
| 103 |
+
res.raise_for_status()
|
| 104 |
+
|
| 105 |
def extract_youtube_and_option(text):
|
| 106 |
parts = re.split(r"[ \u3000]+", text.strip())
|
| 107 |
video_id = extract_youtube_id(parts[0])
|
|
|
|
| 343 |
|
| 344 |
if not urls:
|
| 345 |
send_to_channel("リンクが取得できませんでした。別の方法を試すか、ログを確認してください。")
|
| 346 |
+
merged_url = urls[0]
|
| 347 |
+
|
| 348 |
+
send_to_channel("ファイルをダウンロードして送信します。少々お待ちください。")
|
| 349 |
|
| 350 |
+
try:
|
| 351 |
+
file_json = upload_file_to_channel(merged_url)
|
| 352 |
+
send_video_message(file_json)
|
| 353 |
+
except Exception as e:
|
| 354 |
+
send_to_channel(f"ファイル送信中にエラーが発生しました: {e}")
|
| 355 |
+
|
| 356 |
processed_messages.add(latest_msg["id"])
|
| 357 |
print(f"処理完了: {video_id}")
|
| 358 |
|