🔥
ZoteroのAPIとStreamlitを使ったアプリ開発
概要
ZoteroのAPIとStreamlitを使ったアプリを試作しました。
本記事は、このアプリ開発におけるメモです。
Streamlit
以下の記事がとても参考になりました。
ZoteroのAPI
ZoteroのAPIについて、以下で説明されています。
今回は上記のページで紹介されている以下のライブラリを使用しました。
APIの利用にあたっては、personal library ID
やAPI key
を取得する必要がありますが、READMEのQuickstartの手順に従うと、それらを取得することができました。
以下は、API key
を発行した際の画面です。
Streamlitを用いた開発
以下のリポジトリでソースコードを公開しています。
機密情報
機密情報は、/.streamlit/secrets.toml
というファイルを作成し、そこに記載するようでした。.gitignore
に記載することも忘れないようにしてください。
/.streamlit/secrets.toml
[zotero]
library_id="xxx"
library_type="user"
api_key="xxx"
そして、以下のように呼び出すことができました。
def init_zotero():
library_id = st.secrets["zotero"]["library_id"]
library_type = st.secrets["zotero"]["library_type"]
api_key = st.secrets["zotero"]["api_key"]
return zotero.Zotero(library_id, library_type, api_key)
Zoteroライブラリのコレクション一覧の取得
以下ので、Zoteroライブラリからコレクションの一覧を取得することができました。
def fetch_collections(zot):
""" Zoteroライブラリからコレクション一覧を取得する """
collections = zot.collections()
# 各コレクションからタイトルとキー(ID)を取得
collection_list = [{"name": collection['data']['name'], "key": collection['data']['key']} for collection in collections]
return collection_list
コレクション内のアイテムの取得
以下でコレクション内のアイテムを取得できました。itemType
がattachment
のものはスキップする処理を加えています。
# 文献データをDataFrameに変換
def create_df(zot, collection_id):
if not collection_id:
return pd.DataFrame()
try:
items = zot.collection_items(collection_id)
rows = [{
'title': item['data']['title'],
"itemType": item['data']['itemType'],
"creators": ", ".join(f"{creator['firstName']} {creator['lastName']}" for creator in item['data'].get('creators', [])),
"date": item['data'].get('date', "")
} for item in items if item['data']['itemType'] != "attachment"]
return pd.DataFrame(rows)
except Exception as e:
st.error(f"Failed to load items from collection: {e}")
return pd.DataFrame()
メタタグ設定
以下のような形で、タイトルなどのページ設定を行うことができました。
# ページの設定
st.set_page_config(
page_title="Zotero x Streamlit", # ブラウザのタイトルバーに表示されるタイトル
page_icon="🧊", # ブラウザのタブに表示されるアイコン
# layout="wide", # レイアウトを広いものに設定
# initial_sidebar_state="expanded", # サイドバーの初期状態を展開に設定
menu_items={ # 追加のメニューオプションとともにメタタグ設定
'Get Help': "https://github.com/nakamura196/zotero_streamlit/",
'Report a bug': 'https://github.com/nakamura196/zotero_streamlit/issues',
'About': "App development using [Zotero](https://www.zotero.org/)'s API and Streamlit"
}
)
デプロイ
開発中の画面の右上の「Deploy」ボタンから、Streamlit Community Cloud
に簡単にデプロイできました。
その際、Advanced settings
において、/.streamlit/secrets.toml
に記載した情報を追加することで、サーバ上でも機密情報を利用することができました。
まとめ
Streamlitを使うことで、Webアプリを簡単に作成することができました。
Zotero APIの利用など、参考になりましたら幸いです。
Discussion