import os
import pandas as pd
import requests
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ["OPENALEX_API_KEY"]OpenAlexをPythonから使ってみる
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 と、外部ライブラリの requests と pandas を使います。 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.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だと思います。
- 公式ドキュメント:Overview - OpenAlex Developers