【Notion API × Google Apps Script】Notionのテーブル上のデータを定期的にアーカイブする #2
こんにちは、おしょうです。
Notion開発チームがかなり頑張っておられ、APIのバージョンアップがしばしば入りますね。
実は、前回の自動アーカイブシステムを私が作成したのが8/15だったんですが、その直後8/16にバージョンアップがなされたようで、(記事公開時はすでに最新バージョンが公表されていたんですけど)Google Apps Scriptのコード上でAPIバージョンを最新にしていなかったために、スクリプトが動かなかったという。。。笑
今後も更新されていくことを考えると、更新が無いかしっかり監視し、API更新の度にGoogle Apps Scriptのコードを手動で変更する、、、なんてのはナンセンスですね。
ここもGoogle Apps Scriptで自動化してしまいましょう。
1. 関数作成 - 最新バージョン取得
通常、APIの最新バージョンを調べるには、NotionAPIの本家サイトで調べられます。リンクはこちらです。アクセスすると、上の方に最新バージョンが表示されます。
上記リンクにアクセスした画面が下の画像で、赤い丸をつけているところが、バージョン名です。
![画像1](https://assets.st-note.com/production/uploads/images/60472429/picture_pc_d41f8f2adc8ab5d46014a7d8ffb51d85.png?width=1200)
ところがこのバージョン部分、ソースそのままではなく、スクリプトで表示させているものでした。どんな仕掛けか全くわかりませんが、とりあえずそれっぽい文言を見つけたので、最終的に以下のように抽出しました。
const getVersion = () =>{
const url = "https://developers.notion.com/reference/versioning"
let reg = /"default".*?<\/script>/g
let htmldata = UrlFetchApp.fetch(url).getContentText("utf-8")
let result = htmldata.match(reg)[0].match(/([0-9]{4}-[0-9]{2}-[0-9]{2})/g)[0]
return result
}
正規表現で抽出するのが一番シンプルかと思い、そのように実装しました。
2. グローバル定数の改造
前回のグローバル領域については、以下の通りでした。
const ENDPOINT_PAGE = "https://api.notion.com/v1/pages/"
const ENDPOINT_DATABASE = "https://api.notion.com/v1/databases/"
const KEY = "[自分のシークレットkey]"
const HEADERS = {
"Authorization" : `Bearer ${KEY}`,
"Notion-Version" : "2021-07-27",
}
const ID_DATABASE = "[データベースのID]"
これを改造していくわけですが、ここで1点注意です。
HEADERSの中でNotion-Versionを定義するよりも前に、バージョン情報を取得しておく必要があります。言わずもがな、グローバル部分は遡上してくれないので。。。
なので、先程のバージョン取得関数は、コードの一番最初に定義しておきます。
続いて、これまでHEADERSのNotion-Versionにそのまま文字列を入力していましたが、その文字列部分で先程の関数を実行させるように変更します。
そうすると、以下のようなコードになります。
const getVersion = () =>{
const url = "https://developers.notion.com/reference/versioning"
let reg = /"default".*?<\/script>/g
let htmldata = UrlFetchApp.fetch(url).getContentText("utf-8")
let result = htmldata.match(reg)[0].match(/([0-9]{4}-[0-9]{2}-[0-9]{2})/g)[0]
return result
}
const ENDPOINT_PAGE = "https://api.notion.com/v1/pages/"
const ENDPOINT_DATABASE = "https://api.notion.com/v1/databases/"
const KEY = "[自分のシークレットkey]"
const HEADERS = {
"Authorization" : `Bearer ${KEY}`,
"Notion-Version" : `${getVersion()}`,
}
const ID_DATABASE = "[データベースのID]"
3. まとめ
これで、毎度スクリプトが走る度に、バージョンを自動チェックしてくれるようになりました。
懸念するところとしては、正規表現で抽出した部分を本家サイトが変えてしまったときに対応が必要な点ですね。
とりあえず、Notion APIのバージョン管理に困っている方がいらっしゃれば、今回の記事を参考になさってみてくださいね。