#出来たこと
kintoneアプリに設置したボタンを押すことで、登録したQiitaの個人用アクセストークンに紐づく記事情報を取得し、記事のtitle・view count・LMGT count・urlをテーブルに表示出来ました。
#動機
Qiitaにブログをアップしだしたのですが、現状のviewとLMGTの数が気になりますね。しかし、QiitaのマイページではLMGTしか表示されません。そこで、ボタン一つで取得できるよう、kintoneでアプリを作成しました。
*こんな時にGUI含めすぐに作成できるkintoneは超便利だと思っています。(作業時間は計2時間くらい)
#事前準備
- 個人用アクセストークン取得(ログインしていれば、ここから発行できます) https://qiita.com/settings/applications
- 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ドキュメント: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;
}