はじめに
この記事では、OpenAlexをPythonから使い、論文や著者などの学術メタデータを取得する手順を整理します。
OpenAlexは、論文、著者、ジャーナル、機関、トピックなどを扱う学術情報のデータベースです。 APIのベースURLは https://api.openalex.org で、/works、/authors、/sources、/institutions などのエンドポイントが用意されています。
この記事では、まず /works エンドポイントを使い、キーワード検索、条件による絞り込み、結果の表形式への変換までを扱います。
実行環境
まず、この .qmd ファイル内でPythonが実行できるかを確認します。 ここではAPIにはアクセスせず、レンダリング時に必要なPython、requests、pandas が使えることだけを確認します。
import platform
import pandas as pd
import requests
pd.DataFrame(
{
"component": ["python", "requests", "pandas"],
"version": [
platform.python_version(),
requests.__version__,
pd.__version__,
],
}
)
| 0 |
python |
3.12.13 |
| 1 |
requests |
2.34.2 |
| 2 |
pandas |
3.0.3 |
APIキーの準備
OpenAlex APIを使うときは、APIキーを環境変数として保存しておくと、記事本文やコードにキーを書かずにすみます。
OpenAlexのAPI Referenceでは、api_key をクエリパラメータとして渡す形式が案内されています。 GitHub Actionsで実行する場合は、OPENALEX_API_KEY をRepository secretとして登録し、workflow側で環境変数として渡します。
export OPENALEX_API_KEY="your-api-key"
Windows PowerShellでは次のように設定します。
$env:OPENALEX_API_KEY = "your-api-key"
Works APIで論文を検索する
次のコードは、/works エンドポイントに対してキーワード検索を行う例です。 APIキーが必要なので、下書き段階では eval: false にしています。 実際に記事として実行する場合は、APIキーを設定したうえで eval: true に変更します。
import os
import pandas as pd
import requests
api_key = os.environ["OPENALEX_API_KEY"]
params = {
"api_key": api_key,
"search": "species distribution model",
"filter": "publication_year:2024,type:article,open_access.is_oa:true",
"sort": "cited_by_count:desc",
"per_page": 5,
"select": "id,display_name,publication_year,cited_by_count,doi",
}
response = requests.get(
"https://api.openalex.org/works",
params=params,
timeout=30,
)
response.raise_for_status()
works = response.json()["results"]
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
]
)
取得結果を見るときの観点
取得した結果は、次のような観点で確認すると記事としてまとめやすくなります。
display_name: 論文タイトルとして表示する
publication_year: 年ごとの絞り込みや集計に使う
cited_by_count: 被引用数で並べ替えると、よく引用されている文献を見つけやすい
doi: DOIがある場合は元論文へのリンクに使える
id: OpenAlex上の永続的な識別子として使える
次に試すこと
この記事では、最初のひな形としてWorks APIだけを扱いました。 本文を書き進めるときは、次のどれかを加えると内容を広げやすいです。
- 特定の著者IDや機関IDで絞り込む
group_by を使って出版年やオープンアクセス状況を集計する
- DOIからOpenAlexのレコードを引く
- 取得した文献リストをCSVとして保存する