LEAF WriterとGakuNin RDMを用いたTEI/XMLファイルの編集環境の試作

概要 LEAF WriterとGakuNin RDMを用いたTEI/XMLファイルの編集環境の試作を行いましたので、備忘録です。 参考 以下の記事で、LEAF WriterをNext.jsから使用する方法を紹介しました。 特に、以下のnpmパッケージを使用しています。 https://www.npmjs.com/package/@cwrc/leafwriter 上記で編集対象とするTEI/XMLファイルの入出力にあたり、GakuNin RDMを使用してみます。GakuNin RDMのAPIをJavaScriptから使用する方法について、以下も参考になりましたら幸いです。 使い方 以下がプロトタイプシステムのURLです。(色々と不具合が含まれる点にご注意ください。) https://rdm-leaf-editor.vercel.app/ UIはClaude 3.7 Sonnetに作成してもらっています。 「サインイン」ボタンを押すと、認証画面に進むので、ログインします。 ログイン後、リダイレクトされ、プロジェクトの一覧が表示されます。 TEI/XMLファイルが含まれるディレクトリまで移動します。ファイル名に「.xml」が含まれる場合、「Leaf Writer」の列に「編集」ボタンが表示されます。 LEAF Writerの編集画面に遷移するので、テキストを編集します。作業が完了したら、画面右上の「保存」ボタンを押します。 GakuNin RDMのUIから確認してみると、バージョンごとに保存されていることが確認できます。 実装 GakuNin RDMからのファイルの取得および更新は以下で行っています。 e ) } e ) } x : x : p u a c } i } r p u c a c c c } i } フ o r c P o ) f e フ o r o c o P o o ) f ァ r l c r n m h } ; t ) t ァ r l n c n r n n m h } b ; c c c t イ t : e o s e e , ( h ; u イ t : t e t o s s e e , o ( o o o h ル s m t t a A ! r ` r ル e s e m t t t a A d ! n n n r の a s s i h d u r o フ n の a s n s n i h d u y r s s s o 内 s t T s r o e t e w ァ 内 s t t T t s b r o e t : e t o o w 容 y r o e e d r h s イ a 容 y r : o T e l e d r h s l l を n i k < s : s o p n ル w を n i k y < o s : s o b p e e e n 取 c n e s p : r o e の a 更 c n s e p v b p : r l o r . . e 得 g n t o " i n w 取 i 新 g t n e o o " i o n r e e w す f , : r n G { z s 得 t す f , r : : i = n P { z b s o r r る u i s E a e E に る u i d s U a , e r r r E n s n e T t . r 失 r n n s s > n e T t . T o o r c t g " i o r 敗 e c g t t e " i o e r r r t r > = , o k o し s t , r r { w = , o k x ( ( o i i n ) r ま p i i i n ) t " " r o n { a : ( し o o n n B a : 保 レ ( n g w { た n n g g l w { = 存 ス ` a ` 。 s , o a ` に ポ 保 f i B ス e u = b i B a 失 ン 存 e t e テ . p ( t e w 敗 ス に t a ー t d " [ a a し : 失 c f r タ e a a c f r i ま " 敗 h e e ス x t p o e e t し , し F t r コ t e p n t r た ま i c ー ( F l t c r 。 e し l h $ ド ) i i e h $ e ス r た e ( { : ; l c n ( { s テ r 。 C u a e a t u a p ー o ス o r c $ C t ] r c o タ r テ n l c { o i , l c n ス T ー t , e r n o , e s コ e タ e s e t n { s e ー x ス n { s s e / { s . ド t コ t T p n x t T t : ) ー ( o o t m y o e " ; ド k n ( l p k x , : e s " e e t n e : n ( r $ } . } ) e { ` s c ` ; s r , t o , p e a n o s t t n p u e s o s n e n } t . s ` T s e y t . p a s e t t u a } s t ) ) u ; ; s } ` ) ; 上記で使用するURLは以下です。 ...

2025年3月21日 · 15 分 · Nakamura

GakuNin RDM(OSF)のAPIで、フィルタを使う

概要 GakuNin RDM(OSF)のAPIで、フィルタを使う方法の備忘録です。 対象データ 以下のようなファイル構造を持つ「NII Storage」を対象にします。 APIでは、以下のようなURLでアクセスできるものを対象にします。 https://api.rdm.nii.ac.jp/v2/nodes/wzv9g/files/osfstorage/ JSONデータの例は以下です。 { } " ] " } d { } { } { } , l " " " " " } a " " " } " } " } , " " " } " } " } , " " " } " } " } i f l p n m " " t i t a " " " " " " " " " " " " } " " " , r " } " } " } " } " } " } , l " " " " " " " " i t a " " " " " " " " " " " " } " " " , r " } " } " } " } " } " } , l " " " " " " " " i t a " " " " " " " " " " " " } " " " , r " } " } " } " } , l " " " " " " n i a r e e t p a d y t g c n k p s p m l d d e " } " , t c c e p " } " } , v " } , c " } , m " } , n " } " } , t " } " } i i m u d d r h s d y t g c n k p s p m l d d e " } " , t c c e p " } " } , v " } , c " } , m " } , n " } " } , t " } " } i i m u d d r h s d y t g c n k p s p m l d d e " } , t c c e p " } " } , f " } , n " } " } , t " } " } i i m u d n s k r s e x t o e " " p t u h a i a i r a a a a x h " " , d a u u l a l " } , d " " e l " } o l " } e l " } o l " } , d " " a l " } , d " " n n o p e o e t e " p t u h a i a i r a a a a x h " " , d a u u l a l " } , d " " e l " } o l " } e l " } o l " } , d " " a l " } , d " " n n o p e o e t e " p t u h a i a i r a a a a x h " " a u u l a l " } , d " " i l " } o l " } , d " " a l " } , d " " n n o p e e e s s t v t a t r : : e r i e m n t z o t s t t t a m s o g r r a r i r " " a i t r i r " " m i r " " t i r " " d i r " " a i t r i r " " } a t i k f v l l w n m l : e r i e m n t z o t s t t t a m s o g r r a r i r " " a i t r i r " " m i r " " t i r " " d i r " " a i t r i r " " } a t i k f v l l w n m l : e r i e m n t z o t s t t t a m s g r r a r i r " " a i t l i r " " d i r " " a i t r i r " " } a t i k f v l l w l " t " " " " a _ " i d c e d h e v e t e e r s d h w s r r t e n e h m t d y s n e h m m n e h m a n e h m e n e h m t d y g n e h m " t y d s o e o e n d l f " i d c e d h e v e t e e r s d h w s r r t e n e h m t d y s n e h m m n e h m a n e h m e n e h m t d y g n e h m " t y d s o e o e n d l f " i d c e d h e v e t e e r s d h s r r t e n e h m t d y e n e h m e n e h m t d y g n e h m " t y d s o e o e _ f : " : : : : l p [ " : b " k " " " " i r _ _ _ a h 5 a n " e e i n k l r e a " p i k l r e e k l r e d k l r e " k l r e a " p e k l r e t a p " " " " a t l e " " " : b " k " " " " i r _ _ _ a h 5 a n " e e i n k l r e a " p i k l r e e k l r e d k l r e " k l r e a " p e k l r e t a p " " " " a t l e " " " : b " k " " " " i r _ _ _ a h 5 a " e e i n k l r e a " p s k l r e " k l r e a " p e k l r e t a p " " " " a t f " : " a 6 u : o : : : : d i t m c " e " 2 l : n n o t s a e t " : e o s a e t n s a e t a s a e t : s a e t " : e t s a e t y " e : : : : d e o r : : 6 u : o : : : : d i t m c " e " 2 l : n n o t s a e t " : e o s a e t n s a e t a s a e t : s a e t " : e t s a e t y " e : : : : d e o r : : 6 u : o : : : : d i t m c " e " 2 : n n o t s a e t " : e " s a e t : s a e t " : e t s a e t y " e : : : : d e o : { n n n { : g 7 " t u e a o o r : s : 5 o t t n _ " t f a : " n " t f a t " t f a t " t f a " t f a : " " " t f a p : " " " a " 7 " t u e a o o r : s : 5 o t t n _ " t f a : " n " t f a t " t f a t " t f a " t f a : " " " t f a p : " " " a " 7 " t u e a o o r : s : 5 t t n _ " t f a : " : " t f a " t f a : " " " t f a p : " " " l n u u u e c f e " t " " " 9 r l u d e " 6 a [ _ _ s f : e " " " : s : e " " s : e " " a : e " " { : e " " " : : : e " " e : " { " " : : d : " " d f e " t " " " 7 r l u d e " 6 a [ _ _ s f : e " " " : s : e " " s : e " " a : e " " { : e " " " : : : e " " e : " { " " : : d : " " d f e n t " " " n r l u d e " 6 [ _ _ s f : e " " " : : e " " { : e " " " : : : e " " e : " { " " : : d " u l l l 3 " e i s u " I f / 5 " i c i a { : " " d ] u v h o d : : { 6 " d : : " d : : _ d : : d : : { w d : : " { w h h " h h a i s b " 0 f / 9 " i c i a { : " " d ] u v h o d : : { 6 " d : : " d : : _ d : : d : : { w d : : " { w h h " h h a i s u " t f u " i c i a { : n " ] u v h o d : : { 6 { d : : d : : { w d : : " { w h h e h l l l l , : 5 l " n : M i 6 2 : z h f t e : s , s e i l { " 7 " : { " : { " r { " { " z " { { " : " z t t " " : " t t 8 l " 4 : 1 i 6 3 : z h f t a : s , s e i l { " 7 " : { " : { " r { " { " z " { { " : " z t t " " : " t t c l " l : e 6 l : z h f t u : , s e i l { " 7 " { " { " z " { { " : " z t t " " r t l , , , b e : g G l 7 1 e e i e { 5 " e r p d : " { 4 f : " { : " { e : " { : " { v n : " { n v t t h h h t t 4 e : 5 . l 7 9 e e i e { 3 " e r p d : " { 4 f : " { : " { e : " { : " { v n : " { n v t t h h h t t a e : l s l 7 l e e i e { l e r p d : " { 4 f : " { : " { v n : " { n v t t h h " t , 1 0 s d n _ e c 0 " d d e d 7 " : r s s e h } 0 i { h } { h } c h } h } 9 o h " o 9 p p t t " t p p 7 s m n x e d 7 " d d e d 8 " : r s s e h } 0 i { h } { h } c h } h } 9 o h " o 9 p p t t " t p p 9 s , n t d d , " d d e d l n r s s e h } 0 i h } h } 9 o h " o 9 p p t t : p 0 b " { 3 u 8 " e 7 o _ " d " 1 5 _ i " r { t 3 l { t { t o { t { t g d { t n d g s s t t h t s s 4 " { p u m " a , o _ " d " 2 8 _ i " r { t 3 l { t { t o { t { t g d { t n d g s s t t h t s s 9 " { u " e a o _ " d " , u _ i " r { t 3 l { t { t g d { t n d g s s t t s 2 , " l 2 , 5 , s p : " : 9 e 0 c o : " t 4 e t t r t t " e t o e " : : p p t p : : 1 , " l l , 8 s p : " : 4 3 0 c o : " t 4 e t t r t t " e t o e " : : p p t p : : 1 , l , r c s p : " : l c o : " t 4 e t t " e t o e " : : p p " : f , l 6 b f a : 2 2 a n : p a s p p d p p , s p d " / s s t s / 6 , l " 4 f a : b d a n : p a s p p d p p , s p d " / s s t s / 6 l " a f a : l a n : p a s p p , s p d " / s s h / e , 9 0 s t n " b 8 n " { s 4 " s s s s s " s e , / : : p : / 0 , , 7 s t n " 2 1 n " { s 4 " s s s s s " s e , / : : p : / 0 , , 9 s t n n n " { s 4 " s s " s e , / : : t / 4 . b t h u " 2 3 2 _ : { : 8 : : " : : : " a f / s r a 0 4 t h u " 2 f 8 _ : { : 8 : : " : : : " a f / s r a 0 9 t h u n u _ : { : 8 : : : " a f / t a 7 p 2 o " l 2 0 0 1 c / 3 / / : / / / p i / : d p 0 1 o " l 2 0 4 a c / 3 / / : / / / p i / : d p 0 1 o " l u l c / 3 / / / p i / p p 4 n f r : l 0 2 1 8 o 1 / b / / / / / i l f f m m i 9 6 r : l 0 2 9 6 o 5 / b / / / / / i l f f m m i 9 6 r : l l l o 1 / b / / / i l f f s i 0 g e a , 2 5 0 7 m a d a a { a a a . e i i / f . . 0 0 a , 2 5 4 e m a d a a { a a a . e i i / f . . 0 0 a , l , m a d a a a . e i i : . 0 " 4 g " 5 - 3 0 m p c p p p p p r s l l r r n r 0 0 g " 5 - 7 5 m p c p p p p p r s l l r r n r 0 0 g " , m p c p p p r s l l r 1 , 7 e / - 0 a 6 e i 2 i i i i i d . e e d . i d 1 0 e / - 0 1 2 e i 2 i i i i i d . e e d . i d 1 0 e / e i 2 i i i d . e e / d 0 4 " I 0 3 7 7 n . 0 . . . . . m r s s m r i m 0 9 " 0 0 3 8 a n . 0 . . . . . m r s s m r i m 0 9 " t n . 0 . . . m r s s f m f 0 , M 3 - e a t r 0 r r r r r . d . . . d . . 9 0 , 1 3 - 4 5 t r 0 r r r r r . d . . . d . . 9 0 , e t r 0 r r r . d . . i . 7 0 G - 1 9 5 " d 1 d d d d d n m r r n m a n e 0 . - 1 2 2 " d 1 d d d d d n m r r n m a n e 0 s " d 1 d d d n m r r l n 5 1 _ 1 0 9 3 : m 0 m m m m m i . d d i . c i 0 1 x 1 9 d 5 : m 0 m m m m m i . d d i . c i 1 1 t : m 0 m m m i . d d e i 3 0 8 0 T 5 a . 8 . . . . . i n m m i n . i 4 0 m 9 T 1 9 . 8 . . . . . i n m m i n . i d 0 / . 8 . . . i n m m s i c f 2 T 0 5 a t n b n n n n n . i . . . i j . 5 9 l T 0 0 7 t n b n n n n n . i . . . i j . 9 9 " t n b n n n . i . . . . 0 7 6 0 3 9 a r i 8 i i i i i a i n n a i p a 4 e " 1 8 4 e r i 8 i i i i i a i n n a i p a 8 e , r i 8 i i i a i n n r a " 5 9 3 : 7 b u i a i i i i i c . i i c . / c " 0 , 3 : 6 b u i a i i i i i c . i i c . / c " 1 u i a i i i c . i i d c , 3 . : 2 c 0 e . 9 . . . . . . a i i . a w . , 4 : 4 a a e . 9 . . . . . . a i i . a w . , d e . 9 . . . . a i i m . c p 2 2 e f , a 5 a a a a a j c . . j c z j 5 2 6 2 c , a 5 a a a a a j c . . j c z j 9 , a 5 a a a j c . . . j 0 n 2 : a 1 c " c c c c c p . a a p . v p 4 4 : a 6 c " c c c c c p . a a p . v p 8 c " c c c p . a a n p " g : 5 e f . , . . . . . j c c j 9 / " : 4 b f . , . . . . . j c c j 9 / / . , . . . j c c i / , " 5 1 a 0 j j j j j j v p . . d p g , 2 4 e a j j j j j j v p . . d p g " j j j j v p . . i v , 1 . 3 0 p p p p p p 2 j j o / / 2 7 . 6 1 p p p p p p 2 j j o / / 2 , p p p p 2 j j . 2 . 7 9 d / / / / / / v p p w r f / . 6 2 e / / / / / / v p p w r f / / / / / v p p a / 7 5 c a v v v v v v f 1 / n e i f 8 3 3 b v v v v v v f 1 / n e i f v v v v f 1 / c f 5 0 b a 2 2 2 2 2 2 i v l n l i 6 6 2 8 2 2 2 2 2 2 i v l n l i 2 2 2 2 i v . i 0 5 b e / / / / / / l r 1 1 d e l 8 1 8 a / / / / / / l r 1 1 d e l / / / / l r 1 1 j l 5 5 f f f f n f n n e e / a e s e 0 0 4 1 f f n f n n e e / a e s e f n n n e e / / p e 5 0 " b i i o i o o s s r r d r / s 7 7 " 3 i i o i o o s s r r d r / s i o o o s s r r / s 0 Z , 9 l l d l d d / o e e / ? o / 8 Z , 7 l l d l d d / o e e / ? o / l d d d / o e e v / Z " 5 e e e e e e 6 u s s u u s 6 Z " e e e e e e e 6 u s s b u s 6 e e e e 6 u s s 1 6 " , 1 s s s s s s 7 r o o n r f 7 " , d s s s s s s 7 r o o 4 r f 7 s s s s 7 r o o / 7 , 9 / / / / / / c c u u g l s c , 6 / / / / / / d c u u 5 l s d / / / / d c u u r d d 6 6 w 6 w w e e r r d = t e e 6 6 w 6 w w a e r r m = t a 6 w w w a e r r e a 6 7 7 z 7 z z 5 s c c 3 h o 5 1 7 7 z 7 z z 8 s c c p h o 8 7 z z z c s c c s c 0 4 c v c v v b / e e / t r b e 4 d v d v v 4 / e e / t r 4 4 v v v a / e e o a b 0 e 9 e 9 9 0 w s s " t a 0 6 0 a 9 a 9 9 7 w s s " t a 7 0 9 9 9 9 w s s u 9 0 3 5 g 5 g g b z / / , p g b 4 3 8 g 8 g g 4 z / / , p g 4 3 g g g 9 z / / r 9 6 4 b / b / / 2 w w s e 2 b 4 4 / 4 / / 1 w w s e 1 4 / / / 1 w w c 1 4 a 0 c 0 ? " f 9 z z : f 9 a 7 c 7 ? " 6 9 z z : 6 a f ? " 6 9 z z e 6 8 4 b o b f , e g v 6 e c 4 4 o 4 f , 0 g v 6 0 4 i f , 0 g v s 0 3 8 2 m 2 o 4 / 9 9 / 7 4 0 8 1 m 1 o 0 / 9 9 / 7 0 8 l o 0 / 9 9 / 0 1 3 f m f r 7 p g g r c 7 e 3 6 m 6 r 0 p g g r d 0 3 e r 0 p g g w 0 4 b e e e m 4 r / d e 4 2 b 0 e 0 m 9 r / d a 9 b s m 9 r / z 9 0 d 4 n 4 a 0 p p m 5 0 c d 0 n 0 a 0 p p m 8 0 d / a 0 p p v 0 3 c 7 t 7 t 0 v r r . b 0 1 c 0 t 0 t 0 v r r . 4 0 c o t 0 v r r 9 0 e 2 4 s 4 = 1 i o o n 0 1 a 2 9 s 9 = 1 i o o n 7 1 2 s = 1 i o o g 1 6 0 0 / 0 j 0 d v v i b 0 0 0 0 / 0 j 0 d v v i 4 0 0 f j 0 d v v / 0 7 0 0 ? 0 s f e i i i 2 f b 0 0 ? 0 s 9 e i i i 1 9 0 s s 9 e i i p 9 1 1 1 f 1 o 7 r d d . f 7 4 1 1 f 1 o e r d d . 6 e 1 t o e r d d r e 6 0 0 o 0 n 5 s e e a e 5 9 0 0 o 0 n 0 s e e a 0 0 0 o n 1 s e e o 1 6 8 f r f " 3 / r r c 4 3 c 8 9 r 9 " 4 / r r c 0 4 8 r " d / r r v d 2 b 7 m 7 , c o s s . 7 c f b e m e , 5 o s s . 0 5 b a , 9 o s s i 9 c 8 5 a 5 0 s / j 4 0 7 8 0 a 0 4 s / j 9 4 8 g 8 s / d 8 f a 3 t 3 / f o p 0 / 4 a 4 t 4 / f o p 0 / a e / f o e / b 9 c = c " s s s / 0 " 6 9 5 = 5 " s s s / 0 " 9 / " s s s r " c 5 0 j 0 , t f f d 1 a 5 4 j 4 , t f f d 1 5 6 , t f f s f / / s / o s s o 0 7 / / s / o s s o 0 / 7 o s s / 6 ? v o m r t t w f 7 ? v o m r t t w 9 ? d r t t o f f e n e a o o n 7 7 f e n e a o o n e f a a o o s 4 o r & t g r r l 5 d o r & t g r r l 0 o c g r r f 1 r s f a e a a o 3 0 r s f a e a a o 4 r a e a a s f m i i d / g g a c a m i i d / g g a 5 m 9 / g g t " a o l a 6 e e d 0 " a o l a 6 e e d 4 a 9 6 e e t n t t 7 / / / " t n t t 7 / / / " t 1 7 / r = s e a c 6 6 u , = s e a d 6 6 b , = 6 d 6 6 a j / r _ e 7 7 n j / r _ a 7 7 4 j 0 a 7 7 g s ? % r 5 c c g s ? % r 8 d d 5 s 0 c d d e o f 5 e b e e d o f 5 e 4 a a m o 0 a a a / n o B c 0 5 5 3 n o B c 7 8 8 p n 9 9 c c 6 " r t o b b b / " r t o 4 4 4 / " 0 9 a a 7 , m a r 2 0 0 ? , m a r 1 7 7 ? , 0 1 9 9 d a r d f b b d a r d 6 4 4 d 1 6 9 9 a t g s e 2 2 i t g s 0 1 1 i 0 0 1 1 c = e / 4 f f r = e / 0 6 6 r 9 0 6 6 a j t ? 7 e e e j t ? 0 0 0 e e 0 0 0 9 s % f 4 4 4 c s % f 9 0 0 c 1 9 0 0 9 o 5 o 0 7 7 t o 5 o 0 0 0 t d 0 0 0 1 n D r 0 4 4 % n D r 0 9 9 % 9 0 9 9 6 " = m 1 0 0 2 " = m 1 0 0 2 8 1 0 0 0 , u a 0 0 0 6 , b a 0 0 0 6 / 0 0 0 0 n t f 1 1 m 4 t 9 1 1 m ? 9 1 1 0 g = 7 0 0 o 5 = e 0 0 o f e 0 0 9 d j 5 f f d m j 0 9 9 d o 1 9 9 0 3 s 3 7 7 e p s 4 e e e r d e e 0 " o c 5 5 = " o 5 0 0 = m 9 1 1 1 , n 0 3 3 r , n 4 4 4 r a 8 d d 0 " " c c e " " 5 5 e t / 9 9 9 , , 0 0 n , , 4 4 n = " 8 8 e " " d " " d j , / / 1 , , e , , e s " " d r r o , , 9 " " n 8 , , " / , ? k i n d = f o l d e r " , 検索例 JSON:APIに準拠しているので、filterパラメータを使用します。 ...

2025年3月19日 · 39 分 · Nakamura

Nuxt Content: Cannot find name 'queryContent'.への対応

概要 Nuxt Contentにおいて、「Cannot find name ‘queryContent’.」というエラーが発生しましたので、対処方法に関する備忘録です。 原因 2025/1/16にNuxt Content v3がリリースされたようです。 https://content.nuxt.com/blog/v3 これにより、queryContentはqueryCollectionなどに変更されたようです。 対処方法 以下に記載があるように、content.config.tsを作成した上で、queryCollectionなどを使用するように変更する必要があるようです。 https://content.nuxt.com/blog/v3#️-content-collections 上記の対応により、エラーを解消できました。 まとめ Nuxt Content v2からv3への移行にあたり、参考になりましたら幸いです。

2025年3月19日 · 1 分 · Nakamura

AWSのRoute 53で設定したレコードを、さくらレンタルサーバで使用する(共有SSL)

概要 AWSのRoute 53で設定したレコードを、さくらレンタルサーバで使用する備忘録です。加えて、Let’s Encryptを用いて、無料SSLを使用します。 さくらレンタルサーバ ドメイン/SSLにアクセスして、「ドメイン新規追加」ボタンを押します。 画面下部の「他社で取得したドメインを移管せずに使う」の「追加」ボタンを押します。 独自ドメインを入力して、「追加」ボタンを押します。以下の例では、「aaa.example.org」としています。 追加後、追加したドメイン名の「設定」>「DNSレコード設定」を押し、AレコードのIPアドレスを控えます。 AWSのRoute 53 先ほど控えたIPアドレスを使って、レコードを追加します。 さくらレンタルサーバ SSLの設定を行います。 「SSL証明書の種類を選択」ボタンを押します。 「Let’s Encrypt (無料SSL)」の「利用する」ボタンを押します。 設定後、以下のような画面になります。少し待ちます。 その後、ドメイン設定において、以下のように設定します。 さらに、それぞれのドメインに対して、「WEB公開フォルダ」を設定することで、ルートディレクトリを変更することができました。 まとめ AWSのRoute 53以外でも同様の手続きを行うことができると思います。 間違っている点もあるかもしれませんが、さくらレンタルサーバでの独自ドメインおよびSSLの利用にあたり、参考になりましたら幸いです。

2025年3月18日 · 1 分 · Nakamura

Miradorで画像を表示し、CETEIceanでテキストを表示するサンプルアプリ

概要 TEI/XMLファイルを読み込み、Miradorで画像を表示し、CETEIceanでテキストを表示するサンプルアプリを作成しました。以下のURLからお試しいただけます。 デモサイト https://nakamura196.github.io/ceteicean-mirador/ 背景 これまでにも、同様の機能を提供するアプリケーションを開発してきました。 Next.js を使用した実装例 XSLT を使用した実装例 今回は、HTMLとプレーンなJavaScriptのみを使用して実装する方法をご紹介します。 対象データ 以下の校異源氏物語テキストDBを対象とします。 https://kouigenjimonogatari.github.io/ 実装方法 ソースコードは以下のリポジトリで公開しています。 https://github.com/nakamura196/ceteicean-mirador 実装のポイント 1. CETEIcean の behaviors を利用した pb タグの処理 以下のコードでは、CETEIcean の behaviors を利用して pb タグのクリック時の挙動を定義しています。 c } t ) . t } ; a e , d i g f p } d : r i b B a g : l i } c i } c p p } r e { 不 p u p e f o f o b b ) e h 要 h r b f t p n c p n . . c i } ; t a な i e タ u 属 ( b c s ( o b ペ s t ク a o f u v 要 c : グ n p 性 e . o t c n . ー t e リ d n c i } r i 素 : の c b を l s r o s s ジ x ッ d s ( o f n o を 処 t 引 . e r c r t e 番 p t ク E t z n c i } r 非 理 i = き h t e o r t 号 a C イ v o s ( o f p s 表 o 継 a A s r e z A を g o ベ e z n t z n g b ( 示 = n d ぐ s t p r s o t 表 e n ン n o e o s ( o ; { = > o A t 属 e p n t 示 N t ト t n I z n t s T > ( c t r 性 s ) e r u e を L e d o e u o d e u t i か p I i m n 追 i I ) n E s r P d o l m r b ら { d b t 加 s d e l u f a o c ) e i u z = u = t { E e r a g c u n b t o = t = e = l m f c e u m { t u e n e e e n e e a e ( m e . t ( e l c ( l ` e t m n c E s e n c e " I . o " . [ r h e t e l u n t r ( n d g r d g P ( i n ) E e r t . e " " を e r a e a " s t l m f . c a n , 取 t e t t g c . { e e a c r t " 得 A s a A e l g = m n c r e e ) e t p - t i e e t e e a E ) l t . z t $ c t d n E a t l . r r o r { k A o t & l t e e { g i e n i p " t c & e e D m e b p e b a , t u = m D o e t u l - u g r m s e o c n A t a i t e f i e z u n c u t t e c d e N u b n o r t u m ( t ( e " ( u n u t n f . m e " r " ( , " m c t . e a g e n t i c ' n } t e q E c e n t e b o # z " ] i ( u l e t t F i u r ' o ) ` o " e e E A F r - t r , n ; n d r m l t r a p e e e ( a y e e t a g b ( s I ) t S n m r g m " " p d a e t e i m e ) n " ) ) " { - l . n b e n ; " ) ; ; " z e c t u n t ) ; ; o c l . t t ( ) n t o h e ( ) ; e o s a ( ) , - r e s " , i ( s A s d ` t t a " t ( t m ) e " r e ; i t i A - e b s z i u " o - t ) n s e ) e u ( ; [ r " i f s d a a = c m " e e $ " A { ) s z ; " o ) n ) e I { d } " ] ` ) ; 2. Mirador でのページ遷移処理 pb タグをクリックした際に、TEI/XML ファイルから Canvas の URI を取得し、Mirador のページ遷移を実行します。 ...

2025年3月14日 · 6 分 · Nakamura

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の登録 以下のようなクラスを用意します。 # c | l a e s x s d d p e e o A f f r p t i l s u p a i e a u p r # i e C _ o e s a p f l d r r e f l l i a l e s i s d l i s レ s i n d f r s _ a e _ n p ス r e e i _ . n w k p s } : # a a a s } p = t o ポ e p p p # r p p : p p n t d u a o e i e u u u e h ( n ン s r r r e r r r r t _ o r m r y _ l B t t t l y f u s ス p i i i 作 s i i i i : _ t l e d k f a h h h f s " r e を o n n n 成 u n n n n ( e = e . " " s _ _ _ . " " i { l 確 n t t t さ l t t t t s n = = = y h R C i s b b h A C c s , = 認 s ( ( ( れ t ( ( ( ( e v o : e E o c t y 6 e u o a e e " f f た f j f f l ( o o o s a S n r t 4 a t n l l s r . 物 " " オ = " s " " f o s s s . d T t 認 i e d h t _ f e e s 理 ス レ ブ 作 o エ レ ) v . . . g e - e 証 n s = e o e o . l q t オ テ ス ジ r 成 n ラ ス : e g g g e r A n の g r r n b u f u a ブ ー ポ ェ e さ . ー ポ r e e e t s P t ヘ = b s i t j r . e t ジ タ ン ク s れ d : ン r t t t e I - ッ = a z - e l h s u ェ ス ス ト p た u ス i e e e n = - T ダ a s = a T c } e t s ク コ : の o 物 m { : d n n n v K y ー f u e t y t / a s _ ト ー 情 n 理 p r e v v v ( { e p を " t 6 { i p s a d . c が ド { 報 s オ s e { = ( ( ( " y e 作 { h 4 o e ( p e p o 作 : r e ブ ( s r T " " " a " " 成 u _ . n " s i r o d 成 e . ジ r p e r a u p p : : s s b " : e / s s e さ { s j ェ e o s u t s a i e t 6 : l p , t れ r p s ク s n p e o e s _ a " r r 4 " f h ( i ま e o o ト u s o ) m r s k p a n i e f a , y p u n し s n n I l e n _ n w e i p a n n " p s h r た p s ( D t . s u a o y _ p m g c B p p i y l [ ! o e ) : , s e r m r " k l e . o a l h c s , 2 " n . t . l e d ) e i } e d s i y a i 0 ) s t { i a t " " " y c : n e i c s l c h 0 e e r n t e ) ) ) , a { c ( c a i o a e , . x e d u x t p o a t c b l a s t s e s t i a d u { i a j _ d 2 t } u n _ } o s e t a o l e o e 0 a " l t c " n s ( h u n _ c b r 1 t ) t = o ) / w ' _ t / o t j s ] u . 4 d j o a b h j b s e = : s g ) e s r s y _ s j " c s _ e ) } o d c t b o e t e c t " n } i e 6 n c s l o ( ) " " i s 4 " t ) f d ' ' ) } s . e i ) . " ) h } d d , : e " ' e a ) ) c d } o e " d r ) e s ( , ' a j s s c o i n i = ' p ) h y s i c a l _ o b j e c t s ) 以下で実行します。 ...

2025年3月12日 · 16 分 · Nakamura

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

概要 AtoM(Access to Memory)をDockerで起動する機会があったので、備忘録です。 マニュアル 以下に記載があります。 https://www.accesstomemory.org/es/docs/2.9/dev-manual/env/compose/ g c e d i d x o t p c a o k c t r e l o t r o m n C c e O o M m - P p b O o S s q E e a _ / F u 2 I p . L x E - = d h " t $ t P p W s D : / / d / o g c i k t e h r u / b d . o c c o k m e / r a r c t o e m f p a o c s t e u . a d l e / v a . t y o m m l . " g i t a t o m そして、以下を実行します。 ...

2025年3月12日 · 2 分 · Nakamura

ピラミッドTIFFの作成において、ImageMagickがうまく動作しないケースがある?

概要 IIIFの画像配信に向けたピラミッドTIFFの作成において、ImageMagickがうまく動作しないケースがあり、調査してみました。 参考 以下のようなページで、変換方法が説明されています。 https://samvera.github.io/serverless-iiif/docs/source-images#creating-tiled-tiffs Using the VIPS command line # v # v i i F p F p & & o s o s & & r r t e v r a i a x i m f t p 3 f s r s t - s o a e c a u c t m h v r t i p a e c _ f _ n e b f i n s a s m e o i n a a l u m d v g r a e e s c g s . o e e o t v u _ u e r i w r m c m i c p e a t e _ g h _ i i e i m m . a m a a t n a g g i g e e f a e . l . v o p t u h i o t a f u p t u c t p t h e u _ a m t i n p _ m n _ i a e i m g l m a e a g . g e t e . i . t f v i f 0 - t - i - t l n i e l 3 e - \ p - y p r y a r m a i m d i d - c - o c m o p m r p e r s e s s i s o i n o n j p j e p g e g - t - i t l i e l - e w - i w d i t d h t h 2 5 2 6 5 6 - t - i t l i e l - e h - e h i e g i h g t h t 2 5 2 6 5 6 \ Using ImageMagick c o n - - - ' v d d c p e e e o t r f f m i t i i p f n n r : s e e e o o s u u t t s t r i i p c f f j u e f f p t _ : : e _ i t g g i m i e m a l n \ a g e e g e - r e . g a . t e t t i o e i f m - f e p ' - t y a r r l y a p = m h 2 i a 5 d 6 s o x = f 2 t f 5 r 6 u e 対象データ 以下の画像を使用させていただきます。 ...

2025年3月11日 · 18 分 · Nakamura

mdx.jpのオブジェクトストレージとIIP Image(IIIF Image Server)を使ってIIIF画像を配信する

概要 mdx.jpのオブジェクトストレージとIIP Image(IIIF Image Server)を使ってIIIF画像を配信する試行の備忘録です。 以下の記事の続きです。 Docker版IIP Image 以下で、IIPImage serverのDocker Imageが公開されていましたので、こちらを使います。 https://hub.docker.com/r/iipsrv/iipsrv 以下の記事などを参考に、Dockerをインストールします。 https://qiita.com/Marron-chan/items/570c7c7baaae3b4d6b11 実行 前回の記事に倣い、以下のようにmdx.jpのオブジェクトストレージをマウントします。 s 3 f s s a t o r u 1 9 6 ~ / s 3 m o u n t p a s s w d _ f i l e = ~ / . p a s s w d - s 3 f s u r l = h t t p s : / / s 3 d s . m d x . j p u s e _ p a t h _ r e q u e s t _ s t y l e a l l o w _ o t h e r 注意点として、前回の記事から、-o allow_otherを追加しています。これを追加しないと、次のコンテナ起動時に以下のエラーが発生しました。 ...

2025年3月7日 · 6 分 · Nakamura

Algolia における「a に x を含み、b に y を含む」部分一致検索の調査

この記事は、AIが作成し、一部を人が修正したものです。 はじめに フルテキスト検索エンジンの中でも、Typesense、MeiliSearch、Algolia は小規模なプロジェクト向けの選択肢として注目されています。しかし、「a に x を含み、b に y を含む」部分一致検索 が可能かどうかは、プロジェクトの要件に関わる重要なポイントです。本記事では、Algolia での部分一致検索の可否や、Elasticsearch との比較を行います。 Algolia での部分一致検索 Algolia では、全文検索 (query) を利用できますが、特定のフィールドごとに部分一致検索を行うには制限があります。 方法1:query を使った検索(部分一致可能だがフィールド指定不可) i n d e x . s e a r c h ( ' x y ' ) 特徴: x や y を含むデータを全フィールドから検索。 どのフィールドでヒットしたかを制限できない 。 方法2:restrictSearchableAttributes を使う(単一フィールドの検索) i } i } n ) n ) d r ; d r ; e e e e x s x s . t . t s r s r e i e i a c a c r t r t c S c S h e h e ( a ( a ' r ' r x c y c ' h ' h , a , a b b { l { l e e A A t t t t r r i i b b u u t t e e s s : : [ [ ' ' a b ' ' ] ] 特徴: ...

2025年3月3日 · 2 分 · Nakamura

WordファイルをTEI XMLに変換する方法:TEIgarage APIの活用ガイ

この記事は、AIが作成し、一部を人が修正したものです。 はじめに デジタル人文学の世界では、文書をTEI(Text Encoding Initiative)形式で保存することが一般的になっています。TEIは学術的なテキストを構造化するための標準規格です。今回は、Microsoft Wordで作成した文書をTEI XML形式に変換する方法を、Pythonを使って解説します。 TEIgarageとは? TEIgarageは、さまざまな形式の文書をTEI XMLに変換するためのオンラインサービスです。このサービスはAPIを提供しており、プログラムから直接利用することができます。今回はこのAPIをPythonから呼び出して、Wordファイルを変換してみましょう。 必要なもの Python 3.6以上 requestsライブラリ(APIリクエスト用) インターネット接続 変換したいWordファイル(.docx形式) 手順 1. 必要なライブラリをインストールする まず、必要なライブラリをインストールしましょう。コマンドプロンプトやターミナルで以下のコマンドを実行します。 p i p i n s t a l l r e q u e s t s 2. Pythonスクリプトを作成する 次に、以下のPythonコードをword_to_tei.pyなどの名前で保存します。 i i i f d # i m m m r e f p p p o f メ o o o m イ r r r c # i o T # w # i e ン _ # w # o t e t t t i o n u E i f l 処 n o u r x o n O p t I . t 変 s 理 a 変 r 出 t y c r o z v x u p G d h 換 r e m 換 d 力 p : e e s i i e G t u A o f r 結 e # w : p e し _ フ u # c p p q p m r a _ t R c o i e 果 s i r _ た f ァ t o t r u f p t r d _ A x p l s を p z t i _ い i イ _ W n i e i o _ a o d G e e p フ o i h n W l ル f o v E n s l r d g c o E フ n s o ァ n p # f e t = o e の i r e x t t e t o e u c _ ァ ( n イ s フ z o l ( = r パ l d r c ( s c の m u U イ f = s ル e ァ i t r s " d = ス e フ t e f B x エ e m R ル i e と . イ p e e エ " フ を ァ _ p " y _ ン n e L を l { し s ル f i m i : p ラ _ ァ " 指 = イ d t エ t t ド t n 開 e " = て t を i . e f r ー _ イ d 定 ル o i ラ e o ポ _ t = い _ f 保 a メ l x m i : m ル o " を c o ー s _ イ t _ て p i r 存 t モ e m b m n " a の c o 変 x n が I t ン y t f A a l e せ u リ . l e e z t o p b t , i パ u u 換 _ 発 O e ト p y " P t e q ず s 上 Z フ r m i e s r r ( n ス m t t a 生 i e p h I h " u に _ で i ァ b p i . i e " r _ を e p o s し _ e t に , : e 展 c 展 p イ i e _ _ r n a エ e _ 指 n u _ ま x = t 送 s 開 o 開 F ル n r r x e t k ラ s " 定 t t t e し m = p 信 " f t d i を . e m n ( ー p : s / e : た l " s r i s e l 保 z e f l a " : o / s i : ( d " : b l . e 存 i n . _ m T n s a _ f o T / " e p = ( p d e p e E t s a m x { i c E / ) } o = B _ s x a ( I e e m p m e l x I t s y r w t t t / i . p l l } e % % e a t 2 t e i r h e X . s l e ( " _ 3 3 i s ( 0 e f t a i M x t e _ w ) p A A g T 0 s . h c = _ L m a . t o a a t a f E : I n ( t x l t d e r t p e r i I O a " ( o m 変 u o i d h p x a l G ( m t m s l 換 フ s c . _ , l t g e A r e e e . _ 成 ァ _ x x f i % e : R e l i m p p 功 イ c " m i o c 3 . A s i . b a a ! ル o l l u a A t G p s x e t t t が d " e t t x e E o t m r h h e 見 e # , p i m i _ n ( l , . , i つ , u o l - U s ) " j . か こ # o t n " c R e : ) o o o x り r こ u _ % . L . : s i u m ま e を 出 t p 3 o , c . n t l せ s 実 力 p a A r o p ( p ん p 際 先 u t v g f n a o u に 。 o の を t h n / i t t s t 保 " n フ 指 _ ) d e l e h . _ 存 ) s ァ 定 f : . g e n . p p さ e イ i o e s t d a a れ . ル l p - = ) i t t ま t パ e e w f ) r h h し e ス ) n e i n . ) た x に x b l a a d 。 t 変 m s e s m i " ) 更 l e s e r ) し f r ) z ( n て o v i o a く r i p u m だ m c _ t e さ a e r p ( い t / e u o s C f t u - o : _ t o n p p f v a u f e t t i r h _ c s ) p e i ) a d o t o n h c s ) u / , m { e i m n n e t p m . u b w t e o _ r r d ) d o p c r u o m c e e n s t s _ i t n y g p m e l } . / d { o o c u u t m p e u n t t _ " d o c u m e n t _ t y p e } / " 3. スクリプトを実行する スクリプト内のword_file変数を、変換したいWordファイルの実際のパスに変更します。同様に、output_file変数も希望の出力先に変更してください。 ...

2025年3月3日 · 7 分 · Nakamura

Next.js + CETEIcean + React TEI Routerを使ったビューア開発

概要 Next.js、CETEIcean、React TEI Routerを組み合わせたTEI/XMLビューアの開発についての備忘録です。 背景 CETEIceanは、TEI/XML を HTML5 に変換する JavaScript ライブラリです。 https://github.com/TEIC/CETEIcean そして、React TEI Routerは、CETEIcean をベースに React コンポーネントで TEI/XML を構造化して表示できるライブラリです。以下のように説明されています。 https://github.com/pfefferniels/react-teirouter TEI for React using CETEIcean and routes これらを組み合わせることで、Next.js において TEI/XML をカスタマイズして表示できるビューア を作成しました。 リポジトリ 以下がサンプルリポジトリです。 https://github.com/nakamura196/next-ceteicean-router 実際に動作するデモも用意しています。 https://next-ceteicean-router.vercel.app/ 実装 Next.js のページコンポーネント (page.tsx) CETEIcean を利用して XML を変換し、カスタムコンポーネントで描画します。 i i e } m m x p p p c r o o o o e r r r n < t t t t s T / u t E < T r R R d I t / E n e e e x e < t I a n f m x x b / e > < c d a l m t o < < b x ` R t e u C l > d d / d / o t ; e r l o n y i 私 d i < < d d > n f t n s > v の i v p p / i y d r f t = 名 v > p v > e o r f e " t 前 > s s > > r m o u n h y は t t m n t t p < y y x " c t e p l l m r " t = p = e e e l e @ i : " r = = C a / o ` / o s " " o c c n < / r N c c n t o ? w i a o o t " m A x w g m l l e ; p p m w i e o o n o p l . n r r t n ( t a c : : = e ) v e l o { n e i " r g g x t { r - > r r r m s s c e e e l / i . s e e C t o o p n n o e n r = ; ; n i = g " " " t " " / # > > e ; 1 n i こ こ n . s d ん ん t 0 / 1 に ば } " 1 " ち ん . > は は e 0 田 < > n " 中 / < ; c > 太 p s o 郎 > e d < g i / n p s g e t = r y " s l U N e T a = F m " - e c 8 > o " で l ? す o > 。 r : b l u e ; " > x x x < / s e g > TEIレンダリングコンポーネント CETEIcean を使って XML を HTML5 に変換。 TEIRender + TEIRoute を使い、TEI 要素ごとにカスタムコンポーネントを適用。 import { TEIRender, TEIRoute } from "react-teirouter";を使用した上で、要素毎にコンポーネントを用意しています。 ...

2025年3月2日 · 10 分 · Nakamura

Next.js for Drupal の BASE_PATH 問題と修正方法(patch-package活用)

概要 Next.js for Drupalのv2.0.0が2025/2/11にリリースされました。 https://next-drupal.org/ https://next-drupal.org/blog/next-drupal-2-0 早速試してみたところ、BASE_PATHの取り扱いについて対応が必要だったので、備忘録です。 環境変数 環境変数のサンプルは以下のようになっています。 # # N N # D D # D E E R R R S R X X A U U R U e e T T u P P e P e q _ _ t A A q A u P I h L L u L h i U M e _ _ i _ t r B A n C C r R t e L G t L L e E p d I E i I I d V s C _ c E E A : _ D a N N f L / D O t T T o I / R M i _ _ r D n U A o I S A e P I n D E O T x A N = C n E t L = R R - _ - _ s e E d S d B i t T e E r A t r = m C u S e i R a R p E . e e n E a _ e v t d T l U x e r = . R a i R R o L m t e e e r = p h v v t g h l i e a r / t e s l i d t . t i e o p c f h d v c s o r i a e s : m o s t / / m i t e / f o h n s / r n i v i a o s i t d m r e m f o . i / r n e n a o m x / d m e a c m n m o i / t p n n a - l f / d v e i c m a . g i r c n n i o s f / a m e i c b r g o l v / n e i s f s c e i e r g s / / i s c c e o e r n s v s / i u c c m o e e n s r s / u n m e e x r t この時、NEXT_PUBLIC_DRUPAL_BASE_URLにhttps://site.example.com/xxxのようなベースパスを含めた形で指定すると、APIのリクエストはhttps://site.example.com/jsonapi/などに送られ、リソースを正しく取得できませんでした。 ...

2025年3月2日 · 10 分 · Nakamura

DrupalのJSON:APIを用いて、ユーザ名とパスワードでデータ登録を行う

概要 過去に、DrupalのJSON:APIを用いて、Pythonによるデータ登録を行う記事を執筆しました。 以下は、Basic認証を用いた方法です。 また以下は、API Keyを用いた方法です。 これらに加えて、通常のログインによる登録を行うことができたので、備忘録です。 コード 以下の通りです。ログインやCSRFトークンを取得した上で、コンテンツを登録します。 i i i f c m m m r l p p p o a o o o m s r r r s d d d d t t t d e e e e o A f f f f r j o t p e s s e i l # s # # # s s l # l l i g # c i e c # u r i e q o n C _ o e e e o o o f e s f l r r e f l u n v l i a D l エ s 認 l l g ロ g g t C r s e 記 l s s e i n d r f ン e 証 f f i グ i i l _ S f c e a 事 p r e s i e i _ u . ド l 情 . . n イ n n l j h o s c R _ f c s # # s } : # s t 作 = o # u h c j e p : p t m n t d p D ポ f 報 U P ( ン _ _ o s e g e s F t " o r e e e 成 n r e o s s r r s p t _ o a R イ . ( S A s リ u r g o a i l r ト o { o f r s l r l _ リ f s s l a o o p i i o : _ t l U ン J B E S e ク r e i n d n f f ー k s k _ e e f a f c ク " e e , d k n o n n r ( e サ P ト S a R S l エ l s n = e _ . _ ク e e i t t l . " " " i . o エ { l e i = n t t t s n イ A ( O s N W f ス p _ { r r s t ン n l e o u f h C A X s c n ス s = f r e d s ( ( e v ト L J N i A O ) ト = o u " s e e o を _ f s k r . e o c - e s t ト e . s s a e " " l l ( の _ S A c M R : n r n = s s k 取 r . = e n c a n c C r e l r J = = t . コ エ o f o U B O P 認 E D f s l a { p s e 得 e D s n s d t e S E f n f e S s s a s ン ラ a ) v R A N I 証 " e , m " o i n s R e _ c r e e p R x _ t . q O e e t テ ー d : e L S : _ ) = = { e C n o ( p U l r s f r n t F c t ( D u N l l a ン : _ r ( E A E s = " o s n s o P f e r _ s t " - e o s R e A f f t ツ " d r 例 _ P N o o e : n e _ e n A . s f t - : T p k e U s P . . u が , o i ) U I D s s l r t . c l s L s p _ o = T o t e l P t I h s s 作 t d R ) P . . f e s e s o f e _ e o t k y " k i n f A s _ e e _ 成 r e e L O g g . q e n t o ) B s n o e { p a e o , L . E a s c さ e n = I e e D u l t a k : = A s s k n e p n n = _ p N d s o れ s v T = N t t R e f - t i S i e e " p " ( d B o D e i d ま p r T e e U s . T u e r E o . n = : l : f N a A s P r o e し o u o n n P t U y s s e _ n s _ i " o t S t O s n た n e s = v v A s S p _ q U _ t r c " c c C n a E ( I , _ = ! s ) . ( ( L . E e c = u R c a e s a a s S e : _ N c = " e g f " " _ p R " o e L o t s r p t r R U T o ) . e " U P B o N : d l s } u p f p i f F d R , o 2 s t { S A A s A e o t k s o _ l o _ ト i L k 0 t e s E S S t M " g s s i _ n t i n t ー c } i 1 a n e R S E ( E a = i . e e c s o c / o ク t / e : t v l N W _ , p = n g s s o e k a v k ン ) j s u ( f A O U p _ e s d . e t n e 取 : s , s " . M R R " l 2 r t i e t n i d n 得 o _ D D E D L p i 0 e ( o # e _ o . _ 失 n c R R " " } a c 0 s n = x r n a r 敗 a o U U ) ) / s a : p / こ = t e / p e : p d P P u s t o t こ s v i s i e A A s " i n o で 2 p n + p { / , L L e : o s k ロ 0 o d j o c { _ _ r n e e グ 0 n . s n s d r B B / s / . n イ : s a o s r a e A A l e j c " ン e p n e f t s S S o l s o , セ . i " . _ a p E E g f o o ッ t + , t t [ o _ _ i . n k シ e j e o ' n U U n P " i ョ x s x k d s R R ? A } e ン t o t e a e L L _ S s を n , n t . " } f S 渡 " _ a t ) / o W す , r ' e j r O e ] x s m R s [ t o a D p ' ) n t } o t a = , n y p j s p i s e e / o . ' n n s ] o " t . d a r e t e / u p a s l r _ a t c c i o e c d ( l e ' e } " { ' c , s r f _ t ) o } k " e n _ r e s p o n s e . t e x t } " ) これにより、以下で、コンテンツを登録することができました。 ...

2025年3月1日 · 9 分 · Nakamura

Next.jsで多言語対応の静的サイトを構築する

はじめに この記事は、GPT-4oによって生成された内容です。Next.jsを使用して多言語対応の静的サイトを構築する方法について説明します。特に、メイン言語にはURLプレフィックスを付けず、その他の言語にはプレフィックスを付ける設定に焦点を当てます。GitHub Pagesを使用してデプロイする設定も含まれています。 プロジェクトのセットアップ まず、Next.jsのプロジェクトを作成します。create-next-appを使用してプロジェクトを初期化します。 n p x c r e a t e - n e x t - a p p @ l a t e s t n e x t - i n t l - s s g 必要なパッケージのインストール 多言語対応のために、next-intlをインストールします。 n p m i n s t a l l n e x t - i n t l プロジェクト構成 プロジェクトのディレクトリ構成は以下の通りです。 ...

2025年2月28日 · 6 分 · Nakamura

大きな画像から部分画像の座標を取得する方法

概要 大きな画像の一部が切り出された複数の画像から、元の画像内での座標を取得する機会がありました。本記事では、そのための方法についての備忘録をまとめます。 OpenCV の SIFT (Scale-Invariant Feature Transform) を用いて、テンプレート画像と元の画像を特徴点マッチングし、アフィン変換を推定して座標を取得する方法を紹介します。 実装 必要なライブラリ p i p i n s t a l l o p e n c v - p y t h o n n u m p y t q d m Pythonコード 以下のコードでは、指定した大きな画像 (image_path) に対して、テンプレート画像 (templates_dir 内の PNG 画像) を SIFT でマッチングし、元の画像内の座標を取得します。 i i f f i # d # d # d # d # d # d m m r r m e e e e e e p p o o p 画 f 特 f マ f ア f 画 f メ f o o m m o 像 徴 ッ フ 像 イ r r r 読 l i i r 点 e r チ m m g r ィ e s d M r 上 d h r t c r ン m # i t d # s b k # i f # c p t t g t t み o m f e 抽 x e ン a a o e ン s r s _ e に r , e r v e 処 a m e s i f p f o v r l q 込 a g t 出 t t グ t t o t 変 t c t a t マ a c a 2 t 理 i 画 g m t S f 1 特 r 結 2 i c n o d o み d i u r u 処 c c d u 換 i _ _ f u ッ w w t n . u n 像 p _ I t = , 徴 d 果 . n v u b m s _ = m p r a r 理 h h _ r 推 m p p f r チ _ _ s p r ( と = l i F 点 e p r t t i k i g i # M i # b # x b c を i t 2 m i g r n c n _ e m n 定 a t t i n ン m = p f o n i テ _ m T = c d が s r e e e f p f o f _ f e , a v 保 m ( p i i m c i t f s a t s s n グ a t o l m ン l p g 特 v e 見 1 i t m m 2 o ア a 矩 s フ s 2 存 w f y m m a v i n i _ d e t g e e M 結 t t s r y t a プ o a 徴 c 2 s つ n u p p t , d d g フ f M 形 t ァ y e . r " p p g 2 s t m f e a = c o _ = = , _ 果 c e m l r g レ a t = 量 v . 1 か i t r l l e c e c _ o p c ィ f _ p c 描 _ イ , _ p i 結 a o o e . ( g e t t h o a a を h m = e i a e ー d h 検 2 B ら s ( n _ m o d s o m o r o ン i a r o 画 d ル n u t 果 s r r _ i N f a e u m e d f n n _ f 描 e p d n n _ ト _ s c 出 . F = な " p = p n e 2 n a d i n 変 n f i n s 名 _ a t e 画 t t g m o " t c r a s _ f p p f 画 d l n _ e s p 一 i v 器 S M か N 対 a l t s t t _ n t 換 e f n t t を , m T ( 像 n r r n 画 u t e t m i . . = i _ _ p p s f a 覧 m = 2 I a e っ o 象 t l i 2 i i c m t i 推 i t i 矩 e e o を p g t a e e 像 r o s c = a n f f n r s . t ( o t の a . & F t x た n 画 h o i n s n h a ( n 定 = n ( n = 形 _ x u 保 l q y a : が e r ( h t e l l c e e h f s i r h 読 g g i T c t 場 e 像 a s u = u e t f u e f u の = t t 存 o d ( d 見 s . d e [ c _ o o v c a l m m , み e l m B _ h r 合 : の i d e N e s c " e e " e d 近 = ( p し b m p ( つ ( d e r m h t a a 2 t p o = a e 込 _ o r F c e a 特 n _ N e o h 特 s i ア r く o d u ま a p か i e s . e r t t . a e a g d t み g b e M r r c 徴 i o x n = e 徴 t s フ a に c s s t し t a り m t 1 k f s a 3 3 e n t c e _ e r ( a a e ( t 点 t m n t e s 点 i ィ w 表 v . t _ た h t ま a e , n o n 2 2 s g 3 v , p m a t d t a c _ が q a e r : m の m N ン _ 示 2 p _ p : ) h せ g c n r i s ( ( t l 2 2 t p y e ( c t v f 見 d g : a a i マ a o 変 m . a i a : , ん e t d M f f [ [ i e ( . [ s l ( m i h e 2 e つ m e c t s ッ t n 換 a b t m t { : , A e a m o k k m ( [ t n a i p m e ( . a か ( _ t c チ e e 推 t o h g h o c n s t , l r p p a i [ r p t m l a r ) N t り t g _ h N ン _ : 定 c u . , , u v { d d 2 c e m 2 1 t m 0 a . e a a g O u ま e r f _ o グ a に h n s t 2 p e C , h n n ( [ [ e a , n i s g t e 設 R r せ m a e f n が f 失 e d p b d p . a t o ( ( k m m A g s n _ e e _ 定 M e ん p y a e e 不 f 敗 d i l a s u I t e m m d i g p . . f e 0 f t d _ s p _ s で l ( t a : 足 i : _ n i s t t M h c p a e n o 1 t q f , ] o 3 i p _ a L ( し _ t u t : n r g t e _ _ R } t u t s o , r u i , r 2 r a d t 2 i た p e r u e { e R e _ i p E " o t c 1 m d a e n M m ( , t i h , m 。 a m e r { _ t c e x n m a A ) r e h , a _ k i r e _ [ ( t h r ) g " t p s e t t e t c t a g t D ) ( e t m p n y P a w n r o ) ) c , ) h l ( s e r m a t ( m ) h _ : i r d c a 2 I I a f , p a u r s _ t ( m a p n ( o e } G m , e h t , d d r f . n t o s ) p e d p n l g b s , " R a s e c x x t i 0 a s p s i : a m e l s _ l e . ) A g r 2 s h g ] ] i n ] r f u s f t p s _ f p e s p ( Y e a , e o . . a e , r o t C t h l 1 p o a ( t a x S , t i s o p p l , a r _ h ) ) , , a r t d _ t , C i k f ) d t t 2 [ y m p e t m h s d h A N o = _ D t w ( e a c s d h ( } t s . y L o _ 2 m > m f f ( e , [ d t k i e } k " _ t b E n t ) . = a o o s m r _ h = f s " p ) i ) a - ) e e d t r r r p h e p ) F t 2 ) 1 m s ) s i m c c l ] c t : a ) , , g e 1 t s i h m m _ _ , t s l , n 0 = t n e p s _ ) s b k a ) 0 a _ s i i t h [ p ] e f p M m , . n m ) n n s a 0 t , ) ) 2 _ e 7 c a : , p , s , a ( c , e t g g e ] i f t v c o o d ) h ) s g f e 2 m < h o o s : ] , C o i m . i e d d t ] l o n p F n r s _ _ _ ) M o d e l O _ a m m p _ s _ , _ N m t e a a t a e m p T a i l t t s # f d a t a _ t o s c c , f = t e t H c _ e h h 長 i T c m h E h t e e m 方 n r h p ) R e e N s s e 形 e u e l ) S s s o ] ] t の ) e s . [ H = t n ) ) h 四 [ , ) s 0 E 4 e . . o 隅 0 h ] Y ) r r d ] c a _ : e e = o p S n s s c l e I . h h v # o ) M d a a 2 r P i p p . 変 = L s e e R 換 ( E t ( ( A 後 0 X a - - N の , , n 1 1 S 座 c , , A 標 0 1 e C , , ] 1 1 , , , 2 ( r 5 0 2 2 a 5 , ) ) n ) s , 0 a , c t R h 2 e i 5 p c 5 r k ) o n , j e T s 2 h s ) r = e 2 s ) h o l d = 5 . 0 ) 実行 # i f 実 行 _ # I T O m n M E U a a パ A M T i m ラ G P P n e メ E L U ( _ ー _ A T I _ タ P T _ M 設 A E P A = 定 T S A G = H _ T E D H _ " = I P _ R = A _ " T m / = " H a x / , i x " x n x x T _ x x E _ d x / M " e x m P : f / a L a * t A u . c T l p h E t n _ S . g r _ j " e D p s I g u R " l , t . O j U p T g P " U T _ P A T H ) まとめ 本記事では、SIFT を用いた特徴点マッチング によって、部分画像が元画像のどこに位置するかを推定し、アフィン変換 で位置を特定する方法を紹介しました。 ...

2025年2月23日 · 12 分 · Nakamura

vttファイルからTEI/XMLを作成する

概要 vttファイルからTEI/XMLファイルを作成する方法の備忘録です。 さらに、IIIFマニフェストから、vttファイルおよびTEI/XMLファイルにアクセスできるようにしてみます。結果、以下のように、TEI/XMLファイルがSeeAlsoに関連づけられ、また「Annotations」タブから、vttファイルの内容にアクセスできます。 https://clover-iiif-demo.vercel.app/?manifest=https://movie-tei-demo.vercel.app/data/sdcommons_npl-02FT0102974177/sdcommons_npl-02FT0102974177_vtt.json 参考 以下の「The Ethiopian Language Archive」における取り組みを参考にしました。特に、TEI/XMLの構造化方法が特に参考になりました。 https://dev.jael.info/documentation/ 例 以下で作成したvttファイルを対象とします。 具体的には、以下の『県政ニュース 第1巻』(県立長野図書館)を使用します。 https://www.ro-da.jp/shinshu-dcommons/library/02FT0102974177 TEI/XMLの作成 作成したTEI/XMLファイルの例は以下です。 https://movie-tei-demo.vercel.app/data/sdcommons_npl-02FT0102974177/sdcommons_npl-02FT0102974177.xml 具体的には以下です。 < < < ? ? t / x x e < < t m m i t / T / e l l C e < t E < < T i - - o i f / e I t / t / E C m m r H i < < < < f i > e < < t e < t I o o o p e l t / p / n / s / i H i f / r / e x b e > r d d s u a e i < t u < < p o < n o < s l e H i < < < < f e < r i t o < < < < < < < < < < b x p e e c s d D t t i b d a / u t n o u b / o e a e l t / p / n / s / i v c e H > d t / a / a / a / a / a / a / a / a / a o t u l l h e e l i t l i v < a b e o t r i < < b u D d a e i < t u < p o < n o < s l i h v e y i < < < < < < < < < < t n < a n < a n < a n < a n < a n < a n < a n < a n < a d > s e x r s e t l i s a l v l s t e c b m / r i r e e d D t t i b p u t n o u p o e s a i a > m w w w w w w w w w w i n u n n u n n u n n u n n u n n u n n u n n u n n u n y > h h m m > c S l e c t i i a i S e s e l o < < < m e b c s r e e l i t l b e o t r u D i n s d e h h h h h h h h h h m o n o n o n o n o n o n o n o n o n > r r a l > t e S a r l c i c t > S D S n t a / i / o f l e c > r s e t l i l s t e c r e o g i e l e e e e e e e e e e e t s o t s o t s o t s o t s o t s o t s o t s o t s o e e t n m > t t i a e l a m 昭 t e t o i v < a m < i n S D > > c S l e c i S e s e c s n e o r i n n n n n n n n n n l a t t a t t a t t a t t a t t a t t a t t a t t a t t f f y s t 県 m i b b n a t t 和 m s r g t a l v p p m o t t e > t e S a c t S D e c D n > n i t a a t a a t a a t a a t a a t a a t a a t a a t a a = = p = > 政 t o u i c b i > 3 t c u r l i i a r u p g a r s m > t t a m t e D > e w D e a a a a a a a a a a n i r t i r t i r t i r t i r t i r t i r t i r t i r t " " e " ニ > n t l e i o 0 > > c > e l c i i b r r r u c t 県 m i t t m s e s h e b b b b b b b b b b e o t i o t i o t i o t i o t i o t i o t i o t i o t i h h n h ュ S o i l n 年 t > a e l n l i > g c > > 政 t o i > t c s c e s u s s s s s s s s s s > n = o n = o n = o n = o n = o n = o n = o n = o n = o t t s t ー t r t t i S に > 県 b n a t i n e t ニ > n o > > c > n c n o o o o o o o o o o B " n B " n B " n B " n B " n B " n B " n B " n B " n t t = t ス m > y a t t 長 政 i c b > s t t > ュ S n > = > i l l l l l l l l l l l # B l # B l # B l # B l # B l # B l # B l # B l # B p p " p t 中 > r y m 野 ニ l e i h > = ー t S " t u u u u u u u u u u o t l o t l o t l o t l o t l o t l o t l o t l o t l : : h : 第 > 村 g > t 県 ュ i l e " ス m t 2 = t t t t t t t t t t c 1 o c 2 o c 3 o c 4 o c 5 o c 6 o c 7 o c 8 o c 9 o / t / 1 覚 e > が ー t t i r h t m 0 " e e e e e e e e e e k " c k " c k " c k " c k " c k " c k " c k " c k " c / t / 巻 < t 制 ス y a t > t 第 > t 2 m = = = = = = = = = = k k k k k k k k k w w p w < / = 作 > r y 信 t 1 > 5 s " " " " " " " " " " x e > x e > x e > x e > x e > x e > x e > x e > x e > w w : w / d " し 第 g > 州 p 巻 - " 0 0 0 0 0 0 0 0 0 0 m n m n m n m n m n m n m n m n m n w w w t i h た 1 e デ s < 0 > 0 0 0 0 0 0 0 0 0 0 l d l d l d l d l d l d l d l d l d . . / . i s t 記 巻 t ジ : / 2 : : : : : : : : : : : = : = : = : = : = : = : = : = : = t t p t t t t 録 < = タ / t - 0 0 0 0 0 0 0 0 0 0 i " i " i " i " i " i " i " i " i " e e u e l r p 映 / " ル / i 1 0 0 0 0 0 1 1 1 1 1 d # d # d # d # d # d # d # d # d # i i r i e i : 像 t h コ w t 8 : : : : : : : : : : = t = t = t = t = t = t = t = t = t - - l - > b / 。 i t モ w l " 0 2 3 5 5 0 0 1 2 3 " 2 " 3 " 4 " 5 " 6 " 7 " 8 " 9 " 1 c c . c u / 次 t t ン w e > 0 5 8 0 5 3 8 8 3 3 a " a " a " a " a " a " a " a " a 0 . . o . t c の l p ズ . > . . . . . . . . . . b > b > b > b > b > b > b > b > b " o o c o o r 8 e s r 作 0 5 5 5 5 5 5 5 5 5 1 ♪ 2 今 3 男 4 ♪ 5 か 6 ♪ 7 そ 8 そ 9 > r r l r r e タ > : 県 o 成 0 0 0 0 0 0 0 0 0 0 " ♪ " 年 " 女 " 〜 " く " " の " の " ま g g c g > a イ / 立 - 0 0 0 0 0 0 0 0 0 0 > ♪ > は > 青 > < > て > ♪ > 日 > 結 > た / / . t ト / 長 d " " " " " " " " " " < 選 年 / 県 < 午 果 こ r r n i ル c 野 a / / 挙 や u 下 / 後 、 れ e e r s v を r 図 . c x x x x x x x x x x u の 婦 > に u 8 長 と l l g e 収 e 書 j h m m m m m m m m m m > 当 人 お > 時 野 同 e e 1 c 録 a 館 p a l l l l l l l l l l た 層 け 県 時 a a d . o す t 所 / n : : : : : : : : : : り は る き 知 に s s s 0 m る i 蔵 s g i i i i i i i i i i 年 も 投 っ 事 、 e e d " m 。 v 資 h e d d d d d d d d d d 。 ち 票 か に 県 / / l > o 「 e 料 i > = = = = = = = = = = 2 ろ 率 り は 議 x x / n 地 c < n " " " " " " " " " " 月 ん 、 、 、 会 m m s s 方 o / s t t t t t t t t t t の の 全 県 前 議 l l c . 選 m p h 1 2 3 4 5 6 7 8 9 1 総 こ 国 下 知 員 / / h o 挙 m u u " " " " " " " " " 0 選 と の 一 事 6 t t e r 終 o b - " 挙 、 上 斉 の 1 e e m g る n l d に こ 位 に 林 名 i i a / 」 s i c 引 の を 即 寅 の / / t l 、 . s o き 老 占 日 氏 当 c c r i 「 o h m 続 人 め 開 が 選 u u o c 地 r e m い も る 票 当 も s s n e 方 g r o て 今 立 が 選 決 t t " n 選 / > n 、 年 派 行 。 定 o o ? s 挙 p s 4 8 な わ < し m m > e 後 u / 月 8 成 れ / ま / / s 初 b l の を 績 ま u し s s / の l i 県 迎 を し > た c c b 県 i b 市 え 収 た 。 h h y 議 c r 町 た め 。 < e e / 会 d a 村 と ま < / m m 4 開 o r と は し / u a a . か m y 八 い た u > / / 0 る a / 木 え 。 > r r / 」 i 0 早 、 < e e " 、 n 2 の そ / l l > 「 / F 選 の u a a h 三 z T 挙 慎 > x x t 十 e 0 で 重 n n t 年 r 1 、 な g g p 度 o 0 長 投 / / : を / 2 野 票 t t / 賄 1 9 県 ぶ e e / う . 7 1 り i i c 県 0 4 1 が _ _ r の / 1 6 老 a a e お " 7 万 い l l a 台 > 7 有 の l l t 所 c " 権 表 . . i 」 c > 者 に r r v 、 0 信 の 一 n n e 「 < 州 関 徹 g g c す / デ 心 さ " " o す l ジ は を m む i タ 非 伺 t t m 土 c ル 常 わ y y o 木 e コ な せ p p n 建 n モ 高 て e e s 設 c ン ま い = = . 」 e ズ り ま " " o 、 > よ す a a r 「 県 う 。 p p g 明 立 で < p p / る 長 す / l l l く 野 。 u i i i 正 図 < > c c c し 書 / a a e く 館 u t t n 健 所 > i i s や 蔵 o o e か 資 n n s に 料 / / / 」 < x x b 、 / m m y 「 r l l / 幕 e " " 4 を f . と > s 0 じ c / た h < 善 e / 光 m l 寺 a i の t c 御 y e 開 p n 帳 e c 」 n e 、 s > 「 = 勇 " ま h し t い t 水 p 防 : 訓 / 練 / 」 r 、 e 「 l お a 国 x じ n ま g ん . 民 o 謡 r 大 g 会 / 」 n < s / / n s o t t r e u > c t u r e / 1 . 0 " ? > IIIFマニフェストファイルの作成 上述したTEI/XMLファイルをseeAlsoに持つIIIFマニフェストファイルを作成しました。 ...

2025年2月21日 · 32 分 · Nakamura

Mirador 3の mirador-annotations プラグインで、付与したアノテーションをダウンロードする

概要 Mirador 3の mirador-annotations プラグインで、付与したアノテーションをダウンロードするための設定に関する備忘録です。 https://mirador-annotations.vercel.app/ 背景 以下の記事で、アノテーションをGoogleのFirestoreに登録する方法を紹介しました。 ここで登録したアノテーションをダウンロードするにあたり、mirador-annotationsプラグインでダウンロードオプションが提供されていたので、その方法について紹介します。 方法 以下がデモページのソースコードになりますが、exportLocalStorageAnnotationsというオプションをtrueにすることで、ダウンロードアイコンが表示されました。 i i i i c c } m m m m m o o ; i p p p p n n a } i w } w } r o o o o s s n , d i , i ] a r r r r t t n a e : n d s n l , d t t t t o d x d e i d o o e c t a p ' o f d o a r m a L A n o a p a o d w a e w d . i n o n d n t t d r e : u B s e v r n c n p f i e a t m l a : d i a o a o o i o r p L o { t r M e d t l t i g n : t o ' S O [ a w o a S o n : e c , i p { n e r t t t t = ( r a d e i r i o A U { c : l e n f ( f o r d r { a S B B e c r n a a l n ( t a y s o o P g p v c o r D t n m l e t = a a r P e : f u A e s n a a f i ' g d r ' I v g n a ' g m i a h d a e e u h , i n p f t ) s A l l t r s t r t I n : t t [ a e o p = d n : p . d f r m : > ) o ' s . o r / t a t : . r f / n = a n r / a m r 1 e > t n u / n d o 2 w i o e i n i m 7 n o t , i o s . L e n a i t t 0 o w s t f a . c : i . t e s 0 a A o h i s r . l n f n a o c 1 S n a s r n s s : t o l ' v P r r A 3 o t s , a l c c s n 0 r o e r u / ' r n 0 a t , d g i ; c 0 g A a i n t / e d r n d L o a A a t s e o t n d p m ] x c A n a t d u ) ' a d o p e i s ; ; l a t t r s e S p a e ( p u t t t r c l m o e i ( a a s r r o ` n y . a ' n l v o g ; s o a a r e ' c s n g A ; a I n / d l d o m a S , t a p t a n t o e t i e r n i f r a d o e ' g p n s ; e o t : i J s / n S / / t O o ? U N b c r j a l e e n ) x c v , p t a o / s r 2 I t 9 d 9 = b 8 $ u 4 { t 3 c t ' a o , n n v a s I d } ` ) , ダウンロードによって得られるJSONファイルの例は以下です。canvas毎にダウンロードできます。 ...

2025年2月14日 · 16 分 · Nakamura

Algoliaでページネーションの上限を変更する

概要 Algolia では、検索結果のページネーションに制限 (paginationLimitedTo) が設定されており、デフォルトでは 1,000件 までの検索結果にしかアクセスできません。この設定を変更することで、ページネーションの最大件数を調整できます。 設定方法 ページネーションの上限 (paginationLimitedTo) を変更するには、以下の方法があります。 Algolia ダッシュボードから設定 Algolia にログイン 対象のインデックス を選択 Configuration(設定) → Pagination(ページネーション) を開く paginationLimitedTo の値を変更 その他 API による設定変更も可能なようです。 まとめ この設定を適切に活用することで、より柔軟な検索体験を提供できます。 参考になりましたら幸いです。

2025年2月10日 · 1 分 · Nakamura

異体字リストを取得するためのAPIの試作

概要 以下のページで「史料編纂所データベース異体字同定一覧」が公開されています。 https://wwwap.hi.u-tokyo.ac.jp/ships/itaiji_list.jsp 今回は、上記のページで公開されているデータをJSON形式で取得するためのAPIを作成します。 開発したもの 以下のURLからアクセスいただけます。 https://hi-itaiji.vercel.app/ 同定一覧における「char(異体字)」をキーとして、「base」の漢字を値とするマッピングを返却します。 まとめ 異体字リストの応用にあたり、参考になりましたら幸いです。

2025年2月10日 · 1 分 · Nakamura