Untitled27.ipynb
import requests
def search_semantic_scholar_and_notify(keyword: str, slack_webhook_url: str, limit: int = 5):
"""
Semantic Scholar から keyword で検索した論文のタイトルとアブストラクトを取得し、
Slack に通知する関数。
Parameters
----------
keyword : str
検索に使用するキーワード
slack_webhook_url : str
Slack の Incoming Webhook URL
limit : int, optional
取得する論文数 (デフォルト: 5)
"""
# --- 1. Semantic Scholar API を用いて検索 ---
url = "<https://api.semanticscholar.org/graph/v1/paper/search>"
params = {
"query": keyword,
"limit": limit,
"fields": "title,abstract" # 必要に応じて追加フィールドを指定
}
try:
response = requests.get(url, params=params)
response.raise_for_status() # ステータスコード 200 系以外の場合に例外を出す
except requests.exceptions.RequestException as e:
print(f"Semantic Scholar API へのリクエストでエラーが発生しました: {e}")
return
data = response.json()
papers = data.get("data", [])
# --- 2. Slack に送るメッセージ本文を組み立て ---
# シンプルに本文を作る例
message = f"Semantic Scholar で '{keyword}' を検索した結果(最大 {limit} 件):\\n"
if not papers:
message += "該当する論文が見つかりませんでした。\\n"
else:
for i, paper in enumerate(papers, start=1):
title = paper.get("title", "No Title")
abstract = paper.get("abstract", "No Abstract")
message += f"\\n{i}. Title: {title}\\n Abstract: {abstract}\\n"
# --- 3. Slack Webhook にメッセージを POST する ---
payload = {
"text": message
}
try:
slack_response = requests.post(slack_webhook_url, json=payload)
slack_response.raise_for_status()
print("Slack への通知が成功しました。")
except requests.exceptions.RequestException as e:
print(f"Slack への通知でエラーが発生しました: {e}")
if __name__ == "__main__":
# 実行例
# 自分の Slack ワークスペースで作成した Incoming Webhook URL を以下に設定
SLACK_WEBHOOK_URL = "<https://hooks.slack.com/services/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>"
# 検索に利用するキーワードを指定
KEYWORD = "artificial intelligence medical"
# 例として 3 件のみ取得
search_semantic_scholar_and_notify(KEYWORD, SLACK_WEBHOOK_URL, limit=3)