9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

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

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

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のサーバから記事の一覧(タイトル)を取得できた!これは本当に簡単だわ。
これは面白い!といろいろ呼びまくっていたら、なにやらエラーしか返らなくなった。。。

#3.認証しないといろいろ実験できないぞ!#

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

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

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

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

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

  1.Qiitaの設定画面
1.PNG

  2.アプリケーションをクリック
2.PNG

  3.新しいトークンを発行をクリック
3.PNG

  4.アクセストークンを発行する 
4.PNG

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

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();

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

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

そんなこんなで、「WEBAPIがあればなんでもできちゃう!」わけではないということがわかった。
こんなデータ欲しいのだけれど、、とお願いすればAPIを作ってくれるのかしらね。

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

つくったもの

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

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

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

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

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

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

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

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

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?