概要

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が可能なものは、informationobjectsphysicalobjectsdigitalobjectsに限定されているようでした。

https://github.com/artefactual/atom/tree/qa/2.x/plugins/arRestApiPlugin/modules/api/actions

ただ機械的に一括登録を行いたい場面は、主にinformationobjectsだと考えられるため、これらの機能のみで十分かもしれません。

physical objectsの登録

以下のようなクラスを用意します。

#c|laesxsddpeeoAffrptilsupaieaupr#ieC_oesapfldrrefllialesisdlissindfrs_ae_npreei_.nwkps}:#aaas}p=toeppp#rpp:ppntduaoeieuuueh(nsrrrerrrrt_ormry_lBtttlyfuspiiisiiii:_tledkfahhhfs"reonnnunnnn(e=e.""s___.""i{lntttlttttsn===yhRCisbbhACcs,=s(((t((((evo:eEocty6euoaee"fffjffl(ooosaSnrt4atnllsr.""="s""fosss.dTtiedht_feeso)v...ge-ens=eoeo.lqtrn:egggerAngrrnbufuae.reeetsPt=bsitjr.etsd:rttteI-=az-elhsupuieeen=-Tas=aTc}ets:om{:dnnnvKyfuetyt/as_nprevvv({ep"t6{ipsad.c{sse{=((("ye{h4oe(pepo:re(srT"""a""u_.n"sirode.rperaupp::ssb":e/sse{sjeosutsaiet6:lp,trpssnpeoes_a"rr4"fh(ieoouso)mrskpaniefa,ypunsnnIlen_nweipann"pshrps(Dt.suaoy_pmgcBppiyl[oe):,sermr"kle.oalhcs,2"n.t.led)ei}edsiyai0)st{iat"""yc:neicslch0eernte))),a{c(caioae,.xeduxtpoatcblastsestiadu{iaj_d2t}un_}osetaoleoe0a"ltc"ns(hun_cbr1t)t=o)/w'_t/otjs]u.4djoabhjbse=:sg)esrsy_sj"cs_e)}odctboetect"n}ie6ncslo()""is4"t)fd'')}s.ei).")h}dd,:e"'ea))cd}oe"dr)es(,'ajsscoini='p)hysical_objects)

以下で実行します。

a#p}a{}phpiyi_s_ci"""c"lcnltl:siaaoyilelmcpe{un_eaen:"gtd"t"ts"a:i:.2l:=toa0ua"n"d1g"AT"Sd"Itp=-:h_:D-i0ep":0C{1"lht1l"Efy-N"i,x"s0oeai1nnmc"etpa}(ll)e_olbojceacttiso(np"h,ysical_data)

結果、以下のように登録されます。

information objectsの登録

親レコードの登録

defauriedrefldlss_prei=oeppp:ppnnsrrrrrffspiiiiio"eonnnnnr{ntttttms=s(((((aee"fffftlr.""""ifeso.qtnuua_ret:olsub}ts:{:j/s_rea.c{e{cppo:rsrtiodepes/se{sos(itrpnpsn(ieosoefunsnenlorps.sfrl[oese,m,2"n.t.a0)statith0eetenie,.xuxfoaststond2t}_}roe0a"c"mbr1t)o)ajs]udte=:seics_}otec"nslo)_"fdo.ebh}je"ea)cdtesr)s:,json=information_objects)

以下を実行します。

p}aaprie_n"""cttill:_ideidteve{alnen:"tetltia"i_.2d:foa0"=ifd1:"e_d4{rd_5"ei3:sn,cf""rosPirlApmu"Rtag,Eit"Noi:Tno"-"nf0:_t0ob1"b7"Cj-,oe3lcbltzesdc(-tp8ia7or5ne9"n",t,_"dpaatrae)nt_id":1}

以下のように登録されました。

identifierを用いた検索

この処理により、登録済みのレコードのslugを取得することができます。

deffup}rriraeenlrstdapu_=m""orisssnnnfqfsf"=00ero{""ers{::=smepali"rotfdieni.edqsouneuenrtne._litsjo}fitsb/ifsojaei.nepreg(ci,re)t/"tsi,((nusfreollr,fm,ahteiiadodenenortbsij=fesiceetlrsf)".:headers,params=params)

以下のように利用します。

iip{}dnrefinont_t""]io(trfbjoeijstseeoau{}rcnllt."t=sd:su""""""=m1:rstlPp,elieAas[futvRp(egleEiir"elN_ne:"_Tcfn:o-loc"f0i_ef"_0eo_t\d1nbcbue"tjo78s.ed-9cfce3arit"bains:z\pd,dut_"-3iiiP80onnA7bnfdR53"oeE9\:rnN"umtT,3"a=-0Ct40eoi)0clo)1\ln"ue_,3co0tbaijfoe\ncu"t3s0(bi7d\eun3t0ief7i\eur3)0f3",

クエリsq0sf0は以下を参考にします。

https://www.accesstomemory.org/en/docs/2.9/dev-manual/api/browse-io/#api-browse-io

子レコードの登録

親レコードのslugftb7-3bzd-8759とわかったので、以下により登録します。

#c}ahpiil_d""""c_tilpl:dideaiatevre{tlneen:"aetlnti"i_t.2d=:fo_a0"ifsd1:{"e_ld4rdu_7"egi1:s"n,c:f""ros"Ci"rl,HpfmuIttagLibt"Do7i:-n-o"0"3nn0:b_s8zoa""dba,F-j-i8eyl7cwe5ty"9sw,"(-c2hsixl7d"_,d"aptaar)ent_id":453}

結果、以下のように、親レコードの下位レコードとして、子レコードが登録されました。

デジタルオブジェクトの登録

defaf#wdiidlt_ehd_f}d}dieinoiaoflgaplt_simeeardetens''''eodp:ppa(f=tius_orrrl=f=iinspr_iii_il{tfaoernnnool{elognsetttbse'eresps(((j._:'m'eoufffepp:a:nl"""caa(t=sttttffi'eshhiioRr.=(.,llneessbeeOfqtdea'__beuaolsrnnjret_febaaeesur,n'mmcntse:a)eetcs_ssm,,Se.hfdcp{leal'peiaoodu(sfuoaltdnogf,gsdeaes_,if'#tes=e:rl:':(r=di.efeaMfsfanjI:si_psa"=itsDplppls{sla[o{oealutsee)2n{dn_tigeels0(dosphc,rlf,0)o_ea)af.,_r.tt.hrethiue2ese)ora0spx:nld1uot/R}e]ln}pe/r:ts"dfas.e)fep,g.'ries)e/tt,nd#(aci'tegCiuiodstn'_at)cle}oon"dbt)ej-}eT"cy)tpse",

ただし、以下のように実行してもエラーが発生してしまいました。

fsailpluieg__cp=lait"ehnnst=a.aa"-d_yd0w_1yd.wip-gd2ifst"xa7l"_objects(slug,file_path)

この点については、引き続き調査したいと思います。

まとめ

AtoM(Access to Memory)のAPIの使用例について紹介しました。

簡単に調べた限りでは、information objectsのみ、API経由で削除することができるなど、APIによる機能提供が限定的な印象を受けました。

APIによる利用を前提にする場合には、AtoM以外の選択肢を考慮するのもよいかもしれません。

AtoMやArchivesSpaceの導入検討にあたり、参考になりましたら幸いです。