よそ様の情報を簡単に参照できるWEBAPIが本当に簡単なのか体験してみた。

WEBAPIとやらを使うと簡単に情報を参照したりサービスを受けられるというので体験してみました。
今回、Qiitaのアカウントも作ってみたので、やってみたことを投稿します。

#１．やってみたかったこと#
WEBAPIを使うと簡単にインターネット上の情報を参照したり、サービスを受けたりできるらしいが、本当に簡単なのか体験してみたい。
具体的には、Node.js＋axsiosを使って、今後お世話になるであろうQiitaのWEBAPIを呼んでみる。

#２．Qiitaの記事一覧を呼び出してみた#
APIリファレンスを参考に、記事の一覧を取得してみる。

```javascript:API.js

const axios = require('axios');
async function main() {
    let response = await axios.get('https://qiita.com/api/v2/items?page=1');
    for(var i in response.data){
    console.log(response.data[i].title); //記事のタイトル
    }
}
main();
```

たったこれだけのコードでQiitaのサーバから記事の一覧（タイトル）を取得できた！これは本当に簡単だわ。
これは面白い！といろいろ呼びまくっていたら、なにやらエラーしか返らなくなった。。。

#３．認証しないといろいろ実験できないぞ！#

さすがに、「だれにでも」「いくらでも」は使わせてくれないようです。

APIリファレンスに以下の記載が。

>利用制限
認証している状態ではユーザごとに1時間に1000回まで、認証していない状態ではIPアドレスごとに1時間に60回までリクエストを受け付けます

認証をしないとトライ＆エラーできない。初心者なので、めちゃめちゃトライ＆エラーしてしまいました。。。
Qiitaさんよくわからずめちゃめちゃ叩いてごめんなさい。

というわけで認証しました。（アクセストークンを取得する）

　　１．Qiitaの設定画面
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365273/ebac8010-7018-e773-e009-082830bd8fff.png)

　　２．アプリケーションをクリック
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365273/fc1986fd-c4de-9597-0a40-9dd0fec6a129.png)

　　３．新しいトークンを発行をクリック
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365273/c570dfba-a55a-ee66-95b3-b2bb285198c3.png)

　　４．アクセストークンを発行する　
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365273/467a36d9-d137-e5b9-42e9-d802c24c0707.png)

　　５．呼び出すときに、↓こんな感じにする。　XXXXXに発行したアクセストークンを設定する。

```javascript:Auth.js
        const axios = require('axios');
        async function main() {

            let response = await axios.get('https://qiita.com/api/v2/items?page=1', {
                headers: {
                'Authorization': `Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
                }
            })
            for(var i in response.data){
                console.log(response.data[i].title); //記事のタイトル
                }


        }
        main();
```


これでお試しが捗るようになりました。


#４．WEBAPIは簡単に情報を参照できるけれど、なんでも参照できるわけではない。
せっかくだから何か作ろうと思って妄想してみた
　・人はだいたいどれくらいの期間でQiitaに投稿しなくなるのか？を分析し、自分の今後のQiitaLifeに活かす！とか。
　　→APIリファレンスを参照してみたけれど、必要な情報がとれなそうな。。
　・どんな投稿をきっかけにフォロアーがつき始めるのか？ターニングポイントみたいなのがわかると面白そう
　　→おなじくそこにたどり着くためのデータがとれなそう？？？
　・などなどいろいろ妄想してみたり、データをとってみたりしたのだけれど、
　　QiitaのAPIだけでは必要な情報を参照できない様子。もうちょっと時間をかけて調べたら意外といけたりするのだろう。
　　
 
そんなこんなで、「WEBAPIがあればなんでもできちゃう！」わけではないということがわかった。
こんなデータ欲しいのだけれど、、とお願いすればAPIを作ってくれるのかしらね。

#５．というわけで、とりえあず作ってみた。

つくったもの

これから「くる」タグ発見機。

タグについては、
　・フォローしている人数、
　・タグがつけられた記事の数
などがAPIで参照できるようなので、これらの数値を統計・分析することで
    「 このタグ来てるぜ！くるぜ！を早期検知して、トレンドを先取りだ！うしし」
としたいぜ！

ただ、、取得できるのは履歴ではなく、現時点（ナウ）のようにみえるので、とりえあず蓄積してみることにした。

axiosでQiitaから情報を参照して、node-adodbというライブラリを使って、パソコン内のmdb（MS-Access）に保存することにした。
これを毎日エージェントかなにかで定期実行して、日ごとの値の変化を別途解析する！という考え方だ！　なかなかしょぼいぜ！

```javascript:TAG.js

    const axios = require('axios');
    const ADODB = require('node-adodb');
    const connection = ADODB.open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB.mdb;');

    async function main() {

        //TAGの情報を保管した日付を取得する（処理日）
        var date = new Date(); 
        var year_str = date.getFullYear();
        var month_str = 1 + date.getMonth();
        var day_str = date.getDate()
        //見やすいように日付をフォーマット
        var format_regdate = 'YYYY-MM-DD';
        format_regdate = format_regdate.replace(/YYYY/g, year_str);
        format_regdate = format_regdate.replace(/MM/g, month_str);
        format_regdate = format_regdate.replace(/DD/g, day_str);
    
        //タグの一覧を取得する　ひとまずお試しで100件とってみよう。　
        let parm = 'https://qiita.com/api/v2/tags?page=1&per_page=100'
        let response = await axios.get(parm, {
            headers: {
            'Authorization': `Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
            }
        })
        
        //取得したタグ一覧（レコード）からタグの情報を取得
        for(var i in response.data){

            let id = response.data[i].id;                                   //タグID＝タグの名称
            let items_count = (response.data[i].items_count);               //タグがつけられた記事の数
            let followers_count = (response.data[i].followers_count);       //タグをフォローした人のかず
            
            //データベース（TBL1）のスキーマ　TAG,RegDate,DocCount,FolCount//

            //とりあえずDBに保存しよう。
            connection.execute('INSERT INTO TBL1 VALUES ("' + id + '","' + format_regdate + '",' + items_count + "," + followers_count + ');');

        }
        
    }  

    main();
```

素敵な統計理論（？）をつかって、「これから来る！」をロジカルに発報してほしいのだが、その手の知識なんて持ち合わせているわけがなく、、
　・とりえあずDB（MS-Accedd）を参照して、
　・「タグ付けされた文書数」が前日よりも大幅に増えていたら発報する
テーブルぐりぐりscriptを別途作成。ぐーりぐーり、、、

結果（テストデータ使用）
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365273/595d2cfb-accf-127e-7171-c5cd585a37a4.png)

うーん　効果は皆無だ！　こんなんじゃ、うしうしでけない！！
データ分析のスキルも欲しいものですなぁ。

そんなこんなしているうちに、本日はタイムアップ！！！　おつかれさまでしたー

#感想
　・APIで情報を取得するのは意外と簡単。でも、ほしい情報がサクッと取得できるわけではないので、目的達成までの道のりは簡単ではない
　・Markdown記法を初めて使った！こっちのほうが実は新鮮な体験だったりして・・・　こうやってるのねマークダウン。