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)