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

はじめに

hkob の雑記録の第217回目は、昨日リレーションプロパティを設定した Contents に対して、実際にリレーションを設定していきます。

作成したスクリプト

すでに設定は完了しているので、今まで通りにスクリプトを作成するだけです。

#! /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

set_lists_db = Database.find "23dd8e4e98ab80739da0d79d60a9f905"
set_lists_id_hash = set_lists_db.query_database.each_with_object({}) do |set_list, hash|
  name = set_list.properties["Name"].full_text
  hash[name] = set_list.id
end

people_db = Database.find "234d8e4e98ab807ab739fc65d7c36c2c"
people_id_hash = people_db.query_database.each_with_object({}) { |person, h|
  name = person.properties["Name"].full_text;
  h[name] = person.id
}

contents_db = Database.find "23fd8e4e98ab806a9d57ee073d5397b1"
sp = contents_db.properties["SetList"]
query = sp.filter_is_empty
contents_db.query_database(query).each do |c|
  cp = c.properties
  ss = cp["SongStr"].full_text
  as = cp["ArrangeStr"].full_text
  sls = cp["SetListStr"].formula["string"]
  if !ss.empty?
    ids = ss.split(", ").map { |s| songs_id_hash[s] }.compact
    cp["Song"].relation = ids
  end
  if !as.empty?
    ids = as.split(", ").map { |p| people_id_hash[p] }.compact
    cp["Arranges"].relation = ids
  end
  if !sls.empty?
    id = set_lists_id_hash[sls]
    cp["SetList"].relation = [id] if id
  end
  p [sls, ss, as]
  c.save
end

実行結果

実行結果はこんな感じです。

ruby relation_for_contents.rb
["アルバム: Click you Link me", "渡良瀬橋", ""]
["シングル: ペコちゃんの歌", "ペコちゃんの歌", ""]
["アルバム: 男と女2 -TWO HEARTS TWO VOICES-", "雨", ""]
["アルバム: Welcome to My Life", "こんなオイラに誰がした~嵐を呼ぶ男", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "渡良瀬橋", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "Pacific Heaven のテーマ", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "雨", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "私がオバさんになっても", ""]
["ビデオ: Pacific Heaven at Yokohama Arena さい帯血バンク支援コンサート", "一度遊びに来てよ", ""]
["アルバム: もういちど逢いたくて ORIGINAL SOUND TRACK", "まひるの星", ""]

ほぼ1時間かけてスクリプトを実行しましたが、以下のような形で Device type の揺れやスクリプトのミスもあり、300 ページほど設定できていないものがありました。Device type を手動で合わせ、スクリプトのミスも修正した上で再度スクリプトを実行します。

設定できなかった項目

何度か微修正したところ、全ての SetList が設定されました。

SetList 設定後

必要なくなったテキストプロパティを削除したところ、以下のように整理できました。

テキストプロパティ削除後

Name の自動設定

これまでタイトルは現在 Number に設定されている数値が入っていました。Set List と同様にタイトルは Number、曲名、Version から自動生成したいです。将来的には名前のバージョン違いにも対応させる予定ですが、まずはこの自動合成だけをオートメーションで作成します。

Set 'Name' for Contents オートメーション

オートメーションの実行

まずはテストで最初のページだけ試してみます。無事にタイトルが書きかわりました。

1ページのみテスト

うまく動いているようなので、全てのページのタイトルを消してみました。バージョンなどの情報も無事に入っているようです。

全ページ Name 設定

おわりに

数が多いので時間がかかりましたが、無事に Contents の移行が終わりました。Name の部分に曲の情報が正しく入るのは嬉しいですね。

hkob.notion.site