kintone 앱에 qiita 기사 정보 표시

할 일



kintone 앱에 설치한 버튼을 눌러 등록한 Qiita의 개인 액세스 토큰에 연결하는 기사 정보를 취득하고, 기사의 title·view count·LMGT count·url을 테이블에 표시할 수 있었습니다.

이런 느낌.


동기



Qiita에 블로그를 올렸습니다만, 현재의 view와 LMGT의 수가 신경이 쓰이네요. 그러나 Qiita의 내 페이지에는 LMGT 만 표시됩니다. 그래서 버튼 하나로 얻을 수 있도록 kintone으로 앱을 만들었습니다.
*이런 때에 GUI 포함 곧바로 작성할 수 있는 kintone은 매우 편리하다고 생각하고 있습니다. (작업 시간은 총 2시간 정도)

사전 준비


  • 개인 액세스 토큰 취득 (로그인하면 여기에서 발행 할 수 있습니다.) htps : // 코 m / 세친 gs / 아 p ぃ 카치 온 s
  • kintone의 표준 라이센스
  • 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 문서 : htps : // m / ap / v2 / cs # 게 t ap v2 m m_m d

    도전



    잊지 않고 버튼을 누르면, 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;
    }
    

    좋은 웹페이지 즐겨찾기