長い間、私はMediatombをホームDLNAサーバーとして使用しています。 これは非常に信頼性が高く軽量なサーバーであり、DLNAをサポートする任意のデバイスからvideo-audio-photoアーカイブにアクセスできます。
Mediatombには、指定されたサーバーの制御下でメディアデータを含むディレクトリを追加できるインタラクティブなWEBインターフェイスがあります。 ただし、コンソールではなく、このサーバーのコンソール管理の可能性が必要でした。特に、メディア情報を含むフォルダーを追加および削除する必要がありました。 残念ながら、システムはこれらの操作のための通常のツールを提供していません。そのため、CURLに基づいて小さなスクリプトが作成されました。
おそらく、行われた作業は他の誰かが必要とする可能性があるため、Habréで再現することにしました。
実際には、初期条件、すなわち:
- Mediatomb自体のインストール。
- ストレージとしてMySQLデータベースを使用するためのMediatombのセットアップ
ここでは説明しませんが、Mediatombによって制御されるメディアディレクトリを管理するbashスクリプトを作成する手順に直接進みます。
Mediatombデータベースにアクセスするための追加のMYSQLユーザーを作成する
実際、MYSQLに新しいユーザーを追加する特別な必要はありません
。/etc/mediatomb/config.xml構成ファイルで指定されたユーザーの詳細を使用できます。
<mysql enabled="yes"> <host>localhost</host> <username>mediatomb</username> <database>mediatomb</database> </mysql>
ただし、既存の
mediatombユーザーに
はパスワード
がなく、そのアクセスは
localhostのみに制限されているため、Mediatomb自体が存在する場所とは異なるホストでも機能するスクリプトの場合、MySQLデータベースmediatombに
mtパスワードを持つユーザー
mtを作成します。
reate user 'mt'@'%' identified by 'mt'; grant select on mediatomb.* to 'mt'@'%';
Mediatombライブラリにディレクトリを追加する
Mediatombメディアライブラリに再帰的な走査を有効にしてディレクトリを追加すると、ブラウザは次のリクエストをサーバーに送信します。
http://<mediatomb_ip>:50500/content/interface?req_type=autoscan&return_type=xml&sid=33a2c429c3c4c82e03baca9564f05908&action=as_edit_save&object_id=2f6d6e742f566964656f&from_fs=1&scan_mode=inotify&scan_level=full&recursive=true&hidden=true&cancel=Cancel
ご覧のとおり、カタログを追加するために何らかの方法で計算する必要がある、必要なクエリ属性は次のとおりです。
- セッション ID: sid = 33a2c429c3c4c82e03baca9564f05908
- 追加されたオブジェクトの識別子: object_id = 2f6d6e742f566964656f
セッションID 、簡単に取得できることが判明しました。 Mediatombメインページに初めてアクセスすると、ブラウザは次のリクエストを送信します。
http://<mediatomb_ip>:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid
そして答えを得る:
<?xml version="1.0" encoding="UTF-8"?> <root sid_was_valid="0" sid="a8ffd95c341aa410a44afaeaf354e105" logged_in="1" success="1"/>
したがって、sidで文字列を取得すると同時に、次のように引用符から解放します。
sid=`curl -s "http://<mediatomb_ip>:50500/content/interface?req_type=auth&return_type=xml&sid=null&action=get_sid" | grep sid | awk '{print $3}' | sed -e 's/\"//g'`
オブジェクト識別子がもう少し複雑なため、文字列
2f6d6e742f566964656fは、追加されたオブジェクト(ファイルおよびディレクトリ)へのパスが16進数に変換された文字列の単純なバイトシーケンスであることが
わかりました。 16進数の行は、行
/ mnt / Video (Mediatombに追加したディレクトリ)だけです。
つまり たとえば、bashスクリプトの2番目のパラメーターからobject_Idを取得するには、次のアルゴリズムを使用できます。
catalog=$2 oid="" for ((i=0;$i<${#catalog};i=$(($i+1)))) do sym=`printf '%0.2x' "'${catalog:$i:1}"` oid=$oid$sym done
CURLリクエストで上記のすべてを収集すると、MediaTombライブラリに
/ mnt / Videoディレクトリを追加するコマンドが取得されます。
curl -s -o /dev/null "http://<mediatomb_ip>:50500/content/interface?req_type=autoscan&return_type=xml&$sid&action=as_edit_save&object_id=$oid&from_fs=1&scan_mode=inotify&scan_level=full&recursive=true&hidden=true&cancel=Cancel"
Mediatombライブラリからディレクトリを削除する
Mediatombライブラリからディレクトリを削除することは、次の追加に似ています。
http://<mediatomb_ip>:50500/content/interface?req_type=remove&return_type=xml&sid=ea2d65d2dbc72d96ed1ed37dc1d2bbf6&object_id=686994&all=0&updates=check
ただし、ここの
object_idはすでに、MYSQLデータベースで削除するリソースの識別子です。 次のSQLクエリを使用して、データベースから、たとえば
/ mnt / Videoディレクトリの
object_idを取得できます。
select id from mt_cds_object where location="D/mnt/Video"
したがって、bashスクリプトの2番目の引数からディレクトリ識別子を取得すると、次のようになります。
catalog=$2 oid=`echo "select id from mt_cds_object where location=\"D$catalog\"" | mysql mediatomb | grep -v id`
また、メディアライブラリからディレクトリを削除するためのCURLリクエスト:
curl -s -o /dev/null "http://<meditomb_ip>:50500/content/interface?req_type=remove&return_type=xml&$sid&object_id=$oid&all=0&updates=check"
まあ、それがおそらくすべてです。 最後に、2つのパラメーターを取る
mtombスクリプトの全文を提供します。
mtomb <add | del> < >
GISTリンク:
https :
//gist.github.com/mitshel/6b140467182c3377c000