LoginSignup
0
0

More than 3 years have passed since last update.

kintoneアプリにqiitaの記事情報を表示する

Posted at

出来たこと

kintoneアプリに設置したボタンを押すことで、登録したQiitaの個人用アクセストークンに紐づく記事情報を取得し、記事のtitle・view count・LMGT count・urlをテーブルに表示出来ました。

こんな感じ。
qiitaAPI.PNG

動機

Qiitaにブログをアップしだしたのですが、現状のviewとLMGTの数が気になりますね。しかし、QiitaのマイページではLMGTしか表示されません。そこで、ボタン一つで取得できるよう、kintoneでアプリを作成しました。
*こんな時にGUI含めすぐに作成できるkintoneは超便利だと思っています。(作業時間は計2時間くらい)

事前準備

  1. 個人用アクセストークン取得(ログインしていれば、ここから発行できます) https://qiita.com/settings/applications
  2. kintoneのスタンダードライセンス
  3. kintoneのアプリ

ポイント(と、いうよりハマった箇所)

GET /api/v2/authenticated_user/items で、一発で取得できると思いきや、同responseではpage_views_countがnullになってしなってしまいました。/api/v2/authenticated_user/itemsで記事のidを取得し、記事のID毎に再度/api/v2/items/を実施しました。
*何か設定が抜けていたのでしょうか?・・・

参考

Qiita API v2ドキュメント:https://qiita.com/api/v2/docs#get-apiv2itemsitem_id

課題

忘れずにボタンを押せば、kintoneの機能で推移をグラフ表示出来そうですが、絶対忘れますね。何らかの方法で自動取得出来るようにいつかしたいと思います。

コード(java script)

(function() {
    'use strict';
    kintone.events.on('app.record.detail.show', function(event) {
        let auth = event.record.token.value;
        auth = "Bearer " + auth;
        //ボタン作成
        let myMenuButton = document.createElement('button');
        myMenuButton.id = 'my_menu_button';
        myMenuButton.innerHTML = '情報取得';
        //実行
        myMenuButton.onclick = function() {
            (async() => {
                let user = await qiita_user(auth);
                let table = await qiita_item(auth,user);
                let recordId = event.record.$id.value;
                let resp = await put_record(recordId,table);
            })();
        };
        kintone.app.record.getSpaceElement("space").appendChild(myMenuButton);
    });
})();

//qiitaユーザー情報一覧取得
async function qiita_user(auth){
    let proxyUrl = "https://qiita.com/api/v2/authenticated_user/items";
    let headers = {
        'Authorization':auth,
        'Content-Type': 'application/json'
    }
    let body = await kintone.proxy(proxyUrl, 'GET',headers,"")
    return JSON.parse(body[0]);
}

//qiita item情報一覧取得
async function qiita_item(auth,user){
    let item_detail;
    let table_detail = [];
    for( let i = 0; i < user.length; i++ ){
        item_detail = await qiita_detail(auth,user[i].id);
        table_detail.push(await create_table(item_detail.title,item_detail.page_views_count,item_detail.likes_count,item_detail.url))
    }
    return table_detail;
}

//qiita記事詳細取得
async function qiita_detail(auth,item_id){
    let proxyUrl = "https://qiita.com/api/v2/items/";
    proxyUrl = proxyUrl + item_id;
    let headers = {
        'Authorization':auth,
        'Content-Type': 'application/json'
    }
    let body = await kintone.proxy(proxyUrl, 'GET',headers,"")
    return JSON.parse(body[0]);
}

//record更新
async function put_record(recordId,table){
    var body = {
        'app': kintone.app.getId(),
        'id': recordId,
        'record': {"テーブル":{value:table}}
    };
    let resp = await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body);
    location.reload();
}

//テーブル作成
async function create_table(title,view,like,linc){
    let bodydetail = [];
    bodydetail = 
        {
            "value":{
                "title":{
                    "value":title
                },
                "view":{
                    "value":view
                },
                "LGMT":{
                    "value":like
                },
                "リンク":{
                    "value":linc
                }
            }
        };
    return bodydetail;
}
0
0
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
0
0