ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
AtoM REST APIによるデジタルアーカイブ構築の検証

AtoM REST APIによるデジタルアーカイブ構築の検証

はじめに AtoM (Access to Memory) は、アーカイブ機関向けのオープンソースWebアプリケーションです。世界中の図書館・文書館・博物館で、資料記述の管理に利用されています。 AtoMの操作は通常Web UIから行いますが、REST APIを使えば外部システムとの連携やバッチ処理が可能になります。本記事では、現実的な業務シナリオ に沿ってAPIを一通り試し、Web UIでの反映も確認していきます。 APIプラグインの開発経緯や実装の詳細は、別記事 AtoMのREST APIを拡張するプラグインを開発した話 をご覧ください。 利用するAPI arRestApiPlugin (AtoM標準): 資料記述(Information Object)のCRUD arExtendedApiPlugin (独自開発): 所蔵機関・典拠レコード・受入記録・タクソノミー・機能記述・デジタルオブジェクトの操作 全28エンドポイントの一覧は開発記事を参照してください。 事前準備 # AtoMのURL(環境に合わせて変更) export ATOM_URL="http://localhost:63001" # APIキー(Admin > Settings > Global > API key で設定) export API_KEY="your-api-key-here" APIキーはAtoMの管理画面(Settings > Global)で設定・確認できます。 業務シナリオ:「橋本市立図書館デジタルアーカイブの構築」 ストーリー 橋本市立図書館が、郷土史研究家の山田花子氏から寄贈された橋本市の古写真コレクション(明治〜昭和期)のデジタルアーカイブを構築する。 以下の手順で、アーカイブの構築に必要な一連の作業をAPIで実行していきます。 Step 業務内容 API 0 初期状態を確認する GET /api/summary 1 所蔵機関を登録する POST /api/repositories 2 所蔵機関の情報を確認する GET /api/repositories/:slug 3 連絡先情報を追加する PUT /api/repositories/:slug 4 寄贈者を登録する POST /api/actors 5 寄贈者の情報を確認する GET /api/actors/:slug 6 受入記録を作成する POST /api/accessions 7 処理ステータスを更新する PUT /api/accessions/:slug 8 タクソノミー(分類語彙)を確認する GET /api/taxonomies 9 主題分類を追加する POST /api/taxonomies/:id/terms 10 分類名を修正する PUT /api/taxonomies/terms/:id 11 資料記述を作成する POST /api/informationobjects 12 デジタル画像を添付する POST /api/informationobjects/:slug/digitalobject 13 最終状態を確認する GET /api/summary シナリオ完了後、「追加機能の紹介」セクションで以下も解説します: ...

AtoMのREST APIを拡張するプラグインを開発した話

AtoMのREST APIを拡張するプラグインを開発した話

はじめに AtoM (Access to Memory) は、アーカイブ機関向けのオープンソースWebアプリケーションです。ISAD(G)、ISAAR(CPF)、ISDFなどの国際標準に準拠した記述管理機能を提供しており、世界中の図書館・文書館・博物館で利用されています。 AtoMには arRestApiPlugin という標準のREST APIプラグインが同梱されていますが、以下の制約があります: 情報オブジェクト(資料記述)のCRUD が中心で、カバー範囲が限定的 所蔵機関(Repository) 、典拠レコード(Actor) 、受入記録(Accession) のAPIがない タクソノミー (分類語彙)の操作APIがない デジタルオブジェクト のアップロードAPIが実用的でない 機能記述(Function) のAPIがない これでは、外部システムとの連携やバッチ処理による大量登録といった業務ニーズに応えられません。 本記事では、これらの課題を解決するために開発した arExtendedApiPlugin の実装について解説します。 このプラグインを使って実際に業務シナリオを実行した記事もあります:APIで構築する図書館デジタルアーカイブ — AtoM業務シナリオ実践ガイド arExtendedApiPlugin の概要 エンドポイント一覧(全28エンドポイント) リソース メソッド エンドポイント 説明 サマリー GET /api/summary 各エンティティの件数 所蔵機関 GET /api/repositories 一覧(検索・ページネーション) GET /api/repositories/:slug 詳細取得 POST /api/repositories 新規作成 PUT /api/repositories/:slug 更新 DELETE /api/repositories/:slug 削除 POST /api/repositories/:slug/logo ロゴアップロード DELETE /api/repositories/:slug/logo ロゴ削除 典拠レコード GET /api/actors 一覧 GET /api/actors/:slug 詳細取得 POST /api/actors 新規作成 PUT /api/actors/:slug 更新 DELETE /api/actors/:slug 削除 受入記録 GET /api/accessions 一覧 GET /api/accessions/:slug 詳細取得 POST /api/accessions 新規作成 PUT /api/accessions/:slug 更新 DELETE /api/accessions/:slug 削除 タクソノミー GET /api/taxonomies 全タクソノミー一覧 POST /api/taxonomies/:id/terms 用語追加 PUT /api/taxonomies/terms/:id 用語更新 DELETE /api/taxonomies/terms/:id 用語削除 機能記述 GET /api/functions 一覧 GET /api/functions/:slug 詳細取得 POST /api/functions 新規作成 PUT /api/functions/:slug 更新 DELETE /api/functions/:slug 削除 デジタルオブジェクト POST /api/informationobjects/:slug/digitalobject アップロード Note : 資料記述(Information Object)のCRUDは、既存の arRestApiPlugin が提供する POST/GET /api/informationobjects を使用します。 ...

AtoM(Access to Memory)のAPIを使って、オブジェクトを登録してみる

AtoM(Access to Memory)のAPIを使って、オブジェクトを登録してみる

概要 AtoM(Access to Memory)のAPIを使って、オブジェクトを登録する方法の備忘録です。 APIの有効化 以下にアクセスします。 /sfPluginAdminPlugin/plugins arRestApiPluginを有効にします。 APIキーの取得 以下に、APIキーを生成する方法が説明されています。 https://www.accesstomemory.org/en/docs/2.9/dev-manual/api/api-intro/#generating-an-api-key-for-a-user ユーザ名とパスワードでもAPI接続できるようですが、今回はREST API Keyを発行しました。 エンドポイント AtoMでは、「典拠レコード」や「機能」など、複数のメニューが提供されていますが、APIによって利用できるのは、以下のみのようです。 See the subsequent pages for more details on each endpoint, and available parameters. There are three endpoints available: Browse taxonomy terms Browse information objects Read information object Download digital objects Add physical objects この点は、ArchivesSpaceのほうが豊富なAPIが提供されており、軍配が上がるかもしれません。 https://archivesspace.github.io/archivesspace/api/ また、以下のソースコードを確認すると、CreateActionが可能なものは、informationobjectsとphysicalobjects、digitalobjectsに限定されているようでした。 https://github.com/artefactual/atom/tree/qa/2.x/plugins/arRestApiPlugin/modules/api/actions ただ機械的に一括登録を行いたい場面は、主にinformationobjectsだと考えられるため、これらの機能のみで十分かもしれません。 physical objectsの登録 以下のようなクラスを用意します。 #| export class ApiClient: def __init__(self): load_dotenv(override=True) self.url = os.getenv("atom_url") username = os.getenv("username") password = os.getenv("password") api_key = os.getenv("api_key") if api_key: self.headers = { "REST-API-Key": api_key, "Content-Type": "application/json" } else: # Basic 認証のヘッダーを作成 auth_string = f"{username}:{password}" auth_bytes = auth_string.encode('ascii') auth_b64 = base64.b64encode(auth_bytes).decode('ascii') self.headers = { "Authorization": f"Basic {auth_b64}", "Content-Type": "application/json" } def add_physical_objects(self, physical_objects): url = f"{self.url}/api/physicalobjects" print(url, self.headers, physical_objects) response = requests.post(url, headers=self.headers, json=physical_objects) # レスポンスを確認 if response.status_code in [200, 201]: print("物理オブジェクトが作成されました!") print(f"ステータスコード: {response.status_code}") print(f"レスポンス: {response.text}") # 作成されたオブジェクトの情報 result = response.json() print(f"作成された物理オブジェクトID: {result.get('id')}") print(json.dumps(result, indent=4)) else: print(f"エラー: {response.status_code}") print(f"レスポンス: {response.text}") 以下で実行します。 ...

AtoM(Access to Memory)をDockerで起動する

AtoM(Access to Memory)をDockerで起動する

概要 AtoM(Access to Memory)をDockerで起動する機会があったので、備忘録です。 マニュアル 以下に記載があります。 https://www.accesstomemory.org/es/docs/2.9/dev-manual/env/compose/ git clone -b qa/2.x https://github.com/artefactual/atom.git atom cd atom export COMPOSE_FILE="$PWD/docker/docker compose.dev.yml" docker compose up -d そして、以下を実行します。 docker compose exec atom php symfony tools:purge --demo これにより、63001ポートでAtoMが起動しました。 その他、マニュアルにはCompile Theme Filesの記述などがありますが、これを実行しなくても起動する場合と起動しない場合がありました。 日本語化 以下にアクセスして、日本語を追加します。 /settings/language そして、以下を実行します。 docker compose exec atom php symfony search:populate 結果、以下のように日本語が追加されました。 まとめ AtoMの利用にあたり、参考になりましたら幸いです。