今日はスプレッドシートにデーターを貼り付けところまで行きましょう。前回の講座はこちら
前回はGoogle Apps Script(GAS)を使い、ALISのAPIをたたいてデータを取得するところまでできました。このデータをスプレッドシートに貼り付けましょう。
function getAlisPopularArticle(){
var response = UrlFetchApp.fetch("https://alis.to/api/articles/popular?limit=100&page=1").getContentText();
var results = JSON.parse(response);
Logger.log(results);
}
今回は原理を説明しながら少しずつコードをつくりあげていきましょう。まずスプレッドシートを使うにはスプレッドシートのIDが必要になります。これはスプレッドシートのURLの一部になっていますのでそのIDを手に入れます。
https://docs.google.com/spreadsheets/d/1D0PQSWSZQpeuxklUTg8ix_MTMIq0K5rlqD8y8QZC9-c/edit#gid=0
1D0PQSWSZQpeuxklUTg8ix_MTMIq0K5rlqD8y8QZC9-c で表記された乱数のような箇所がそれに当たります。それぞれで準備した数値を取得しましょう。これはこの講座用につくったシートのIDです。
次にスプレッドシートは複数のページで構成されています。しっかりとページまで指定する必要があります。操作するための準備を行います。
そのために下記の変数を準備しましょう
var mySpread = SpreadsheetApp.openById("xxxxxxxxxxxxxxxxx");
var mySheets = mySpread.getSheetByName("シート1");
シート1は特に名称を変更しないと記載されるページの名前です。この2つのコマンドで準備した mySheets を使うと、シートを操作することができます。
それぞれのセルに書き込むには下記のコマンドを実行すれば可能です。この
mySheets.getRange( X, Y ).setValue( データ );
セルは X,Yで指定し、その中に入れるデータをSetValueにて指定してあげます。
次にALISから取り出したデーターについてお話しましょう。データはJSON形式で取得されています。JSON形式というのはラベルのついた箱にデータを格納する方式だと思ってください。
箱のラベルを指定すると任意のデーターを取り出せる便利なデーター表記方法です。
ただデーターが大きくなるとややこしくなりますが一生懸命眺めていればだんだんわかってきます(すいません。うそです)。ややこしいことはPCにやらせましょう。
ALISから取得されたデーターは下記のような表記です。意味わかりませんね。
データを下記のWEBで解読しましょう。。
解析するとこのように関係性を見やすい形でしめしてくれます。この緑の表記を使うとJava Scriptにてデータを取り出すことができるようになっています。
データはresultsにすべて格納しています。resultsから、必要なデーターを取り出していきます。
この2つの知識を組み合わせて取得したデーターをシートに書き込むコードがこちらになります
function getAlisPopularArticle2(){
var sheetidx ="シートIDを入れる";
var mySpread = SpreadsheetApp.openById(sheetidx);
var mySheets = mySpread.getSheetByName("シート1");
var response = UrlFetchApp.fetch("https://alis.to/api/articles/popular?limit=100&page=1").getContentText();
var results = JSON.parse(response);
Logger.log(results);
var count = results["Items"].length;
for (i=0;i<count;i++){
str = mySheets.getRange(i+1, 1).setValue(i+1);
str = mySheets.getRange(i+1, 2).setValue(results["Items"][i]["article_id"]);
str = mySheets.getRange(i+1, 3).setValue(results["Items"][i]["user_id"]);
str = mySheets.getRange(i+1, 4).setValue(results["Items"][i]["title"]);
str = mySheets.getRange(i+1, 7).setValue(results["Items"][i]["topic"]);
str = mySheets.getRange(i+1, 8).setValue(results["Items"][i]["eye_catch_url"]);
}
}
新たに追加した箇所をハイライトしています。
複数の記事分のデータを順番に書き込むためにループを使用しています。データ数は results["Items"].length にてデータ長から抽出しています
こちらを先日紹介したスクリプトエリアに書き込み。再生ボタンを押せば実行ができます。
実際に実行すると下記のようにランキング順に記事の情報が書き込まれます。
実際のシートもこちら
からみれます
みなさんデータをスプレッドシートに書き込めるようになりました。
次回はさらにそれぞれの記事のデーターを深掘りする。またデーターのソートを覚えましょう。
続きはこちら