読んだ本をデータベース化して自分の血肉にしていく

本を読んで、「なるほど、良いお話だったな」と思うだけではもったいないですよね。
インプットした情報だけでなくて、そのとき自分が思ったこと、思いついたアイデアなどをセットでデータベースにしていくと、より多くのことを一冊の本から得ることができると思います。

そこで、本を読んだタイミングですぐにiphoneから本の情報をデータベースにする仕組みを作りました!

今回はその具体的な方法をご紹介したいと思います:sunny:

##出来上がりはこんな感じ
・FileMaker Goで本のバーコードを撮影
・OpenBDで本の情報を取得
・自分なりの感想やジャンル整理など
・Notionに本の情報を送る

https://twitter.com/zemiseipen/status/1467397068381913088?s=20

🔽
Notionのデータベースに追加される
![スクリーンショット 2021-12-05 16.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/e76e5999-b954-3082-ea8b-3f6bda96fc6e.png)


##早速紹介していきます！


###まずFileMakerのテーブル、レイアウトはこれだけ用意
![スクリーンショット 2021-12-05 17.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/5ed102d0-9285-4f9a-e08c-20cd4ce2b717.png)

データベースはNotionに送られるので、レコードは増えない設計です。
FileMaker GoをServerなしで利用する場合、このような使い方だと安心だな〜と思います。


###ISBNコードから本の情報を得る

[openBD](https://openbd.jp)という登録不要で無料のAPIを使います！

URLから挿入スクリプトでAPIを叩きます。　例) ISBN：9784130627252　

```
https://api.openbd.jp/v1/get?isbn=9784130627252
```

返ってきたもの　（をJSONFormatElementで綺麗にした）

```JSON
[
	{
		"hanmoto" : 
		{
			"author" : 
			[
				{
					"dokujikubun" : "著",
					"listseq" : 1
				}
			],
			"datemodified" : "2017-08-21 00:00:00",
			"dateshuppan" : "2016-03-01",
			"genshomei" : "",
			"hanmotoinfo" : 
			{
				"facebook" : "",
				"name" : "東京大学出版会",
				"twitter" : "",
				"url" : "",
				"yomi" : "トウキヨウダイガクシユツパンカイ"
			},
			"ndccode" : "",
			"zaiko" : 11,
			"zasshicode" : ""
		},
		"onix" : 
		{
			"CollateralDetail" : 
			{
				"SupportingResource" : 
				[
					{
						"ContentAudience" : "01",
						"ResourceContentType" : "01",
						"ResourceMode" : "03",
						"ResourceVersion" : 
						[
							{
								"ResourceForm" : "02",
								"ResourceLink" : "https://cover.openbd.jp/9784130627252.jpg",
								"ResourceVersionFeature" : 
								[
									{
										"FeatureValue" : "D502",
										"ResourceVersionFeatureType" : "01"
									},
									{
										"FeatureValue" : "9784130627252.jpg",
										"ResourceVersionFeatureType" : "04"
									}
								]
							}
						]
					}
				],
				"TextContent" : 
				[
					{
						"ContentAudience" : "00",
						"Text" : "「気象学のバイブル」とも評されるロングセラーテキスト．大気の構造から放射，降水，大気力学まで，平易でコンパクトな解説はそのままに，今回の補訂版では地球環境問題に関する記述をアップデートする．気象予報士試験のための知識を身につけるうえでも最適．",
						"TextType" : "03"
					},
					{
						"ContentAudience" : "00",
						"Text" : "序章\n1. 太陽系のなかの地球\n2. 大気の鉛直構造\n3. 大気の熱力学\n4. 降水過程\n5. 大気における放射\n6. 大気の運動\n7. 大規模な大気の運動\n8. メソスケールの気象\n9. 成層圏と中間圏内の大規模な運動\n10. 気候の変動\n付録（1. よく使う単位　2. 天気図に使う記号　3. よく使う数値）\n索引",
						"TextType" : "04"
					}
				]
			},
			"DescriptiveDetail" : 
			{
				"Contributor" : 
				[
					{
						"ContributorRole" : [ "A01" ],
						"PersonName" : 
						{
							"collationkey" : "オグラ　ヨシミツ",
							"content" : "小倉　義光"
						},
						"SequenceNumber" : "1"
					}
				],
				"Extent" : 
				[
					{
						"ExtentType" : "11",
						"ExtentUnit" : "03",
						"ExtentValue" : "320"
					}
				],
				"Language" : 
				[
					{
						"CountryCode" : "JP",
						"LanguageCode" : "jpn",
						"LanguageRole" : "01"
					}
				],
				"ProductComposition" : "00",
				"ProductForm" : "BA",
				"ProductFormDetail" : "B108",
				"Subject" : 
				[
					{
						"MainSubject" : "",
						"SubjectCode" : "3044",
						"SubjectSchemeIdentifier" : "78"
					}
				],
				"TitleDetail" : 
				{
					"TitleElement" : 
					{
						"TitleElementLevel" : "01",
						"TitleText" : 
						{
							"collationkey" : "イッパンキショウガク",
							"content" : "一般気象学　第2版補訂版"
						}
					},
					"TitleType" : "01"
				}
			},
			"NotificationType" : "03",
			"ProductIdentifier" : 
			{
				"IDValue" : "9784130627252",
				"ProductIDType" : "15"
			},
			"ProductSupply" : 
			{
				"MarketPublishingDetail" : 
				{
					"MarketPublishingStatus" : "00",
					"MarketPublishingStatusNote" : "1;"
				},
				"SupplyDetail" : 
				{
					"Price" : 
					[
						{
							"CurrencyCode" : "JPY",
							"PriceAmount" : "2800",
							"PriceType" : "01"
						}
					],
					"ProductAvailability" : "99"
				}
			},
			"PublishingDetail" : 
			{
				"Imprint" : 
				{
					"ImprintIdentifier" : 
					[
						{
							"IDValue" : "5149",
							"ImprintIDType" : "24"
						},
						{
							"IDValue" : "13",
							"ImprintIDType" : "19"
						}
					],
					"ImprintName" : "東京大学出版会"
				},
				"PublishingDate" : 
				[
					{
						"Date" : "",
						"PublishingDateRole" : "01"
					},
					{
						"Date" : "00000000",
						"PublishingDateRole" : "25"
					},
					{
						"Date" : "00000000",
						"PublishingDateRole" : "09"
					},
					{
						"Date" : "00000000",
						"PublishingDateRole" : "02"
					},
					{
						"Date" : "20160301",
						"PublishingDateRole" : "11"
					}
				]
			},
			"RecordReference" : "9784130627252"
		},
		"summary" : 
		{
			"author" : "小倉義光／著",
			"cover" : "https://cover.openbd.jp/9784130627252.jpg",
			"isbn" : "9784130627252",
			"pubdate" : "2016-03-01",
			"publisher" : "東京大学出版会",
			"series" : "",
			"title" : "一般気象学　第2版補訂版",
			"volume" : ""
		}
	}
]

```

一旦この返ってきたものをグローバル変数（$$book）にしておいて、
最後の方のsummaryをFileMakerのフィールドに格納
（グローバル変数にした理由は、あとで目次を選択する部分をつくるため）


▼例えば本の著者情報を取得するには、JSONGetElementを使ってこんな風に

```
JSONGetElement ( $$book ; "[]summary.author" )
```

本の内容は、本によってあったりなかったり、１つだったり複数だったりするようなので、
中身を確認してから、フィールドに入れたいと思います。

どうやら色んな本でOpenBDから情報を得たところ、３つくらいの選択肢でちょうど良さそうだったので、スライドコントロールにこのようなボタンバーに計算式を入れたものを用意しました。

![スクリーンショット 2021-12-05 18.31.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/d9d706c3-60b8-bd55-67e0-b758c3e6dfa1.png)

オブジェクトをそれぞれ1~3と名前をつけておいて、矢印ボタンで切り替えます。

![スクリーンショット 2021-12-05 18.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/82a0a6f4-8d8b-669c-26fa-aee1f8caa940.png)

```
JSONGetElement ( $$book ; "[]onix.CollateralDetail.TextContent[0].Text" )

JSONGetElement ( $$book ; "[]onix.CollateralDetail.TextContent[1].Text" )

JSONGetElement ( $$book ; "[]onix.CollateralDetail.TextContent[2].Text" )
```

御察しの通り、”これにする”のボタンで、フィールド設定しています。

###Notionに送る

まずNotionにデータベースを作っておいて、[テキストを挿入スクリプト]("https://help.claris.com/ja/pro-help/content/insert-text.html") を使って、データベースに合わせたこのようなテンプレ的なものを作っておきます。($jsonという変数に入れました)


```json
{
      "parent": { "type": "database_id", "database_id": "_datebaseid_" },
      "properties": {
      "タイトル": {
        "type": "title",
        "title": [{ "type": "text", "text": { "content": "_タイトル_" } }]
      },

      "著者":  {
    "rich_text": [
      {
        "type": "text",
        "text": {
          "content": "_著者_"
        }
     } ]

    },
      "表紙":  {
        "type": "url",
        "url": "_表紙_"
    },

  "ジャンル": {
    "multi_select": [
_ジャンル_
    ]
  },


      "自分メモ":  {
    "rich_text": [
      {
        "type": "text",
        "text": {
          "content": "_自分メモ_"
        }
     } ]

    },


  "説明文":  {
    "rich_text": [
      {
        "type": "text",
        "text": {
          "content": "_説明文_"
        }
     } ]

    }



  }
}

```



Notionのデータベースのproperties(FileMakerでいうところのフィールド)のタイプ別に、書き方が決められています。[Notion APIのドキュメント]("https://developers.notion.com")

![スクリーンショット 2021-12-05 18.44.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/57181e7a-921e-c831-c09f-de7316768540.png)

### Multi-selectはひと工夫必要

先程の$jsonをFileMakerのデータで置換して、URLから挿入スクリプトでNotionへ
それ以外は何て事ないのですが、Multi-selectはひと工夫必要です。

![スクリーンショット 2021-12-05 19.09.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/98d1974d-9348-5ded-f04d-b7cabb1dc8b8.png)

NotionMultiSelect(field) というカスタム関数を用意し、Multi-selectの場合はこれを置換することにしました。　（テンプレでMulti-selectで置換したいところには　””がないことに注意）

```FileMaker
Let ( 


[

%MultiSelect=field
]; 

JSONSetElement ("" ; "name" ;GetValue ( %MultiSelect ; 1) ; "JSONString" ) &


While ( 

[ 

//初期変数 

%max=ValueCount ( %MultiSelect );
%i=1;
%result=""

] ; 

//条件 

%i < %max

; [ 

//ロジック

%i=%i+1;
%result= %result &¶&"," &  JSONSetElement ("" ; "name" ; GetValue ( %MultiSelect ; %i) ; "JSONString" )



 ] ;

%result
)
)
```

これでやっとNotionに送ることができます😊　

URLから挿入してみましょう！
"https://api.notion.com/v1/pages"

curlオプションはこのように

```curl
"-X POST 
　-H \"Authorization: Bearer " & 入力フォーム::token & "\" 
　-H \"Content-type: application/json\" 
　-H \"Notion-Version: 2021-05-13\" 
　--data @$json"
```

###その頃Notionでは...

データベースに追加されました！

APIで画像を埋め込むことは（今のところ）できないようなので、あとで送った表紙のURLから手作業でembedすれば、こんなギャラリー表示もできます◎

![スクリーンショット 2021-12-05 16.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237172/a110e003-acab-4d38-9859-c9b841f1c85e.png)


本を読んで思いついたこと、その本を誰からどんな風に紹介してもらったか、どんな人に紹介したいか、など、本を通じたコミュニケーションも書いておくと、良いかもしれません :book:

Notionはチームで共有することもできるので社内の読書会にも活用できそうですし、そのままこれをWEB公開すれば、読んだ本のブログになっちゃいます:earth_asia:

ぜひ真似してみてください:santa: