Notionで文献管理がしたい

# どうした？
文系の大学院生で、ふだんNotionで文献管理をしています。
ひとそれぞれ文献のなにを管理したいかは異なると思うのですが、私は文献に出会ったらとりあえず、「タイトル」「URL」「citation（引用文献一覧のところで記載する指定の書き方です）」の3つをnotionにぶちこみたいのです。（こんな感じ↓）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/505d7bd2-0c59-05cd-f0c5-ddaf747e92af.png)


なので、参考になる論文に出会うたびに、まず、タイトルをコピーして、Notionを開いて新規ページを作って、タイトルペーストして、次にURLコピペして、、、。そして最後に、citationについては、以下の画像みたいに、タイトルをいれると（緑）、自動生成してくれる（黄色）サイトに行って、生成してもらってからそれをコピペして、、、！と面倒な日々を送っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/cbd8bdfd-7109-8006-7d95-264ae316a224.png)
https://www.scribbr.co.uk/referencing/generator/apa/

というわけで、ワンクリックで「タイトル」「URL」「citation」をnotionのDBにぶち込みたいな！と思いました。

# 材料
１．https://developers.notion.com/
notionにぶちこむ！は話題のnotion apiで出来そうですね。

２．https://citeas.org/api
citationは、、、？とおもっていたらこちらも、成形済みのcitationを返してくれるAPIを見つけたのでこちらを使えばいけそうっぽい勇気がみなぎってきました。なにで検索させるのがいいのかなあと思ったのですが、URLで検索させるのがよさそうなのでそうします。（さっきからURLURLと言っているのですが、論文のURLはURLといってもただのURLではなくて（？）、doiと呼ばれ、識別番号的に機能しています）

>DOIは、Web上の電子文献と一対一に対応しているコードです。商品に対するバーコードや、書籍に対するISBNコードと同類、と考えれば分かりやすいでしょうか。
https://www.chem-station.com/blog/2008/07/-doi.html

３．php
言語はどれを使えばいいか全くわからなかったのですが、触ったことあるのがC#とPHPしかなくて、ググったら、PHPだったらなんかいけそうな香りを感じたのでPHPでいってみることにしました。xamppインストールしました。

# できたもの
なにもないnotionDBですがあ～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/b9549a70-9ee4-d278-36bf-d3f2537cf4fe.png)


実在する論文のdoi（URL）を入力して「新規追加」ボタンを押すとお～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/841d8ac7-1f33-ae77-2f7e-9f8a84227f6e.png)

タイトルと、doiと、citation（、と、おまけで要約！）が一発で入った～～！
　※なんか変なタグとか若干混ざっちゃってますがこれから頑張ってきれいにしていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/e8beb68d-d2b1-5b65-6f9f-adac44b5c96d.png)

アプリ側は申し訳程度に何かつぶやいている、一応完了画面。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779337/105059cc-44d1-a0bb-8f25-8c1ce195722a.png)

# やったこと
本当に初心者なので、変なコードがあっても怒らないでください（誰も怒りません）
## index.html
１．フォームを表示して、入力内容をinsert.phpに投げる
~~~html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
	<title>reftion</title>
</head>
<body>
	<form action="insert.php" method="post">
		<label for="doi">doi:</label>
		<input type="text" id="doi" name="doi" size="50"><br><br>
		<input type="submit" value="新規追加">
	</form>
</body>
</html>
~~~

## insert.php

１． CiteAPIから情報をもらう
~~~php
<?php
  define('REF_DOI', 'https://api.citeas.org/product/'.$_REQUEST['doi']); 
  $header = [
        "Content-Type: application/json",
      ];
  $ch = curl_init(REF_DOI);
  curl_setopt_array($ch,
      [
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_HTTPHEADER      => $header,
      ]
    );
    $res_cite = curl_exec($ch);
    if (curl_errno($ch)) {
      $error = curl_error($ch);
      echo $error;
    }
    curl_close($ch);

    //受け取ったデータを成形
　　$res_cite_array= json_decode($res_cite, true);
　　$notion_cite_title=$res_cite_array['name'];
    $notion_cite_doi=$_REQUEST['doi'];
    $notion_cite_abs=$res_cite_array['metadata']['abstract'];
    $notion_cite_citation=$res_cite_array['citations']['0']['citation'];
~~~

２．Notionにデータを送る
~~~php
    define('NOTION_TOKEN', 'secret_XYZ');
    define('NOTION_TABLE', 'ABCDE'); 

    $header = [
      "Authorization: Bearer ".NOTION_TOKEN,
      "Content-Type: application/json",
      "Notion-Version: 2022-06-28"
    ];
 
    $post_data = [
      "parent"=> ["database_id"=> NOTION_TABLE],
      "properties"=> [
        "title"=> [
          "title"=> [
            [
              "text"=> [
                "content"=>$notion_cite_title
              ]
            ]
          ]
        ],
                "doi"=> [
                  "url"=> $notion_cite_doi
                ],
                "abstract"=> [
                    "rich_text"=> [
                      [
                        "text"=> [
                          "content"=>$notion_cite_abs
                        ]
                      ]
                    ]
                  ],
                  "citation"=> [
                    "rich_text"=> [
                      [
                        "text"=> [
                          "content"=>$notion_cite_citation
                        ]
                      ]
                    ]
                  ],
              
      ]
    ];
   
    $ch = curl_init("https://api.notion.com/v1/pages");

    curl_setopt_array($ch,
      [
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_HTTPHEADER      => $header,
        CURLOPT_POST            => true,
        CURLOPT_POSTFIELDS      => json_encode($post_data),
      ]
    );
   
    $res_notion = curl_exec($ch);
    
    if (curl_errno($ch)) {
      $error = curl_error($ch);
      echo $error;
    }
   
    curl_close($ch);
  
    //受け取ったデータを成形
　　$res_notion_array= json_decode($res_notion, true);
~~~

３． 画面表示
~~~php  
  echo '<pre class="text-light">';
  echo $res_cite_array['name'].'を登録しました。'."\n";
  echo $res_notion_array['url'].'からアクセスしてください。';
  echo '</pre>';

?>
~~~

# 今後やりたいこと
- まぎれっちゃってるタグ（イタリック体の<i>など）をどうにかしたい
- secret_keyをDBにもたせたい
- 完了画面の、新規作成したページのURLをボタンor押せるリンクにしたい
- in-text citation（文章のなか引用するときに、「AはBである（田中, 1998）」と書くときの「（田中, 1998）」のフォーマットのことです！いちいち書くのが面倒なのでコピペできるようにしておきたいのですが、今回使ったAPIには生成済みのin-text citationはなかったので、自分で作らなあかんです）
- タイトルでも検索できるといいですよね。APIの仕様書にはkeywordでも検索可と書いてあったのですが、使い方がよくわからなかったので、改めて確認してみる

# 追記
続きです。

https://qiita.com/haruchann/items/0762c9b87526b4177207


# 参考
https://online-world.jp/blog/contents/?id=21