OpenAlexをPythonから使ってみる

python
OpenAlex APIをPythonから呼び出し、論文メタデータを取得するためのメモです。
Published

2026-06-01

Modified

2026-06-18

Note

English version: Using OpenAlex from Python

はじめに

この記事では、OpenAlexをPythonから使い、論文や著者などの学術メタデータを取得する手順を整理します。

OpenAlexは、論文、著者、ジャーナル、機関、トピックなどを扱う学術情報のデータベースです。 APIのベースURLは https://api.openalex.org で、/works/authors/sources/institutions などのエンドポイントが用意されています。

この記事では、まず /works エンドポイントを使い、キーワードなどを使って論文を検索する方法をまとめます。

APIキーの準備

OpenAlex APIを利用するには、APIキーが必要です。 APIキーは、OpenAlexのアカウントを作成してから、設定画面で取得できます。 以下のリンクからサインアップして、APIキーを入手してください。

論文を検索する

ここから段階的に、Pythonを使ってOpenAlex APIを呼び出し、論文を検索する方法を説明します。

ライブラリのインポートとAPIキーの設定

今回は、Pythonの標準ライブラリである os と、外部ライブラリの requestspandas を使います。 APIキーは、環境変数 OPENALEX_API_KEY に設定されていると仮定して、os.environ から取得します。 事前に作業ディレクトリの .env ファイルなどで OPENALEX_API_KEY=your_api_key_here と設定しておきます。 .envファイルは、プロジェクト直下に作成し、APIキーを含む環境変数を定義するためのテキストファイルです。 なお、GitHub Actionsを使う場合は、.envは使わず、Repository secrets にOPENALEX_API_KEYを登録して、workflowで渡すのが基本です。

.env
OPENALEX_API_KEY=your_api_key_here
import os
import pandas as pd
import requests
from dotenv import load_dotenv

load_dotenv()

api_key = os.environ["OPENALEX_API_KEY"]
Important

.envファイルを作成する際は、APIキーなどの機密情報が含まれるため、.gitignoreに追加してGitリポジトリにコミットされないように注意してください。

エンドポイントの指定、クエリパラメータの設定

論文を検索するには、/worksエンドポイントに対してGETリクエストを送ります。 ほかのエンドポイントは、以下のOpenAlex APIのドキュメントを参照してください。

クエリパラメータは、APIドキュメントの「List Works」セクションを参考にして、必要なものを設定します。 ここでは、次のようなパラメータを設定しています。 - api_key: APIキーを指定 - search: キーワード検索のクエリ - filter: 絞り込み条件(例: 出版年、文献タイプ - per_page: 1ページあたりの結果数 - select: 取得するフィールドの指定

パラメータの一覧については、以下のリンクを参照してください。

今回の検索は、以下のような条件で行います。

  • キーワード: “leaf economics spectrum”
  • 出版年: 2024年
  • 文献タイプ: article (論文)
  • オープンアクセス: true
endpoint = "https://api.openalex.org/works"
# パラメータの設定
params = {
    "api_key": api_key,
    "search": "leaf economics spectrum",
    "filter": "publication_year:2024,type:article,open_access.is_oa:true",
    "per_page": 5,
    "select": "id,display_name,publication_year,cited_by_count,doi",
}

HTTPリクエストの作成・送信

requests.get() を使って、エンドポイントに対してGETリクエストを送ります。 リクエストの送信後、response.raise_for_status() を呼び出して、HTTPエラーが発生した場合に例外を発生させるようにします。

# HTTPリクエストの作成と送信
# リクエストの送信
response = requests.get(
    endpoint,
    params=params,
    timeout=30,
)
response.raise_for_status()  # 失敗した場合は例外を発生させる

結果の確認と表形式への変換

レスポンスからJSONデータを取得し、results フィールドに含まれる論文のリストを取り出します。 その後、リスト内包表記を使って、必要なフィールドを抽出し、pandas.DataFrame に変換して表形式で表示します。

works = response.json()["results"]
# meta = response.json()["meta"]  # メタデータも必要に応じて取得可能

df = pd.DataFrame(
    [
        {
            "title": work["display_name"],
            "year": work["publication_year"],
            "citations": work["cited_by_count"],
            "doi": work.get("doi"),
            "openalex_id": work["id"],
        }
        for work in works
    ]
)

print(df.to_string())
出力結果
                                               title  year  citations                                      doi                 openalex_id
0  Life at the conservative end of the leaf econo...  2024          8     https://doi.org/10.1111/nph.20015  https://openalex.org/W4401340000
1  Extremely thin but very robust: Surprising cry...  2024          3  https://doi.org/10.1016/j.pld.2024.04.009  https://openalex.org/W4395672665
2  Plant economics spectrum governs leaf nitrogen...  2024         11  https://doi.org/10.1186/s12870-024-05484-9  https://openalex.org/W4401486401
3  Contrasting coordination of non‐structural car...  2024         45     https://doi.org/10.1111/nph.19678  https://openalex.org/W4392883019
4  Global patterns of plant functional traits and...  2024         52  https://doi.org/10.1038/s42003-024-06777-3  https://openalex.org/W4402513235

デフォルトでは、関連順(relevance)でソートされているため、キーワードとの関連性が高い順に結果が表示されます。 もし、被引用数の多い順に並べ替えたい場合は、クエリパラメータに sort=cited_by_count:descを追加するなどして、並べ替えの順番を指定することもできます。

まとめ

この記事では、OpenAlex APIをPythonから呼び出して、論文のメタデータを取得する方法を紹介しました。 APIキーの準備、エンドポイントとクエリパラメータの設定、HTTPリクエストの送信、レスポンスの処理と表形式への変換の手順を説明しました。 この方法を応用すれば、著者やジャーナル、機関などの情報も同様に取得することができます。

とても便利なAPIだと思います。