GoogleKeepをAstroにインポートしてみた

Astro
Astro GoogleKeep

はじめに

普段GoogleKeepのエクスポートデータを定期的にローカルにエクスポート保存していて、それをそのままだだと使いづらい点があったりするため ブログとして使用しているastroにインポートしてみました。

ほしい機能

  • インポート
  • ラベル(GoogleKeep)を、タグ(Astro)に変換し抽出できる

GoogleKeepのエクスポートデータの構造

{
"attachments": [
{
"filePath": "1671782424039.294922.1696507546.jpg",
"mimetype": "image/jpeg"
}
],
"color": "ORANGE",
"isTrashed": false,
"isPinned": false,
"isArchived": false,
"textContent": "",
"title": "幽☆遊☆白書",
"userEditedTimestampUsec": 1671785529608000,
"createdTimestampUsec": 1671782420675000,
"labels": [
{
"name": "カートリッジリーダー(SaveData)"
},
{
"name": "SuperFamicom"
}
]
}

取り込む方法

Astroにはcontents collectionがあるので、フォルダを作って入れる。 Labels.txtは、ラベル全部が記述されてるテキストファイルなのでそれも梱包しておく。(blogのタグのように全markdownファイル、コンテンツから抽出しなくていいようにする)

┗src
 ┗content
  ┗blog
  ┗googlekeep
    ┗Labels.txt
    ┗零 眞紅の蝶.json
    ┗零〜zero〜.json

src/content.config.ts

const googlekeepCollection = defineCollection({
loader: glob({ base: './src/content/googlekeep', pattern: '**/*.json' }),
schema: z.object({
attachments: z.array(z.object({
filePath:z.string(),
mimetype:z.string()
})).optional(),
color: z.string().optional(),
isTrashed: z.boolean().optional(),
isPinned: z.boolean().optional(),
isArchived: z.boolean().optional(),
textContent: z.string().optional(),
title: z.string().optional(),
// userEditedTimestampUsec: z.number(),
// createdTimestampUsec: z.number(),
textContentHtml: z.string().optional(),
labels: z.array(z.object({
name: z.string()
})).optional()
}),
});
export const collections = {
'blog': blogCollection,
'googlekeep': googlekeepCollection,
};

blogの取得と同じようにデータが読み取れます。

const googlekeeps = await getCollection('googlekeep')

まとめ

無事、読み取れるようになりました。 同じ様なjson構造のものも読み取れそう。