はじめに
hkob の雑記録の第203回目は、昨日追加した曲データベースのリレーションの設定をしてみます。
リレーションプロパティの追加
Lyrics, Musics のプロパティを増やすために、既存の Lyrics, Musics の名前は LyricsStr, MusicsStr に変更しておきました。

ここで、新しいプロパティで Lyrics を追加します。昨日も書いたように多対多の接続のため、無制限のままにします。

同様に Musics も追加します。

結果として以下のようになりました。

Notion API で people データを準備
あとは、LyricsStr に書かれてる文字列から Lyrics の値が設定できればいいだけです。irb で確認してみます。まず、NotionRubyMapping を使えるようにします。
require "notion_ruby_mapping" => true irb(main):002> include NotionRubyMapping => Object irb(main):003> NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] } => "secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
まず、People データベースを読み込みます。
people_db = Database.find "https://www.notion.so/hkob/234d8e4e98ab807ab739fc65d7c36c2c?v=234d8e4e98ab816f87d9000c31a7c656&source=copy_link" => NotionRubyMapping::Database-234d8e4e98ab807ab739fc65d7c36c2c people = people_db.query_database => NotionRubyMapping::List-
タイトルから id を取得する hash を作成してみます。
people_id_hash = people.each_with_object({}) { |person, h| h[person.title] = person.id }
=>
{"和田アキ子"=>"234d8e4e98ab811dbb9fda6c90a9274f",
...
Lyrics を LyricsStr から設定
まず、Songs データベースを読み込み、それぞれのプロパティを取得します。
songs_db = Database.find "https://www.notion.so/hkob/235d8e4e98ab80d1a29adfc13458a29d?v=235d8e4e98ab8184bab2000c7967dc16&source=copy_link" => NotionRubyMapping::Database-235d8e4e98ab80d1a29adfc13458a29d lp = songs_db.properties["Lyrics"] => #<NotionRubyMapping::RelationProperty:0x000000012a19a2a0 ...
まず、Lyrics が空の曲一覧を取得します。途中でエラーが出た時に続きから実行できるようにするためです。
songs = songs_db.query_database(lp.filter_is_empty) => NotionRubyMapping::List-
あとは先ほど作成した hash を使って設定しまくるだけです。
songs.each do |page| sp = page.properties str = sp["LyricsStr"].full_text ids = str.split(", ").map { |k| people_id_hash[k] } sp["Lyrics"].relation = ids p [page.title, str] page.save end ["渡良瀬橋", "森高千里"] ["私はおんち", "森高千里"] ["私の夏", "森高千里"] ["私のように", "森高千里"] ["私の大事な人", "森高千里"] ["私がオバさんになっても", "森高千里"] ["私が変?", "鈴木エキス"] ["忘れ物", "森高千里"] (以下続く)
少し時間はかかりますが、無事に設定が終わりました。

Musics を MusicsStr から設定
あとは Lyrics と同様に Musics でも実行するだけです。
mp = songs_db.properties["Musics"] => #<NotionRubyMapping::RelationProperty:0x000000012a19d4a0 ... songs_db.query_database(mp.filter_is_empty).each do |page| sp = page.properties str = sp["MusicsStr"].full_text ids = str.split(", ").map { |k| people_id_hash[k] } sp["Musics"].relation = ids p [page.title, str] page.save end ["MC 私の「普通の幸せ」ベスト5", ""] ["渡良瀬橋", "斉藤英夫"] ["私はおんち", "高橋諭一"] ["私の夏", "斉藤英夫"] ["私のように", "河野伸"] ["私の大事な人", "森高千里"] ["私がオバさんになっても", "斉藤英夫"] (以下続く)
最後に必要なくなった LyricsStr と MusicsStr のプロパティを削除して、以下のようになりました。CSV インポートでここまで来ることを予定していたのですが、当てが外れました。

おわりに
このくらいの自動化をするには NotionRubyMapping は非常に楽ですね。作った甲斐があります。