5. macOS/Linux で私有キーを設定
macOS
この bash コマンドは入力を隠し、コマンド本文にキー値を残しません。同じ shell で検索し、その後に変数を消します。 zsh の場合は先に bash を起動し、その bash セッションで検索します。
read -r -s -p "Materials Project API key: " MP_API_KEY
export MP_API_KEY
公式出典期待される結果
検索 shell に MP_API_KEY を設定し値は表示しない。
7. Windows で私有キーを設定
Windows
PowerShell で実行します。キーはプロセス環境で使用されるため検索後に消去します。
$atlasMpCredential = Read-Host "Materials Project API key" -AsSecureString
$env:MP_API_KEY = [System.Net.NetworkCredential]::new("", $atlasMpCredential).Password
公式出典期待される結果
検索プロセスが MP_API_KEY を読め、値は表示しない。
8. 小規模概要検索を保存
全プラットフォーム
materials_summary.py として保存。一つの指定材料を新規ファイルに保存し、キーは結果に記録しません。
"""Fetch a small, identified Materials Project summary using a private API key.
Sources: https://docs.materialsproject.org/downloading-data/using-the-api/getting-started
https://docs.materialsproject.org/downloading-data/using-the-api/examples
Source-reviewed example; not executed.
"""
import argparse
import json
import os
from datetime import datetime, timezone
from importlib.metadata import version
from pathlib import Path
from mp_api.client import MPRester
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--material-id", default="mp-149")
parser.add_argument("--output", type=Path, default=Path("materials-summary.json"))
args = parser.parse_args()
api_key = os.environ.get("MP_API_KEY", "").strip()
if not api_key:
parser.error("Set MP_API_KEY privately; no request was sent.")
if args.output.exists():
parser.error("Choose a new output path; existing output will not be overwritten.")
try:
with MPRester(api_key) as mpr:
docs = mpr.materials.summary.search(
material_ids=[args.material_id],
fields=["material_id", "formula_pretty", "band_gap", "energy_above_hull", "is_stable"],
num_chunks=1,
chunk_size=1,
)
except Exception:
# Avoid including credential-bearing request details in shared output.
parser.exit(1, "Materials Project request failed. Check key/account, network, rate limits and installed client version privately.\n")
payload = {
"retrieved_at": datetime.now(timezone.utc).isoformat(),
"mp_api_version": version("mp-api"),
"requested_material_id": args.material_id,
"records": [
{
"material_id": str(doc.material_id),
"formula": doc.formula_pretty,
"band_gap_eV": doc.band_gap,
"energy_above_hull_eV_per_atom": doc.energy_above_hull,
"is_stable": doc.is_stable,
"source_url": "https://materialsproject.org/materials/" + str(doc.material_id),
}
for doc in docs
],
}
with args.output.open("x", encoding="utf-8") as target:
json.dump(payload, target, ensure_ascii=False, indent=2)
target.write("\n")
print("Saved", len(payload["records"]), "record(s) to", args.output)
if __name__ == "__main__":
main()
公式出典期待される結果
.venv の隣にスクリプトを保存。
9. シリコン例を取得
全プラットフォーム
私有キー設定済みの shell で実行。Windows は ..venv\Scripts\python.exe を使用し、新規出力名を選択。
.venv/bin/python materials_summary.py --material-id mp-149 --output silicon-summary.json
公式出典期待される結果
実 JSON が mp-149 と Si、取得日時、クライアント版を含み、欠落値は null を保持。数値は API に基づき、固定バンドギャップは要求しない。記録なしなら明示して現在のアクセスを調べ、データを作らない。