FileMakerメディア管理の作り方 R8 メタデータテーブル

FileMaker メディア管理の作り方、8個目のバージョン。メタデータ用テーブルを追加し、軽いメタデータの取得をやっておきます。

R8 概要と使い方

前回R7の中で「多分これが第一期の最後」と言ってたやつは誰だ。誰でしょう。さて第一期の最後となるR8です。今回はメタテーブルを追加し、軽いメタデータの取得をやっておきます。

というのも、「第一期」のマイ定義は「FileMaker Proの機能だけで成立する作りかた」です。なら、FileMaker の関数 GetContainerAttribute まで含めてしまいましょうと思い、こうなりました。

mediaDBR8-overview

R8 では、これまで「フリースペース」だったところにメタデータのポータルを置きました。

meta slide

この情報はインポートと同時に取得しません。取って付けたオマケ機能的扱いです。メディアをインポートした後、ボタンで取得します。現在レコード単体または対象レコードすべてのいずれかの取得ができます。

ポップアップでグループを絞り込んだり検索したりできます。

以上が追加した機能のすべてで、このメタデータを使って何かが劇的に変化したということはありません。ただポータルで確認できるようになっただけです。

メタデータ用テーブルにデータが入ったので、工夫によっていろいろできるかもしれません。各々の目的に応じて、如何様にもなる余地を残しました。

R8 意味的なことがら

今回取得する情報は GetContainerAttribute 関数によるものです。

以前、FileMakerでメディア管理 – メタデータの取得 という記事でmetaデータ取得をレベルに分けました。

LEVEL 1 何もしない
LEVEL 2 GetAsText
LEVEL 3 GetContainerAttribute
LEVEL 4 AppleScript
LEVEL 5 ExifTool

LEVEL 3 GetContainerAttribute までが FileMaker Pro の機能で成り立ちます。今回がそれです。

実際の話、GetContainerAttribute で取得できるデータは大したものじゃないです。このバージョンの目的は、実はメタデータそのものではなく、GetContainerAttribute の限界を確認することです。そしてもうひとつ、取得の仕組みを組み込むことそのものにありました。

GetContainerAttribute の限界

GetContainerAttribute で取得できるデータのすべては以下の通りです。

取得できる属性
グループ 属性 返される値 データタイプ
General
filename ファイルの名前。 テキスト
MD5 暗号化ハッシュ関数 MD5 を適用した結果。 テキスト
storageType データを保存する方法 テキスト
fileSize ファイルのサイズ (バイト単位)。 数字
internalSize データベースファイル内のサイズ (バイト単位) 数字
externalSize 参照ファイルのサイズまたはサイズ合計。 数字
externalFiles 関連付けられた外部ファイルの一覧 テキスト
Images
width イメージの幅をピクセル単位で示す数字。 数字
height イメージの高さをピクセル単位で示す数字。 数字
dpiWidth イメージの水平 DPI を示す数字。 数字
dpiHeight イメージの垂直 DPI を示す数字。 数字
transparency アルファチャンネルがあれば 1 数字
Photos
orientation 写真の向きを示す数字と説明: テキスト
created 写真の初期のタイムスタンプ。 タイムスタンプ
modified 写真の最新のタイムスタンプ。更新されていない場合は、空。 タイムスタンプ
latitude 写真の保存場所の緯度。 テキスト
longitude 写真の保存場所の経度。 テキスト
make 写真に使用されたカメラの製造元。 テキスト
model 写真に使用されたカメラの型。 テキスト
Audio
title オーディオのタイトル。 テキスト
artist オーディオの演奏者名。 テキスト
album オーディオが入っているアルバム名。 テキスト
year オーディオの発売年。 テキスト
track オーディオのトラック番号とカウント数。 テキスト
genre オーディオのジャンル。 テキスト
composer オーディオの作曲者。 テキスト
coverArt アルバムの表紙のイメージ。 オブジェクト
duration オーディオの所要時間。 時刻
bitRate ビットレート (kbps)。 数字
Barcodes
barcodeText バーコードの内容。 テキスト
barcodeType バーコードの種類。 テキスト
Signatures
signed 署名が挿入された時刻のタイムスタンプ。 タイムスタンプ

https://help.claris.com/ja/pro-help/content/getcontainerattribute.html?Highlight=GetContainerAttribute

 

MD5が気軽に得られたり、バーコードを扱えるなど有能ですが、メディアカタログとしてはあまり多くの情報は得られません。それに、ファイルの状態によっては全然取得できないこともあります。

得られるデータは「取得できたりできなかったり」するものであり、ということはつまり、これで得られるデータをシステムの根幹に据えるようなことはできません。

これが GetContainerAttribute の限界であり、FileMaker Pro の機能だけでメディア管理を作る限界ということであります。

ということで、その分岐点を見定めるという意味を込めて、R8 でGetContainerAttributeによるメタデータを敢えて追加しました。

R8 仕組み編

ここからは、作り手目線で仕組みについてもう少し詳しく行きます。作り手目線に興味ない方はここまでで十分でございます。

ということで、以下の取り組みを投入しました。

1. メタ用テーブルを作って、データを流し込むスクリプトを作った
2. それをポータルに表示し、絞り込んだり検索したりを可能にした

それぞれ見ていきましょう。

メタデータテーブルにレコード作成

metaData テーブル

metaData というテーブルを新規に作って、フィールドを作成しました。基本は次の三つです。

  • ID … メインデータとリレーションするので ID は必須です。
  • Key … 項目名
  • Value … 値

あとは Key を束ねる「group」と情報元を記す「tool」があります。それ以外はフィルタ用のグローバルな入れ物をいくつか作成しています。

データ固まりをレコードに分配

このテーブルに GetContainerAttribute で得られるデータを流し込みレコード化します。

まず GetContainerAttribute (オブジェクト ; “all” ) で情報の固まりを入手、グローバルなフィールドに格納します(しなくてもいいけど一応します)

スクリプトで metaData テーブルに分配・レコード化します。情報の固まりは「改行区切りのリスト」と言えますから、ループで1行ごと処理します。

1行毎に分解すると、このテキストの場合、次の三種類が想定されます。

空白行
[グループ名] の行
項目: 値 の行

空白なら何もせず、[グループ名]ならグループ名を変数に保存し、「項目: 値」なら項目と値に分解した上で新規レコードを作成し必要フィールドを埋めていきます。

このことは以前すでに書いておりまして、より詳細は以下を参照してください。

FileMaker メディア管理 – メタデータの取得と利用(LEVEL 3 編)

ポータルの絞り込みや検索

metaData テーブルをポータルに表示します。

ポータルの難しい点はどこでしょう。自由なフィルタとソートですね。不自由なら簡単ですが自由を得ようとすると難易度上がります。自由は楽に与えられるものではなく勝ち取るものでその維持には不断の努力が必要です。でないと日本みたいな独裁&奴隷国にすぐになってしまいます。あれ?

ポータルフィルタ

えーと、ここでは自由なフィルタについてです。ポータルでは普通の検索ができなくてすべて「ポータルレコードのフィルタ」に設定します。

目指すのは各フィールドをポップアップや検索窓で絞り込むことです。

まず、指定するためのグローバルフィールドを作りました。「tool」「group」「key」の各フィールド、そして守備範囲の広い(value と key)検索窓用の4つです。
portalFilter_tool
portalFilter_group
portalFilter_key
portalFilter_search

フィルタでは上記フィールドの内容を複合的に絞り込む計算式を書いておきます。

ポータルのフィルタ設定は長年鬼門でした。その理由は「条件に当てはまらない場合」つまりフィルタしない素の状態、デフォルト指定の処理を書くのに苦労したからです。

でもついに知りました。条件に当てはまらない場合「 1 」と書けばいいだけでした!

If ( not IsEmpty ( metadata::portalFilter_tool ); metadata::tool = metadata::portalFilter_tool ; 1 )

and

If ( not IsEmpty ( metadata::portalFilter_group ); metadata::group = metadata::portalFilter_group ; 1 ) 
and

If ( not IsEmpty ( metadata::portalFilter_key ); PatternCount ( metadata::key ; metadata::portalFilter_key ) ; 1 )

and

If ( not IsEmpty ( metadata::portalFilter_search ); PatternCount ( metadata::key ; metadata::portalFilter_search ) or PatternCount ( metadata::value ; metadata::portalFilter_search ) ; 1 )

tool と group は ” = ” 他は PatternCount を使っていますが、これは tool と group はポップアップしか使わない想定だからです。

準備としてはどのグローバルフィールドを配置しても使えるようにしておきつつも、実際にはグループと検索窓だけを配置しました。

info slide - metadata panel filter

指定用のグローバルフィールドにはスクリプトトリガ OnModify にスクリプトをセットします。このスクリプトは、検索窓用に「入力ごとにフィールドに戻る」ことや、空の場合に空を再入力してポータルを更新することを行わせます。

OnModify トリガのスクリプト

これ以外にあとは、グローバルフィールドごとのクリアボタンのスクリプトなんかもあります。ボタンのスクリプト引数にフィールド名を仕込んでおき、そのフィールドをクリアして OnModify のスクリプトを発動させます。

本日の新機能で追加したスクリプトはたったこれだけでした。

ダウンロード

ダウンロードできます。お試しください。



DownloadMediaDB_R8.zip

FileMaker Pro v19 が必要です。一部機能がMac専用です。
たまに修正版がアップされることがあります。
現在のバージョン:R8 2023/4/23 update

第一期の終わり

今回のR8 が多分、第一期の最後となります(またもや多分と言っておりますが💦)

次の展開の予告ですが、AppleScript やら Xcode のコマンドやら Exiftool やらをガシガシ使っていくことになりまして、完全にMac専用だし「そんなややこしいのはご免だ」という方もおられると思いますので、第一期の節目にするのが妥当と考えました。

このR8の状態からさらなる工夫を凝らし機能を追加していくことも十分に可能ですので、各々がお好みで発展させ育てていかれれば幸いです。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください