森高千里データベースの再構築(12) : hkob の雑記録 (212)

はじめに

hkob の雑記録の第212回目は、テレビ出演や書籍発売などの情報を保持する Activities を追加します。

ER図

Activities は Songs に二つ接続します。 TV 出演の Performances と CM の Tieup songs です。

ER図

Activities のエクスポート

Activities は以下のプロパティをエクスポートすることにします。もともとは TV Station / Distribution / Publisher / Company はタイプごとに異なったプロパティを用意していたのですが、数式で Publishers として一つにまとめてしまいました。また、日付範囲があるので、開始日と終了日の二つのプロパティに分けています。

Activities のプロパティ選別

作成した CSV ビューはこんな感じです。

CSV ビュー

前回と同様に CSV に書き出し後、リレーションの URL 削除をしてしまいます。

sed 's/ (https:\/\/www.notion.so[^)]*)//g' Activities\ ec88eba652474d6781309a77d67fddf5.csv | sed 's/\([0-9][0-9]*\)\/\([0-9][0-9]*\)\/\([0-9][0-9]*\)/\1-\2-\3/g' > Activities.csv

変換結果は以下のようになります。Performances, Tieup Song を作成するので、それぞれ Str とタイトルを修正しています。

Name,Type,Sub type,Start date,End date,Publishers,Author,Photographer,PerformancesStr,Tieup songStr,Comment,Official link
TVハッカー,レギュラー番組 (テレビ),,1987419日,1987927日,フジテレビ,,,,,毎週日曜 20:00 - 20:54,
あいつに恋して,映画,,1987530日,1987530日,東宝,,,,NEW SEASON,主題歌,
銀河テレビ小説 まんが道・青春編,レギュラー番組 (テレビ),,1987727日,1987814日,日本放送協会,,,,,,
パイオニア 「留守番テレフォン TF-A5」,CM,,1988223日,19881114日,パイオニア,,,,ミーハー,,

Activities の作成 & インポート

森高千里DBの下に作成したいので、また Cmd-Opt-9 で新規ページを作成します。この新規ページを開き、インポートを実施しました。

CSV 列の設定

インポートを実行しました。

インボート後

日付範囲に復元

まず、数式で日付範囲を作成します。

二つの日付から日付範囲を作成

数式の内容を Start date にコピーし、Date というタイトルに戻します。また、数式と End date は削除します。

日付範囲設定後

リレーションの作成

Performances リレーションを追加します。多対多の接続であり、双方向リレーションも追加します。

Performances relation

Tieup song リレーション

Notion API で Device データを準備

昨日と同様に複数プロパティから id を取得したりする必要があり、かなり面倒な処理となるので、スクリプトを記載します。Device は Name と Device type で一意のページを取得します。

#! /usr/bin/env ruby

require "notion_ruby_mapping"
include NotionRubyMapping
NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] }

songs_db = Database.find "235d8e4e98ab80d1a29adfc13458a29d"
songs_id_hash = songs_db.query_database.each_with_object({}) do |song, hash|
  name = song.properties["Name"].full_text
  hash[name] = song.id
end

activities_db = Database.find "23fd8e4e98ab80f58875d31a2ea5d766"
pp = activities_db.properties["Performances"]
tp = activities_db.properties["Tieup song"]
query = pp.filter_is_empty.and(tp.filter_is_empty)
activities_db.query_database(query).each do |a|
  ap = a.properties
  ps = ap["PerformancesStr"].full_text
  ts = ap["Tieup songStr"].full_text
  if !ps.empty?
    ids = performances_str.split(", ").map { |p| songs_id_hash[p] }.compact
    ap["Performances"].relation = ids
  end
  if !ts.empty?
    ids = tieup_str.split(", ").map { |p| songs_id_hash[p] }.compact
    ap["Tieup song"].relation = ids
  end
  p [a.title, ps, ts]
  a.save
end

実行結果は以下のようになりました。

ruby relation_for_activities.rb
["STEP BY STEP 森高千里写真集", "", ""]
["私がオバさんになっても", "", ""]
["PEACHBERRY", "", ""]
["i-Realite", "", ""]
["Opera", "", ""]
["りくつじゃない", "", ""]
["わかりやすい恋", "", ""]
["朱夏 NEW SEASON", "", ""]
["『森高千里「この街」が大好きよ』", "", ""]
["「森高千里の暮らしのレッスン」", "", ""]
["ハウス食品「ジャワカレー」", "", ""]
["森高千里としか言えない", "", ""]
["武田薬品「ハイシーホワイト2」「ハイシーBメイト2」", "", ""]
["トヨタ「カローラ SPACIO」", "", ""]
["キリンビバレッジ「ナチュラルズ」", "", ""]
["サントリー 「アイスウォッカ", "", "Hey, VODKA!"]
["大塚製薬 「第1回ポカリスエット・イメージガール・コンテスト」グランプリ受賞", "", ""]
["「熊本未来国体」", "", "未来"]
["映画「もういちど逢いたくて 星月童話」", "", "まひるの星"]
["東芝日曜劇場「海まで 5 分」", "", "海まで 5 分"]
["めざましテレビ テーマソング", "", "ララ サンシャイン"]
["Count Down TV オープニング・テーマ", "", "So Blue"]

結果として以下のようにリレーションが設定できました。

スクリプト実行後

必要なくなったプロパティを削除しました。

最終的なインポート結果

おわりに

Activities も 182件無事にインポートできました。

hkob.notion.site