Omeka Sの一括登録用モジュール: Bulk Importの使い方(2024-02版)

概要 Omeka Sのアイテムやメディアの一括登録用モジュールとして、Bulk Importがあります。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport 継続的な更新が行われており、色々と便利になっていたので、備忘録です。 インストール 通常の方法でインストールできます。ただし、Logモジュールを事前にインストールしておく必要があります。 https://github.com/Daniel-KM/Omeka-S-module-Log 使い方 ここでは、CSVファイルを使った登録例を紹介します。 設定 まず、以下にアクセスして、編集アイコンをクリックします。 /admin/bulk/importer “Importer"タブの"Mapper"項目について、“マニュアル/Manual"を選択します。これにより、CSVのカラム名とOmeka Sの項目の手動での対応付けが可能になります。 次に、“Processor"というタブに移動します。ここでの設定はあとから(CSVファイルをアップロード後)でも変更可能ですが、ここでデフォルト値を設定しておくと、間違いや設定漏れがなくなり、効率的かと思います。 設定例として、例えば"Action"を"Revise data of resouces"にします。これにより、部分的な更新(PATCH)が可能になります。具体的には、CSVのカラムにないOmeka Sの項目があった場合、Omeka Sでは当該項目の値が残り、CSVにあるカラムに対応するOmeka Sの項目のみが更新され、比較的安全な更新方法かと思われます。 その他、“Action on unidentified resources"を"Create a new resource"にしておくと、既存のリソースがあれば更新され、ない場合には新規作成される、といった処理になります。この 既存のリソースがあれば を判断する基準として、“Identifier to use for linked resources or update"を設定します。例えば、dcterms:identifierに識別子を与えている場合、その値に基づき、既存リソースの有無がチェックされます。 また、“可視性"を"非公開"にしておくと、新規登録されたリソースは非公開の設定になり、後から個別に公開/非公開を切り替えることができます。 インポート 以下にアクセスして、“CSV - Items"をクリックします。(Mediaなど、他のリソースを登録する場合には、該当するタイプを選択します。) /admin/bulk/bulk-import Step 2/4: Mapper 次の画面でCSVファイルをアップロード後、“Step 2/4: Mapper"画面に遷移します。ここで、CSVファイルとOmeka Sの項目のマッピングを行います。 上記では、visibilityのような予約語が一部使われていますが、これらは以下のファイルで確認できます。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport/blob/master/data/mappings/fields_to_metadata.php 例えば、以下のように設定されており、visibilityまたはpublicは、Omeka Sのo:is_publicにマッピングされる、ということがわかります。 'visibility' => 'o:is_public', 'public' => 'o:is_public', 上記のようなルールに当てはらないカラムについては、手動でOmeka Sの項目とマッピングを行うことができます。 ...

2024年2月7日 · 更新: 2024年2月7日 · 1 分 · Nakamura

Mirador 3でPresentation API v2のマニフェストが表示できない時の対処例

概要 以下のようなPresentation API v2のマニフェストファイルをMirador 3にロードした際、表示エラーが生じました。 https://gist.githubusercontent.com/nakamura196/42fb6bca6a9fa137234c334cb313fc58/raw/4188ebccb7406ff5132331a4fecc4ace8bdd7ebc/ng.json 以下、Mirador 3での表示です。 この原因と対処法について調べたので、共有します。 原因 以下のエラーメッセージが表示されていました。IIIF v2を入力しているにもかかわらず、v3と判断されているようでした。 Error: A IIIF v3 localized property value must have an array as the value for a given language. at PropertyValue.ts:126:20 at Array.map (<anonymous>) at t.parse (PropertyValue.ts:123:29) at t.getLabel (ManifestResource.ts:35:28) at canvases.js:162:12 at index.js:67:25 at h (defaultMemoize.js:123:20) at index.js:81:40 at h (defaultMemoize.js:123:20) at Function.mapToProps (OpenSeadragonViewer.js:39:12) これは、以下のように、canvasのlabelがオブジェクトの形で記述されている際に発生するようでした。 canvases": [ { "@id": "https://islamic-architecture.aa-ken.jp/omekas/iiif/2/monument1/canvas/p1", "@type": "sc:Canvas", "label": { "type": "literal", "property_id": 1, "property_label": "Title", "is_public": true, "@value": "0001-01" }, ... } ] なお、上記の記述方法は、Presentation API ValidatorではOKでした。 ...

2024年2月6日 · 更新: 2024年2月6日 · 1 分 · Nakamura

Omeka SのモジュールIIIF Viewersの更新

概要 IIIF ViewersはOmeka Sのモジュールの一つです。 https://github.com/omeka-j/Omeka-S-module-IiifViewers 最新版のリリースは以下です。 https://github.com/omeka-j/Omeka-S-module-IiifViewers/releases/latest 今回、いくつかの更新を行いましたので、備忘録です。 Universal Viewerのバージョン更新 Universal Viewerのバージョンをv4.0.25に更新しました。 合わせて、READEME.mdの以下の箇所に、Universal Viewerの更新方法を記載しました。 https://github.com/omeka-j/Omeka-S-module-IiifViewers?tab=readme-ov-file#compilation-of-universal-viewer これは、以下のモジュールの記載を参考にしています。 https://github.com/Daniel-KM/Omeka-S-module-UniversalViewer また、Miradorの更新方法も記載しましたが、既に最新版が導入されていたので、更新は行われていません。 バグ修正 以下に加えて、細かなバグを修正しました。 Module.php 以下のエラーが生じていました。 Deprecated: Creation of dynamic property IiifViewers\Module::$dependencies is deprecated in /var/www/html/modules/IiifViewers/Module.php on line 147 以下のように修正しました。 namespace IiifViewers; use Omeka\Module\AbstractModule; use IiifViewers\Form\ConfigForm; use Laminas\Mvc\Controller\AbstractController; use Laminas\EventManager\Event; use Laminas\EventManager\SharedEventManagerInterface; use Laminas\Mvc\MvcEvent; use Laminas\View\Renderer\PhpRenderer; use Laminas\ServiceManager\ServiceLocatorInterface; use Omeka\Module\Exception\ModuleCannotInstallException; use Omeka\Stdlib\Message; class Module extends AbstractModule { protected $dependencies = []; // Define the property at the beginning // Rest of your code... iiif-viewers.phtml 以下のWarningが生じていたので、いずれも修正しました。 ...

2024年2月5日 · 更新: 2024年2月5日 · 1 分 · Nakamura

Next.jsを用いたTEI/XMLファイルの簡易ビューアを作成しました

概要 TEI/XMLファイルの内容を表示する簡易なビューアを作成しました。 https://github.com/utda/tei-viewer 校異源氏物語のTEI/XMLを対象とした表示例は以下です。 https://utda.github.io/tei-viewer/?u=https://kouigenjimonogatari.github.io/tei/01.xml&v=true 使い方 最低限の機能として、IIIFマニフェストファイルが関連付けられている場合には、Miradorビューアが表示されるようにしました。関連付けの方法としては、以下のフォーマットをベースとしています。 https://github.com/TEI-EAJ/jp_guidelines/wiki/IIIF画像とのリンク またpbタグのn属性が与えられている場合は、ページ番号が表示される機能を提供します。さらに日本語への対応として、クエリパラメータにv=trueを与えた場合、縦書きテキストが表示されます。 https://github.com/utda/tei-viewer/blob/main/src/app/components/Ceteicean.tsx その他 フレームワークにはNext.js、TEI/XMLの表示スタイルにはCETEICeanを使用しました。 https://github.com/utda/tei-viewer/blob/main/src/app/CETEIcean.css そのほか、以下の記事を参考に、GitHubリポジトリとZenodoの連携を試行しています。 改善の余地があるかと思いますが、以下のコマンドを使って、新しいリリースを作成しています。 "release": "npm version patch && git push origin --tags && VERSION=$(node -pe \"require('./package.json').version\") && gh release create \"v$VERSION\" --title \"Version $VERSION\"" 今後 pbタグとMiradorビューアの画像表示が対応する機能を追加したいと思います。 まとめ TEI/XMLファイルの可視化にあたり、参考になりましたら幸いです。

2024年2月5日 · 更新: 2024年2月5日 · 1 分 · Nakamura

nginx-proxyでの 413 Request Entity Too Large エラーの対処法

概要 EC2上にDockerをインストールし、nginx-proxyとnginx-proxy-lets-encryptを利用してSSL化を行いました。 上記の設定で問題なく使用できていましたが、比較的大きなサイズのファイルをPOSTするアプリを作成した際、以下のエラーが発生してアップロードできませんでした。 nginx-proxy 413 (Payload Too Large) Nginxのclient_max_body_sizeを上げる必要がありました。 方法 ChatGPT4に教えていただいた以下の対応により、解決することができました。 413 Request Entity Too Large エラーは、クライアントがサーバーに送信しようとしているリクエストのペイロード(つまり、アップロードするファイルのサイズなど)がサーバーで設定された制限を超えている場合に発生します。このエラーを解決するためには、Nginx の設定でクライアントリクエストの最大サイズを増やす必要があります。 nginx-proxy コンテナでこの設定を調整するには、client_max_body_size ディレクティブの値を増やすことで、受け入れ可能なリクエストサイズの上限を上げることができます。しかし、jwilder/nginx-proxy イメージを使用している場合、直接 Nginx の設定ファイルを編集するのではなく、カスタム設定を適用する方法が推奨されます。 以下は、client_max_body_size を増やすために必要な手順です。 カスタム設定ファイルを作成する: ローカルに client_max_body_size ディレクティブを含むカスタム Nginx 設定ファイルを作成します。例えば、この設定を 100M (100メガバイト)に設定したい場合、次の内容を含むファイルを作成します。 my_custom_proxy_settings.conf: client_max_body_size 100M; カスタム設定ファイルを Docker コンテナにマウントする: nginx-proxy サービスの定義に、このカスタム設定ファイルを /etc/nginx/conf.d ディレクトリにマウントする設定を追加します。これにより、Nginx が起動する際にこの設定が適用されます。 修正された docker-compose.yml の例: services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - html:/usr/share/nginx/html - dhparam:/etc/nginx/dhparam - vhost:/etc/nginx/vhost.d - certs:/etc/nginx/certs:ro - /var/run/docker.sock:/tmp/docker.sock:ro - /srv/docker/nginx-proxy-with-encrypt/log:/var/log/nginx - ./my_custom_proxy_settings.conf:/etc/nginx/conf.d/my_custom_proxy_settings.conf:ro # この行を追加 labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" restart: always Docker コンテナを再起動する: 変更を適用するために、docker-compose を使って nginx-proxy コンテナを再起動します。 ...

2024年2月4日 · 更新: 2024年2月4日 · 1 分 · Nakamura

ArchivematicaでAmazon S3を処理対象およびAIPの保存先に設定する

概要 Archivematicaにおいて、Amazon S3上のファイルやフォルダを処理対象として、さらに処理結果であるAIPをS3に保存する方法に関する備忘録です。 S3をストレージとして利用することにより、他のシステムとの連携の容易化や、AIPの長期保存に関する選択肢が増えると考えられます。 ウェルカムコレクションの以下の記事が参考になりました。 https://docs.wellcomecollection.org/archivematica/administering-archivematica/bootstrapping Amazon S3の設定 バケットを作成します。今回、us-east-1リージョンに、archivematica.aws.ldas.jpというバケットを作成しました。 そして処理対象のファイルなどを格納する「transfer_source」、処理結果であるAIPを格納する「aip_storage」というフォルダを作成しておきます。これらの名前や階層は任意で、後述の過程でどのフォルダを使用するか設定できます。 Archivematica Storage Serviceの設定 Dockerを使ってArchivematicaをインストールした場合、以下のようなURLでArchivematica Storage Serviceにアクセスできます。 http://127.0.0.1:62081/ ログイン後、以下にアクセスします。「Create new space」リンクをクリックします。 /spaces/ 「Create Space」の画面で、以下のように入力します。「Access protocol」にS3を選択し、Access Keyなどを入力します。 Staging pathについてはよくわからず、以下の記事の値を入力します。 https://docs.wellcomecollection.org/archivematica/administering-archivematica/bootstrapping#step_7 Spaceを作成後、「Create Location here」を押して、ロケーションを作成します。2つリンクがありますが、どちらも同じでした。 ここで、2つのロケーションを作成します。一つは、以下のような、Purposeを「Transfer Source」とするロケーションです。 Relative Pathについては、「Browse」ボタンから、先に作成したフォルダから選択します。 また上記ではPipelineがひとつですが、複数のPipelineを作成している場合には、関連づけるものを選択することになると思います。 もう一つは、以下のような、Purposeを「AIP Storage」とするロケーションです。 それぞれの画面で、「Set as global default location for its purpose:」という項目がありますが、これをチェックしておくと、後述するデフォルト設定などが不要になります。 確認 ここまでの設定により、/spaces/にアクセスすると、デフォルトのAccess Protocolが「Local Filesystem」のスペースに加えて、Access Protocolが「S3」のスペースが追加されていることが確認できます。 さらに、/locations/にアクセスすると、追加した2つのロケーションが追加されていることが確認できます。 Archivematica Dashboardの設定 Dockerを使ってArchivematicaをインストールした場合、以下のようなURLでArchivematica Dashboardにアクセスできます。 http://127.0.0.1:62080/ AIPの格納先の設定 そして以下にアクセスして、例えばプロセスautomatedを編集します。 /administration/processing/ ...

2024年2月3日 · 更新: 2024年2月3日 · 1 分 · Nakamura

Universal Viewerにおける画像のコマ指定方法の一例

近年、博物館や図書館、文書館などにおいて、画像共有のための国際的な枠組みであるInternational Image Interoperability Framework(IIIF)を用いた画像公開が一般的になりつつあります。 https://iiif.io/ このIIIF画像の公開にあたり、MiradorやUniversal Viewerなどのビューアが使用されます。 https://projectmirador.org/ https://universalviewer.io/ 特に後者のUniversal Viewerが採用されたデジタルアーカイブシステムにおいては、「#?cv={画像のコマのインデックス}」を与えることで、コマを指定したURLを取得できることが多いです。 注意点として、インデックスは0からスタートしますので、2コマ目を指定したい場合には1を指定します。 「京都大学貴重資料デジタルアーカイブ」の例は以下です。 https://rmda.kulib.kyoto-u.ac.jp/item/rb00000125#?cv=1 「同志社大学デジタルコレクション」の例は以下です。 https://dgcl.doshisha.ac.jp/digital/collections/MD00000380/#?cv=1 ビューアがカスタマイズされている場合など、上記のパラメータが使用できない場合もありますが、コマ数を指定した画像共有のためのURL取得にあたり、参考になりましたら幸いです。

2024年2月2日 · 更新: 2024年2月2日 · 1 分 · Nakamura

Docker版Cantaloupeを使用して、S3バケットにアクセスしSSL通信を行う方法

概要 Docker版のCantaloupeの使い方を以下で紹介しました。 このDocker版Cantaloupeを(大規模ではない)production環境で使用するには、Amazon S3との接続や、SSL対応が求められます。その方法を一例を紹介します。 Amazon S3との接続 公式では以下で紹介されています。 https://cantaloupe-project.github.io/manual/5.0/sources.html#S3Source 日本語の記事として以下があります。 また、今回扱うDocker版では、以下に記載がありました。 https://github.com/Islandora-Devops/isle-buildkit/blob/main/cantaloupe/README.md#settings そこで、S3と最低限の接続を行うためのリポジトリを作成しました。 https://github.com/nakamura196/docker_cantaloupe_s3 .env.exampleを.envにリネームまたはコピーして、必要な値を入力します。 SSL対応 以下の記事を参考にしました。EC2上にDockerをインストールし、nginx-proxyとnginx-proxy-lets-encryptを利用してSSL化を行いました。 https://qiita.com/atsuya/items/7cb6e0ccee63d751d41f version: '3' # proxy services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" volumes: - html:/usr/share/nginx/html - dhparam:/etc/nginx/dhparam - vhost:/etc/nginx/vhost.d - certs:/etc/nginx/certs:ro - /var/run/docker.sock:/tmp/docker.sock:ro - /srv/docker/nginx-proxy-with-encrypt/log:/var/log/nginx labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy" restart: always letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion container_name: nginx-proxy-lets-encrypt depends_on: - "nginx-proxy" volumes: - certs:/etc/nginx/certs:rw - vhost:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro volumes: certs: html: vhost: dhparam: networks: default: external: name: common_link services: cantaloupe: image: islandora/cantaloupe:2.0.10 environment: CANTALOUPE_ENDPOINT_ADMIN_ENABLED: false CANTALOUPE_ENDPOINT_ADMIN_SECRET: my_admin_pass CANTALOUPE_SOURCE_STATIC: S3Source CANTALOUPE_S3SOURCE_ACCESS_KEY_ID: ${CANTALOUPE_S3SOURCE_ACCESS_KEY_ID} CANTALOUPE_S3SOURCE_SECRET_KEY: ${CANTALOUPE_S3SOURCE_SECRET_KEY} CANTALOUPE_S3SOURCE_REGION: ${CANTALOUPE_S3SOURCE_REGION} CANTALOUPE_S3SOURCE_BASICLOOKUPSTRATEGY_BUCKET_NAME: ${CANTALOUPE_S3SOURCE_BASICLOOKUPSTRATEGY_BUCKET_NAME} CANTALOUPE_S3SOURCE_LOOKUP_STRATEGY: BasicLookupStrategy # Or another strategy if needed VIRTUAL_HOST: <カスタムドメイン> LETSENCRYPT_HOST: <カスタムドメイン> LETSENCRYPT_EMAIL: <メールアドレス> restart: always networks: default: external: name: common_link まとめ IIIF画像サーバの小中規模の利用にあたっては、上記のような形が比較的容易な導入方法の一つに当たるかと思います。 ...

2024年1月27日 · 更新: 2024年1月27日 · 1 分 · Nakamura

File Information Tool Set (FITS)を試す

概要 Archivematicaの調査にあたり、File Information Tool Set (FITS)の挙動について確認したい点があり、Dockerを使って試してみましたので、その備忘録です。 https://github.com/harvard-lts/fits インストール 以下にDockerを用いたインストール方法が記載されています。 https://github.com/harvard-lts/fits?tab=readme-ov-file#docker-installation ただ、マニュアルに記載のある以下のページにアクセスしても、Dockerfileが含まれる最新のリリース(1.6.0)はダウンロードできませんでした。 https://projects.iq.harvard.edu/fits/downloads 代わりに、GitHubの以下のリリースページで、最新版のzipファイルをダウンロードできました。 https://github.com/harvard-lts/fits/releases/tag/1.6.0 あとは、READMEの記載の通りに展開、およびビルドを行いました。 ただし、M1 Macの場合、手順通りに実行したところ、以下のエラーが発生しました。 % docker run --rm -v `pwd`:/work fits -i fits.sh 2024-01-26 11:41:10 - ERROR - MediaInfo:95 - Error loading native library for this operating system for tool: MediaInfo. ostype=[Linux] -- jvmModel=[64] -- nativeLibPath=[/opt/fits/tools/mediainfo/linux] -- No native MediaInfo library for this OS java.lang.UnsatisfiedLinkError: Unable to load library 'mediainfo': libmediainfo.so: cannot open shared object file: No such file or directory libmediainfo.so: cannot open shared object file: No such file or directory /opt/fits/tools/mediainfo/linux/libmediainfo.so.0: cannot open shared object file: No such file or directory ... これに対して、ChatGPT 4に確認した結果、Dockerfileに以下の追記を行う指示がありました。 ...

2024年1月26日 · 更新: 2024年1月26日 · 3 分 · Nakamura

Docker版のCantaloupeを試す

概要 TEI PublisherのDocker版を試していたところ、docker版のcantaloupeが使用されていたので、それを単体で使用できるリポジトリを作成しました。 https://github.com/nakamura196/docker_cantaloupe 使用方法は上記リポジトリのREADMEに記載しております。 以下のDocker imageを使用しています。 https://hub.docker.com/r/islandora/cantaloupe 参考:Cantaloupeで配信可能な画像 以下のページで説明されています。 https://cantaloupe-project.github.io/manual/5.0/images.html 高解像度の画像については、JPEG2000またはTIFFのPyramidal Tiledが推奨されています。 一方、解像度が比較的小さい画像の場合は、JPEGやPNGファイルをそのまま配信できるようでした。 http://localhost:8182/iiif/2/baby_role_towel_utsubuse.png/200,200,200,200/full/0/default.jpg (いらすやの画像を使用しています。) iiifというフォルダに画像を格納するだけで、IIIF Image APIの挙動を確認することができます。 まとめ CantaloupeやIIIF Image APIの挙動の確認にあたり、参考になりましたら幸いです。

2024年1月25日 · 更新: 2024年1月25日 · 1 分 · Nakamura

Drupal: FeedsモジュールでURLからファイルを登録する

概要 Feedsモジュールを使って、URLからファイルを登録する方法です。以下が参考になりました。 https://www.drupal.org/docs/contributed-modules/feeds/feeds-howtos/importing-files 方法 ドロップダウン リストからファイル フィールドを見つけて、ファイルまたは画像フィールドのマッピング ターゲットを作成します。 「ファイルID」には、完全な URL (http/https プレフィックスを含む) へのマッピングを指定します。 「Reference by」で「ファイルID」を選択します。 フィードが既存のファイルを処理するようにアクションを構成します。 これらの変更を構成した後、マッピングを保存します。 CSV 以下のようなCSVファイルを用意して登録します。 title url オタクのイラスト https://1.bp.blogspot.com/-EGQiXxfkfQA/U5gFr1g8qHI/AAAAAAAAhDM/17wwYnxWmHE/s800/otaku.png 結果、以下のように登録されました。 まとめ Feedsモジュールを用いたファイルの登録にあたり、参考になりましたら幸いです。

2024年1月23日 · 更新: 2024年1月23日 · 1 分 · Nakamura

Drupalでファイルを一括削除する方法

Drupalでファイルを一括削除する方法のメモです。以下が参考になりました。 https://www.drush.org/12.x/commands/entity_delete/ drush entity:delete file Drupal\Core\File\Exception\InvalidStreamWrapperExceptionなどが発生し、ファイルが閲覧できなくなってしまった際などの対処法として参考になりましたら幸いです。

2024年1月23日 · 更新: 2024年1月23日 · 1 分 · Nakamura

GitHub Actionsの処理結果をメールで通知する: Gmailの使用

概要 GitHub Actionsの処理結果をメールで通知する機会がありましたので、その備忘録です。 今回はGmailを使います。以下が参考になりました。 https://stackoverflow.com/questions/69947109/sending-email-with-github-actions Gmailの設定 以下に記載があります。2段階認証を有効にして、アプリパスワードを作成します。 https://github.com/dawidd6/action-send-mail?tab=readme-ov-file#gmail アプリパスワードの設定例は以下です。 ローカルでの動作確認 actを使って、ローカル環境でGitHub Actionsを実行します。 https://github.com/nektos/act あるリポジトリで以下のようなファイルを作成します。 name: Notification Workflow on: [push] jobs: send-mail: runs-on: ubuntu-latest steps: - name: Send mail if: success() # この行はデプロイが成功した場合にのみメールを送信するようにします uses: dawidd6/action-send-mail@v3 with: server_address: smtp.gmail.com server_port: 465 username: ${{secrets.MAIL_USERNAME}} password: ${{secrets.MAIL_PASSWORD}} subject: Deployment Completed - ${{ github.repository }} to: ${{secrets.MAIL_TO}} from: ${{ secrets.MAIL_FROM }} body: | Hello, The deployment process for the repository ${{ github.repository }} has been successfully completed. Commit: ${{ github.sha }} Commit link: https://github.com/${{ github.repository }}/commit/${{ github.sha }} Branch: ${{ github.ref }} Best regards, ${{ secrets.MAIL_FROM }} 以下のようなコマンドでシークレットを使うことができました。 ...

2024年1月20日 · 更新: 2024年1月20日 · 2 分 · Nakamura

Omeka Sで非公開ファイルを扱う

概要 Omeka Sでは、リソース(アイテムセット、アイテム、メディアなど)単位で公開/非公開の設定を行うことができますが、メディア等に紐づけられた画像などのファイルについては、非公開の設定が適用されていても、ファイルのURLを知っていれば誰でもアクセスすることができます。通常、以下のようなURLになります。 <Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpg メディアに非公開の設定が適用されていれば、このファイルのURLが知られることは稀かと思いますが、「リンクを知っている全員」がアクセスできてしまう状況を避けたいケースがあります。 上記に対応するモジュールとして、「Access」がありました。 https://omeka.org/s/modules/Access/ 本記事では、本モジュールについて簡単に紹介します。 参考: Drupalの場合 Drupalにおいては、Private filesを使って、上記の問題に対応することができました。この実現にあたっては、以下の記事が参考になりました。 https://wheelercreek.com/blog/how-configure-private-files-directory-drupal-9-10 ファイルをPrivate filesとして登録し、 Access Content や Field Permissions モジュールと組み合わせて、匿名ユーザによるPrivate filesへのアクセスを制限することができました。 Accessモジュールの使い方 本モジュールはIPアドレスによるアクセス制御や Guest モジュールとの組み合わせによる匿名ユーザによるアクセス制御など、多様な設定を行うことができるようです。 今回は、単純な設定として、original(オリジナル)およびlarge(オリジナルより小さいサイズの画像)、medium(ラージよりも小さい画像)などについて、匿名ユーザはoriginalおよびlargeの画像は閲覧できないが、medium以下の画像は閲覧できるようにしてみます。 つまり、非ログインユーザは、大きな画像は閲覧できないが、比較的小さな画像のみ閲覧できる環境を構築します。 インストール 通常の方法でインストールできます。 ウェブサーバの設定 この点が少し面倒かもしれません。以下に記載があります。 https://github.com/Daniel-KM/Omeka-S-module-Access?tab=readme-ov-file#configuration-of-the-web-server 以下、Apacheの例ですが、.htaccessファイルのRewriteEngine Onに後に、以下を追記します。 # Set rule for original and selected derivative files (usually at least large thumbnails). RewriteRule "^files/(original|large)/(.*)$" "/access/files/$1/$2" [P] 上記は、ドメインまたはサブドメインのルートにOmeka Sがインストールされている場合です。その他の方法でインストールされた場合の設定例についても、上記のマニュアルに記載されています。 上記により、<Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpgなどにアクセスすると、<Omekaのインストールディレクトリ>/access/files/original/<ハッシュ値>.jpgというURLに書き換えられます。 書き換えられた後のURLはOmeka Sが動的に作成するもので、IPアドレスやログイン状態などを考慮して、画像を返却するかを決定するようです。 先に紹介したDrupalにおいては、Public filesがファイルが格納されているパス、Private filesがDrupalが動的に生成するURLになるようなので、このような切り替えをOmeka Sでも実現していることになります。 設定 モジュールのインストール後、以下のような設定画面が表示されます。今回の用途では、全てのチェックを外しておきます。 本モジュールを有効にすることにより、リソースごとにAccess levelを設定できるようになります。今回の用途では、禁止を与えます。 「いらすとや」さんの画像を利用しています。Access statusがforbiddenになっていますが、ログインユーザは当該画像を閲覧できています。 一方、非ログインユーザで画像を閲覧した際には、鍵のアイコンが表示されるようになりました。オリジナル画像等にアクセスできていないことが確認できます。 ...

2024年1月14日 · 更新: 2024年1月14日 · 1 分 · Nakamura

Amazon Lightsail上に立てたOmeka SからAmazon SESでメールを送信する

概要 Amazon Lightsail上に立てたOmeka Sからメールを送るには、メールの送信設定が必要なようです。今回は、Amazon SESを使用する方法を紹介します。 https://aws.amazon.com/jp/ses/ 以下のフォーラムでのやりとりが参考になりました。 https://forum.omeka.org/t/configuring-sendmail-or-smtp-for-omeka-s-on-amazon-lightsail/19335/1 Amazon SESの設定 以下のサイトなどを参考にして、Amazon SESの設定を行います。 https://qiita.com/Shun_konno/items/f51ae599b68e0d2d36ea Omeka Sの設定 Omeka S の local.config.php ファイルを以下のように編集します。 <?php return [ 'logger' => [ // ログ設定(必要に応じて) ], 'mail' => [ 'transport' => [ 'type' => 'smtp', // SMTP を使用 'options' => [ 'name' => 'ses-smtp-user', // 任意の名前 'host' => 'email-smtp.us-east-1.amazonaws.com', // SES SMTP サーバーエンドポイント 'port' => 587, // SES がサポートするポート(例: 587) 'connection_class' => 'plain', // 認証タイプ 'connection_config' => [ 'username' => 'your-ses-smtp-username', // SES SMTP ユーザー名 'password' => 'your-ses-smtp-password', // SES SMTP パスワード 'ssl' => 'tls', // SSL タイプ('tls' 推奨) 'use_complete_quit' => true, ], ], ], ], // その他の設定... ]; host には、使用している AWS リージョンに応じた Amazon SES SMTP サーバーのエンドポイントを指定してください。例では us-east-1 リージョンのエンドポイントを使用していますが、必要に応じて変更してください。 username と password は、Amazon SES で生成した SMTP クレデンシャルを使用してください。 まとめ Amazon Lightsailを用いたOmeka Sの利用にあたり、参考になりましたら幸いです。 ...

2024年1月13日 · 更新: 2024年1月13日 · 1 分 · Nakamura

Omeka Sのテーマの一覧を視覚的に確認するページを作成しました。

概要 Omeka Sのテーマの一覧を視覚的に確認するページを作成しました。 https://satoru196.notion.site/satoru196/6f898ed1352e4c9fa013eee635cbabf4?v=02cab757b6cf4df6bfbedfeb85eca0a5 Omeka Sのテーマを探す際は、以下のサイトが便利です。 https://daniel-km.github.io/UpgradeToOmekaS/omeka_s_themes.html しかし、テーマの見た目やスター数を一覧できたほうがさらに便利かと思い、本サイトの以下のソースを利用させていただき、今回新たにページを作成しました。 https://github.com/Daniel-KM/UpgradeToOmekaS/blob/master/_data/omeka_s_themes.csv 作成方法 GitHub GitHub APIをリポジトリの最終更新日とスター数を取得しました。GitHub APIの使用にあたっては、Personal Access Token(PAT)を作成しました。 https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens またOmeka Sのテーマのサムネイル画像はtheme.jpgというファイルが該当するため、その有無を調べて、存在する場合には取得するようにしました。 https://omeka.org/s/docs/developer/themes/theme_functions/ 結果、以下のようなJSONデータを作成しました。 [ { "name": "1972_theme_omekaS", "last_updated": "2022-01-04T09:48:25Z", "stars": 0, "url": "https://github.com/marlara/1972_theme_omekaS", "description": "A theme based on \"The Daily\" in Omeka S, for the digital exhibition \"1972. Moda, storia e design\"", "theme_url": "https://raw.githubusercontent.com/marlara/1972_theme_omekaS/master/theme.jpg" }, { "name": "AgileBaseOmekaTheme", "last_updated": "2023-12-01T11:51:13Z", "stars": 2, "url": "https://github.com/agile-humanities/AgileBaseOmekaTheme", "description": null }, ... ] Notion ウェブページの作成にはNotionを利用しました。 https://www.notion.so/ja-jp/help/public-pages-and-web-publishing REST APIを使い、上記のJSONデータを元に、データベースを更新しました。 https://developers.notion.com/docs/working-with-databases APIの利用にあたっては、API secretを作成する必要がありました。 https://developers.notion.com/docs/create-a-notion-integration データベースはフィルターや並び替え、レイアウトの切り替えなど、とても便利でした。以下はタイムラインビューを使い、テーマ(リポジトリ)の最終更新日を表示した例です。 今後 定期更新 GitHub Actionsを使用して、定期的な更新を行いたいと思います。 ...

2024年1月10日 · 更新: 2024年1月10日 · 1 分 · Nakamura

デジタル源氏物語における校異源氏物語と現代語訳の対応づけ

概要 「デジタル源氏物語」は『源氏物語』に関する様々な関連データを収集・作成し、それらを結びつけることで、『源氏物語』研究はもちろん、古典籍を利用した教育・研究活動の一助となる環境の提案を目指したサイトです。 https://genji.dl.itc.u-tokyo.ac.jp/ 本サイトが提供する機能の一つとして、「校異源氏物語と現代語訳の対応づけ」があります。以下のように、「校異源氏物語」と青空文庫で公開されている与謝野晶子訳の対応箇所がハイライト表示されます。 この記事では、上記の機能を実現するための手順について説明します。 データ 以下のようなデータを作成します。 https://genji.dl.itc.u-tokyo.ac.jp/data/tei/koui/54.xml 「校異源氏物語」のテキストデータに対して、anchorタグを使って、与謝野晶子訳のファイルとIDのペアを対応付ます。 <text> <body> <p> <lb/> <pb facs="#zone_2055" n="2055"/> <lb/> <seg corresp="https://w3id.org/kouigenjimonogatari/api/items/2055-01.json"> <anchor corresp="https://genji.dl.itc.u-tokyo.ac.jp/api/items/tei/yosano/56.xml#YG5600000300"/> やまにおはしてれいせさせ給やうに経仏なとくやうせさせ給 <anchor corresp="https://genji.dl.itc.u-tokyo.ac.jp/api/items/tei/yosano/56.xml#YG5600000400"/> 又の日はよかはに </seg> <lb/> ... このデータの作成にあたっては、以下のツールを開発して使用しました。 https://github.com/tei-eaj/parallel_text_editor 残念ながら2024-01-07時点では動作しませんが、動作イメージは以下をご確認ください。今後、本ツールの改修を行いたいと思います。 https://youtu.be/hOp_PxYUrZk 上記の作業の結果、以下のようなGoogleドキュメントが作成されます。 https://docs.google.com/document/d/1DxKItyugUIR3YYUxlwH5-SRVA_eTj7Gh_LJ4A0mzCg8/edit?usp=sharing 「校異源氏物語」の各行について、対応する与謝野晶子訳のIDを\[YG(\d+)\]の形で挿入されます。 2055-01 [YG5600000300]やまにおはしてれいせさせ給やうに経仏なとくやうせさせ給[YG5600000400]又の日はよかはに 2055-02 おはしたれはそうつおとろきかしこまりきこえ給[YG5600000500]としころ御いのりなとつけか 2055-03 たらひたまひけれとことにいとしたしきことはなかりけるをこのたひ一品の宮 2055-04 の御心ちのほとにさふらひ給へるにすくれたまへるけん物し給けりとみたまひ 2055-05 てよりこよなうたうとひたまひていますこしふかきちきりくはへ給てけれはお 2055-06 も〱しくおはするとのゝかくわさとおはしましたることゝもてさはきゝこえ 2055-07 給[YG5600000600]御物かたりなとこまやかにしておはすれは御ゆつけなとまいり給[YG5600000700]すこし人 2055-08 〱しつまりぬるに[YG5600000800]をのゝわたりにしり給へるやとりや侍とゝひ給へはしか侍 ... 源氏物語の冊毎のGoogleドキュメントがGoogleドライブに保存されます。 https://drive.google.com/drive/folders/1QgS4z_5vk8AEz95iA3q7j41-U3oDdfpx 処理 Googleドライブからのファイル名とIDの一覧を取得 Googleドライブとの接続 #| export import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError #| export class GoogleDriveClient: def __init__(self, credential_path): # If modifying these scopes, delete the file token.json. SCOPES = [ "https://www.googleapis.com/auth/drive.metadata.readonly" ] creds = None # The file token.json stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( credential_path, SCOPES ) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open("token.json", "w") as token: token.write(creds.to_json()) try: service = build('drive', 'v3', credentials=creds) self.drive_service = service except HttpError as e: print(e) print("Error while creating API client") raise e 一覧の取得 ...

2024年1月7日 · 更新: 2024年1月7日 · 2 分 · Nakamura

ro-crate-pyを試す

概要 ro-crate-pyは、Research Object Crates (RO-Crate)を作成および利用するためのPythonライブラリです。 https://doi.org/10.5281/zenodo.3956493 ro-crate-py is a Python library to create and consume Research Object Crates. It currently supports the RO-Crate 1.1 specification. ゴール 以下に示すようなページを作成することを目指します。 https://nakamura196.github.io/rocrate_demo/crate/test/data/ro-crate-preview.html データセットのページ 特定のアイテムのページ JSONデータ 以下のようなJSONデータを作成します。 https://nakamura196.github.io/rocrate_demo/crate/test/data/ro-crate-metadata.json アイテムのIDとしては、以下のOAI-PMHのレコードを使用します。 https://da.dl.itc.u-tokyo.ac.jp/portal/oai?verb=GetRecord&metadataPrefix=dcndl_simple&identifier=oai:da.dl.itc.u-tokyo.ac.jp:fbd0479b-dbb4-4eaa-95b8-f27e1c423e4b アイテムの作成者として、ダミーの値ですが、ORCIDのIDを指定します。 https://orcid.org/0000-0001-8245-7925 データの公開者としては、東京大学のResearch Organization Registry (ROR) を指定します。 https://ror.org/057zh3y96 ライブラリのインストール bagitはrocrateに必須ではありませんが、今回は最終出力をbagit形式にするために使用します。 pip install rocrate pip install bagit from rocrate.rocrate import ROCrate from rocrate.model.person import Person from rocrate.model.contextentity import ContextEntity import os import bagit import shutil import json データ dataset_name = "百鬼夜行図コレクション" dataset_description = "百鬼夜行図(ひやつきやぎうず) 蔭山源広迢写 百鬼夜行は今昔物語などの説話にでてくる言葉で、京の大路を夜な夜な化け物たちが練り歩く様子を表している。" dataset_license = "https://www.lib.u-tokyo.ac.jp/ja/library/contents/archives-top/reuse" item_id = "https://da.dl.itc.u-tokyo.ac.jp/portal/oai?verb=GetRecord&metadataPrefix=dcndl_simple&identifier=oai:da.dl.itc.u-tokyo.ac.jp:fbd0479b-dbb4-4eaa-95b8-f27e1c423e4b" item_name = "百鬼夜行図" item_description = "OAI-PMH(Open Archives Initiative Protocol for Metadata Harvesting)" item_license = "https://www.lib.u-tokyo.ac.jp/ja/library/contents/archives-top/reuse" person_id = "https://orcid.org/0000-0001-8245-7925" person_name = "Satoru Nakamura" org_id = "https://ror.org/057zh3y96" org_name = "The University of Tokyo" ROCrateインスタンスの作成 gen_preview=Trueとすることで、保存時にpreview.htmlを合わせて作成してくれます。 ...

2024年1月2日 · 更新: 2024年1月2日 · 2 分 · Nakamura

GitHubのリポジトリをZenodoと連携する

概要 先日、Mirador3でアノテーションを比較するためのプラグインを公開しました。 https://github.com/nakamura196/mirador-compare-plugin 今回は、このリポジトリをZenodoと接続してみます。 結果、releaseを行うたびに、自動的にDOIが付与されるようになりました。 https://zenodo.org/doi/10.5281/zenodo.10449856 Zenodoでの設定 以下にアクセスして、連携対象のGitHubリポジトリを選択します。 /account/settings/github/ GitHub 以下、必須ではありませんが、Zenodoとの連携に向けて、GitHubリポジトリ上で必要な準備を行います。 CITATION.cffの作成 これを作成することにより、Creators にORCIDのIDが表示されるようでした。 具体的には、以下のようなファイルを作成します。 https://github.com/nakamura196/mirador-compare-plugin/blob/main/CITATION.cff cff-version: 1.1.0 message: "Cite as" authors: - family-names: Nakamura given-names: Satoru orcid: https://orcid.org/0000-0001-8245-7925 affiliation: "The University of Tokyo" website: https://researchmap.jp/nakamura.satoru?lang=en title: "mirador-compare-plugin" doi: 10.5281/zenodo.10449856 上記により、GitHubリポジトリ上にも「Cite this repository」が表示されるようになりました。 バッジの表示 以下が参考になりました。 https://gist.github.com/seignovert/ae6771f400ca464d294261f42900823a 以下のURLにアクセスして、idを取得します。今回は、664611010でした。 https://api.github.com/repos/nakamura196/mirador-compare-plugin このidを使用して、README.mdに以下を追加します。 [![DOI](https://zenodo.org/badge/664611010.svg)](https://zenodo.org/badge/latestdoi/664611010) 結果、以下のようにバッジが表示されました。 READEME.mdへのCite asの追加 ResearchObject/ro-crate-py を参考に、READEME.mdへCite asを追加してみます。 この時、以下に記載があるIDを用いることで、最新のバージョンに遷移するURLを作成することができました。 具体的には、今回は10449856というIDを使って、READMEに追記する内容を作成しました。 [![DOI](https://zenodo.org/badge/664611010.svg)](https://zenodo.org/badge/latestdoi/664611010) The above DOI corresponds to the latest versioned release as [published to Zenodo](https://zenodo.org/records/10449856), where you will find all earlier releases. To cite `mirador-compare-plugin` independent of version, use https://doi.org/10.5281/zenodo.10449856, which will always redirect to the latest release. リリースの作成 プルリクエストとマージ ブランチの作成 ...

2024年1月2日 · 更新: 2024年1月2日 · 1 分 · Nakamura

Drupalのsimple_oauthモジュールを用いたRESTリソースのoauth2認証を試す

概要 DrupalのSimple OAuth (OAuth2) & OpenID ConnectモジュールはOAuth 2.0認証フレームワークRFCの実装と説明されています。 https://www.drupal.org/project/simple_oauth 関連する記事として、cookie認証の例や、jwt認証の例も参考にしてください。 インストール simple_oauthモジュールには、5系と6系があるようですが、今回は5系を使用します。以下でインストールします。 composer.phar require 'drupal/simple_oauth:^5.2' ただし、さくらレンタルサーバを使用している場合、以下のエラーが発生しました。PHP's sodium extensionが必要でした。 composer.phar require 'drupal/simple_oauth:^5.2' ./composer.json has been updated Running composer update drupal/simple_oauth Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - steverhoades/oauth2-openid-connect-server v2.4.0 requires lcobucci/jwt 4.1.5 -> satisfiable by lcobucci/jwt[4.1.5]. - steverhoades/oauth2-openid-connect-server[v2.6.0, ..., v2.6.1] require lcobucci/jwt 4.1.5|^4.2|^4.3|^5.0 -> satisfiable by lcobucci/jwt[4.1.5, ..., 4.4.x-dev, 5.0.0, ..., 5.3.x-dev]. - steverhoades/oauth2-openid-connect-server v2.5.0 requires lcobucci/jwt 4.1.5|^4.2 -> satisfiable by lcobucci/jwt[4.1.5, ..., 4.4.x-dev]. - drupal/simple_oauth[5.2.0, ..., 5.x-dev] require drupal/core ^8 || ^9 -> found drupal/core[8.0.0-beta6, ..., 8.9.x-dev, 9.0.0-alpha1, ..., 9.5.x-dev] but the package is fixed to 10.2.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command. - lcobucci/jwt[4.1.5, ..., 4.4.x-dev, 5.0.0, ..., 5.3.x-dev] require ext-sodium * -> it is missing from your system. Install or enable PHP's sodium extension. - drupal/simple_oauth[5.2.3, ..., 5.2.x-dev] require steverhoades/oauth2-openid-connect-server ^2.4 -> satisfiable by steverhoades/oauth2-openid-connect-server[v2.4.0, v2.5.0, v2.6.0, v2.6.1]. - Root composer.json requires drupal/simple_oauth ^5.2 -> satisfiable by drupal/simple_oauth[5.2.0, ..., 5.x-dev]. To enable extensions, verify that they are enabled in your .ini files: - /usr/local/php/8.1/etc/php.ini - /usr/local/php/8.1/etc/conf.d/apcu.ini - /usr/local/php/8.1/etc/conf.d/imagick.ini - /usr/local/php/8.1/etc/conf.d/mcrypt.ini - /usr/local/php/8.1/etc/conf.d/opcache.ini You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode. Alternatively, you can run Composer with `--ignore-platform-req=ext-sodium` to temporarily ignore these required extensions. Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions. Installation failed, reverting ./composer.json and ./composer.lock to their original content. そこで、以下のサイトを参考に、PHP-sodium 拡張を追加しました。 ...

2024年1月2日 · 更新: 2024年1月2日 · 3 分 · Nakamura