APIを利用しExcelのような形で見れるようにできないかと奮闘の備忘録
まずは準備
Qiita APIを利用すために個人用認証トークンを取得設定=>アプリケーション
から設定可能で今回は読み込みだけなので「read_qiita」で発行以後のソースにこちらの認証トークンを利用します。
続いてGoogle Drive上にファイルを作成2つのファイルを作成します。
まずは、Google Drive上でスプレットシートを作成
作成自体は簡単です。
続いて名前を付けて保存します。
ここでは、ファイル名「Qiita」シート名「lists」とします。
またA列にid,B列にtitle,C列にcreate date,D列にurl,E列にtagsを入れます。
名称はなんでも良いですが見出しとして入れてください。
※シート名はApps sciprtで利用しますので注意してください。
もう一つ必要なのがスプレットシートのIDです
IDはURLから取得できます。
パターンとしては
https://docs.google.com/spreadsheets/d/{ID}/edit#gid=0&vpid=A1
上記の{ID}部分がIDとなります。
例として以下となります。
青く塗られている部分がこのシートのIDになります。
※URLにアクセスしてもすでに削除済みなので開くことができません。
ようやく本題
apps scriptを利用していきます。
apps scriptが有効でない場合は以下の処理が必要です。
新規=>その他=>アプリを追加に行きます。
検索で「apps script」と検索すると以下がでます。
こちらを追加してください。
追加ができれば前の図様ように「Google Apps Script」が表示されます。
こちらを選択しApps Scriptを新規作成します。
コードは以下です。
コード実行時にアクセス許可をもめられうので許可して実行.
ファイル名:qiita
function myFunction() { // スプレッドシートのID. var spreadsheetId = '{ID}'; // スプレッドシートのシート名. var spreadsheetName = 'list'; // Qiita APIのURL. var url = 'https://qiita.com/api/v2/items?page=1&per_page=100'; // スプレッドシートにアクセス. var spreadsheetData = SpreadsheetApp.openById(spreadsheetId); // スプレッドシートのシートにアクセス. var sheet = spreadsheetData.getSheetByName(spreadsheetName) // シートのデータを取得. var sheetdata = sheet.getSheetValues(1, 1, sheet.getLastRow(), sheet.getLastColumn()); // Qiita APIからデータを取得. var qiitas = getHttpQiitaApiRequest(url); // Qiita APIから取得したデータを列へ挿入. for (var n in qiitas) { var qitta = qiitas[n]; var isCheck = findById(sheetdata, qitta.id); // 既に存在しているか確認. if (!isCheck) write(sheet, qitta); else break; } // ソートをcreate dateで降順にソート var sortRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn()); sortRange.sort([{column: 3, ascending: false}, {column: 1, ascending: true}]); } /** * Qiita APIにアクセスしデータを取得します. */ function getHttpQiitaApiRequest(url) { // 認証トークンをセット var options = { 'method' : 'get', 'headers' : { 'Authorization' : 'Bearer {認証トークン}' } }; // HTTPリクエストを送信. var response = UrlFetchApp.fetch(url, options); // レスポンス結果を取得. var text = response.getContentText("UTF-8"); // JSONパース. return JSON.parse(text); } /** * シートから重複するIDを検索します. * true: 既にIDが存在する場合. false: IDが存在しない場合. */ function findById(sheetdata, id) { for (var i in sheetdata) { // IDの重複チェック if (sheetdata[i][0] == id) return true; } return false; } /** * シートにデータを書き込みます. */ function write(sheet, qitta) { // 最終行を取得. var n = sheet.getLastRow() + 1; // 日付の書式を変更 var date = qitta.created_at.replace(/T/g, ' ').replace(/\+09:00/g, ' '); // データの書き込み sheet.getRange(n, 1).setValue(qitta.id); sheet.getRange(n, 2).setValue(qitta.title); sheet.getRange(n, 3).setValue(date); sheet.getRange(n, 4).setValue(qitta.url); var tag = ""; for (var i in qitta.tags) { tag += qitta.tags[i].name + ","; } sheet.getRange(n, 5).setValue(tag); }
これを動かせば下図のような結果となります。
以上となります。
スケジューラーに組み込むと毎時更新とかが可能です。
Apps Scriptが思っている以上に色々できるので細々したの作成中です。