はじめに
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 が設定されました。

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

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

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

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

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