👻
Pythonを使ってOmeka Sにメディアをアップロードする方法
概要
Pythonを使ってOmeka Sにメディアをアップロードする方法の備忘録です。
準備
環境変数を用意します。
.env
OMEKA_S_BASE_URL=https://dev.omeka.org/omeka-s-sandbox # 例
OMEKA_S_KEY_IDENTITY=
OMEKA_S_KEY_CREDENTIAL=
初期化します。
import requests
from dotenv import load_dotenv
import os
def __init__(self):
load_dotenv(verbose=True, override=True)
OMEKA_S_BASE_URL = os.environ.get("OMEKA_S_BASE_URL")
self.omeka_s_base_url = OMEKA_S_BASE_URL
self.items_url = f"{OMEKA_S_BASE_URL}/api/items"
self.media_url = f"{OMEKA_S_BASE_URL}/api/media"
self.params = {
"key_identity": os.environ.get("OMEKA_S_KEY_IDENTITY"),
"key_credential": os.environ.get("OMEKA_S_KEY_CREDENTIAL")
}
ローカルファイルをアップロードする
def upload_media(self, path, item_id):
files = {}
payload = {}
file_data = {
'o:ingester': 'upload',
'file_index': '0',
'o:source': path.name,
'o:item': {'o:id': item_id}
}
payload.update(file_data)
params = self.params
files = [
('data', (None, json.dumps(payload), 'application/json')),
('file[0]', (path.name, open(path, 'rb'), 'image'))
]
media_response = requests.post(
self.media_url,
params=params, files=files
)
# レスポンスを確認
if media_response.status_code == 200:
return media_response.json()["o:id"]
else:
return None
IIIF画像をアップロードする
以下のようなIIIF画像のURLを指定して登録します。
https://dl.ndl.go.jp/api/iiif/1288277/R0000030/info.json
def upload_media(self, iiif_url, item_id):
payload = {
'o:ingester': 'iiif',
'file_index': '0',
'o:source': iiif_url,
'o:item': {'o:id': item_id},
}
media_response = requests.post(
self.media_url,
params=self.params,
headers={'Content-Type': 'application/json'},
data=json.dumps(payload)
)
# レスポンスを確認
if media_response.status_code == 200:
return media_response.json()["o:id"]
else:
return None
まとめ
Omeka Sへの画像登録にあたり、参考になりましたら幸いです。
Discussion