COTOHA API を使ってみたよ！

[【Qiita x COTOHA APIプレゼント企画】COTOHA APIで、テキスト解析をしてみよう！](https://zine.qiita.com/event/collaboration-cotoha-api/?utm_source=qiita&utm_medium=banner)

なーんてものをやっていたので、せっかくだから参加してみたよ！ヾ(*´∀｀*)ﾉ
名前は知ってたけど利用したことはなかったので、良い機会だから勉強します！
~~そしてプレゼントが欲しいです。~~

環境は GoogleAppsScripts です！
どうぞよろしくお願いいたします。('ω')

## COTOHA API Portal for Developers にアカウント登録

まずは何はともあれ、登録登録！(*'▽')
[COTOHA API Portal](https://api.ce-cotoha.com/contents/index.html)

無料登録枠でやりまーす。
制限はありますが、最初だし使える機能を使って遊びます。

[スタートガイド](https://api.ce-cotoha.com/contents/gettingStarted.html)がわかりやすいですねー。こゆとこ、大事だと思います。

では、登録していきましょー！ヾ(*´∀｀*)ﾉ

![1582005235.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/4bc06500-fd73-994f-455d-921931137b2c.png)

メールアドレスを送信したら URL が送られてきて、名前とか使い道とか（割とテキトーに）書いたらすんなり登録できました。
難しいことは何もありませんでしたよー。
登録が楽チンって、ハードル下がっていいですよね！( ﾟДﾟ)

![1582005389.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/fcdd7516-0232-9d1f-b6cd-dde55e7c033a.png)

さっそく Client ID と Client secret が発行されましたよ！
これを使って COTOHA API で遊んじゃいましょー！ヾ(*´∀｀*)ﾉ

## アクセストークンの取得

スタートガイドの手順４に書いてある通りに設定します。
cURL での例があるので、これを GoogleAppsScripts に書き換えます。

```cotoha.js

function getToken() {
  const uri = 'https://api.ce-cotoha.com/v1/oauth/accesstokens';
  const json = {
    "grantType" : "client_credentials",
    "clientId": "",
    "clientSecret": ""
  };
  const options = {
    "method": "post",
    "headers": { "Content-type": "application/json" },
    "payload": JSON.stringify(json)
  };
  Logger.log(UrlFetchApp.fetch(uri, options));
}

```

簡単かんたん！(*'▽')
さーて、ログからアクセストークン取り出そうっと。

```
[20-02-18 16:13:51:501 JST] 
          {
            "access_token": "IkV8Fp369UI8MMOPIvS9GQzUuw5v", 
            "token_type": "bearer",
            "expires_in": "86399" ,
            "scope": "" ,    
            "issued_at": "1582010031433"           
           }
```

いえーい( ﾟДﾟ)
だーいせーいこー！

ちなみにこのときにした、とんでもない失敗の話は最後に語ります( ﾉД`)

## COTOHA API を呼び出す（構文解析 API）

アクセストークンが手に入ったので COTOHA API を使ってみたいと思います！
スタートガイドにもありますし、[構文解析 API](https://api.ce-cotoha.com/contents/reference/apireference.html#parsing) を使ってみましょうかね。

```test.js
function test() {
  const uri = 'https://api.ce-cotoha.com/api/dev/' + "nlp/v1/parse";
  const json = {
    "sentence":"犬は歩く。",
    "type": "default"
  };
  const options = {
    "method": "post",
    "headers": {
        "Content-type": "application/json",
        "Authorization": getToken()
    },
    "payload": JSON.stringify(json)
  };
  const res = JSON.parse(UrlFetchApp.fetch(uri, options));
  Logger.log(res);
}
```

さー、結果を見てみよー。

```
{
    result=[{
        tokens=[{
            features=[], 
            form=犬, 
            pos=名詞, 
            dependency_labels=[{
                token_id=1, 
                label=case
            }], 
            lemma=犬, 
            attributes={}, 
            id=0, 
            kana=イヌ
        }, {
            features=[], 
            form=は, 
            pos=連用助詞, 
            lemma=は, 
            attributes={}, 
            id=1, 
            kana=ハ
        }], 
        chunk_info={
            head=1, 
            chunk_func=1, 
            links=[], 
            id=0, 
            dep=D, 
            chunk_head=0
        }
    }, {
        tokens=[{
            features=[K], 
            form=歩, 
            pos=動詞語幹, 
            dependency_labels=[{
                token_id=0, 
                label=nsubj
            }, {
                token_id=3, 
                label=aux
            }, {
                token_id=4, 
                label=punct
            }], 
            lemma=歩く, 
            attributes={}, 
            id=2, 
            kana=アル
        }, {
            features=[終止], 
            form=く, 
            pos=動詞接尾辞, 
            lemma=く, 
            attributes={}, 
            id=3, 
            kana=ク
        }, {
            features=[], 
            form=。, 
            pos=句点, 
            lemma=。, 
            attributes={}, 
            id=4, 
            kana=
        }], 
        chunk_info={
            head=-1, 
            predicate=[], 
            chunk_func=1, 
            links=[{
                link=0, 
                label=agent
            }], 
            id=1, 
            dep=O, 
            chunk_head=0
        }
    }], 
    message=, 
    status=0
}
```

んな！？
めっちゃ細かい！

連用助詞とか動詞接尾辞とか、普段使わない言葉が満載。
こんな細かく分析してくれるなら、特定の言葉を抜き出したり置き換えたりするのも簡単ね。
みんなが原始人になりたがるわけだ。ぱはー( ﾟДﾟ)

## COTOHA API を呼び出す（感情解析 API）

[感情分析 API](https://api.ce-cotoha.com/contents/reference/apireference.html#sentiment)！これ、面白そうだなーって思ってたんですよね！
どんな文章を解析してもらおうかしら（　＾ω＾）

```test2.js
function test2() {
  const uri = 'https://api.ce-cotoha.com/api/dev/' + "nlp/v1/sentiment";
  const json = {
    "sentence":"私は今、レバノンにて人生の春を謳歌している"
  };
  const options = {
    "method": "post",
    "headers": {
        "Content-type": "application/json",
        "Authorization": getToken()
    },
    "payload": JSON.stringify(json)
  };
  const res = JSON.parse(UrlFetchApp.fetch(uri, options));
  Logger.log(res);
}
```
```
{
    result={
        sentiment=Positive, 
        score=0.08938453252087439, 
        emotional_phrase=[{
            emotion=安心,喜ぶ, 
            form=謳歌
        }]
    }, 
    message=OK, 
    status=0
}
```

ポジティブですね！
score は 100 分率かな？ 8点ってこと？？
ギリギリポジティブってことで、謳歌ってほどではない、と。なるほど( ﾟДﾟ)

ちょっと文章を変えてみますか。
`"sentence"` のところだけ変えれば OK です。

```test2.js
function test2() {
  const uri = 'https://api.ce-cotoha.com/api/dev/' + "nlp/v1/sentiment";
  const json = {
    "sentence":"むしゃくしゃしてやった。今は後悔している。"
  };
/// 後省略
```

```
{
    result={
        sentiment=Negative, 
        score=0.5424414618903893, 
        emotional_phrase=[{
            emotion=N, 
            form=後悔している
        }, {
            emotion=怒る, 
            form=むしゃくしゃ
        }]
    },
    message=OK, 
    status=0
}
```

めっちゃネガティブですね！
score が 54点になってます。
score が高いほどネガティブなのかな？
それとも、ネガティブ選手権の中での得点ですかね？

点数で出してくれるのは面白いですねー。

ちょっと調べてみたら score を分析して入試の文章題も解けるとか。

[COTOHA APIを使って人の気持ちを考える](https://qiita.com/umaniel_/items/769753e9e5f53be77d4f)

COTOHA さん( ﾟДﾟ)ﾊﾟﾈｪ

## とても恥ずかしいとんでもない失敗の話

さてさて、さっき言ってた失敗ですが・・・。
アクセストークンの取得のときにですね、何だかよくわからないけどこんな失敗をしました。

```
[20-02-18 16:05:22:067 JST] 
          {
            "access_token": "", 
            "token_type": "bearer",

            "expires_in": "" ,
            "scope": "" ,    
            "issued_at": ""           
           }
```

・・・ちょ、待っ、え？どゆこと？？？？( ﾟДﾟ)
空っぽなんですけどーーーーーーー！！！

ちょーびっくりしました。
「COTOHA」「アクセストークン」「空」で検索しました。
何も Hit しませんでした。
神は私を見捨てたもうたか。。。

こういうときは落ち着いて、もう一度最初から確認するんだ！
悪いのはプログラムじゃない。たいてい、自分なのだから。。。

そして見つけたのが、こちら！
![1582010487.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363367/24be3a33-c6bb-f9cc-6dfa-20ecc4881d7e.png)

なんだよ、`grant_type` って！(;´Д｀)
なぜこうなったのか、本当にわかりません。
手入力したんだろうなー。コピペしろよ！( ﾟДﾟ)

猛省します。コピペ大事。

#おわりに
ここまでお付き合いいただきありがとうございました。

COTOHA 使って何しましょうねー。
みなさん、原始人に変身したり、筋肉空間を形成したりと、遊び放題ですよね！

私も何か面白いこと、しようと思います！

ではまた！(^^)/

#参考にさせていただきましたm(_ _)m
[COTOHA API Portal](https://api.ce-cotoha.com/contents/index.html)
[COTOHA APIを使って人の気持ちを考える](https://qiita.com/umaniel_/items/769753e9e5f53be77d4f)
[【Qiita x COTOHA APIプレゼント企画】COTOHA APIで、テキスト解析をしてみよう！](https://zine.qiita.com/event/collaboration-cotoha-api/?utm_source=qiita&utm_medium=banner)