single.php

JellyfinのライブラリでComicInfo.xmlが読み込まれない場合の対処法

メディアサーバーとして使っている[Jellyfin]のメタデータをComicInfo.xmlを使って適用したい場合に、配置しても読み込まれない場合があったので検証した結果の備忘録的な投稿です。

ComicInfo.xmlでメタデータを設定

Jellyfinでは、作者や発行元など、Bookライブラリのメタデータを[ComicInfo.xml]など外部ファイルとして配置できます。

[ComicInfo.xml]で利用できるメタデータのスキーマは、こんな感じで公開されています。(と言っても、すべてのメタデータがJellyfinで適用される訳ではないので、あしからず)

しかし、追加するXMLの書式によっては Jellyfin に無視されてしまうので注意が必要です。

原因はXML宣言のエンコード部分

最初は、XML部分の書式を疑っていたんですが、原因はXMLの宣言部分でした。

最初に、読み込まれるXMLファイルです。

<?xml version="1.0" ?>
<ComicInfo xmlns:xsd="http://w3.org" xmlns:xsi="http://w3.org-instance">
  <Title>本のタイトル</Title>
  <Publisher>出版元</Publisher>
  <LanguageISO>ja</LanguageISO>
</ComicInfo>

最も一般的に使われそうな、この形では無視されます。

<?xml version="1.0" encoding="utf-8"?>
<ComicInfo xmlns:xsd="http://w3.org" xmlns:xsi="http://w3.org-instance">
  <Title>本のタイトル</Title>
  <Publisher>出版元</Publisher>
  <LanguageISO>ja</LanguageISO>
</ComicInfo>

文字コード部分を省略した形でも、無視されます。

<?xml version="1.0"?>
<ComicInfo xmlns:xsd="http://w3.org" xmlns:xsi="http://w3.org-instance">
  <Title>本のタイトル</Title>
  <Publisher>出版元</Publisher>
  <LanguageISO>ja</LanguageISO>
</ComicInfo>

XMLの宣言部分を削除しても、無視されます。

<ComicInfo xmlns:xsd="http://w3.org" xmlns:xsi="http://w3.org-instance">
  <Title>本のタイトル</Title>
  <Publisher>出版元</Publisher>
  <LanguageISO>ja</LanguageISO>
</ComicInfo>

論理的には訳が分からないですが、検証した結果からすると、XMLの宣言部分は必要で、バージョンが記載される部分の後ろに ” ” (半角スペース)が必要という結論になりました。

仕様なのかバグなのか多少、気持ちが悪い面がありますが、とにかくスペースが無いと[ComicInfo.xml]を読み込んでくれません。

コードで書く場合

PythonでXMLを生成しているような場合には、次の方法で半角スペースを付けた形で出力ができました。

from xml.dom.minidom import parseString
import xml.etree.ElementTree as ET

root = ET.Element('ComicInfo')
root.set('xmlns:xsd', 'http://w3.org')
root.set('xmlns:xsi', 'http://w3.org-instance')

title = ET.SubElement(root,'Title')
title.text = "本のタイトル"

publisher = ET.SubElement(root, 'Publisher')
publisher.text = "出版元"

language = ET.SubElement(root, 'LanguageISO')
language.text = "ja"


documentstring = ET.tostring(root, 'utf-8')
docum = parseString(documentstring)
with open(os.path.join(row[0], XMLNAME), 'w', encoding='utf-8') as f:
    docum.writexml(f, indent='', addindent='  ', newl='\n')

まとめ

[Jellyfin]のメタデータをComicInfo.xmlを使って適用したい場合に、配置しても読み込まれない場合の原因について書きました。

原因は、XML宣言部分の書き方でした。

XML宣言部分は必要で、省略すると無視されてしまいます。

さらに、バージョンを記載した後に半角スペースを1つ必要というクセが強めな仕様でした。

[Jellyfin]で[ComicInfo.xml]を設置しても読み込まれない人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です