
GASでnoteの投稿を取得する
GASでnoteの投稿を取得してスプレッドシートに出力するプログラムを作ってみたので、紹介します。
※非公式のAPIを使用するため、予期しないエラーが発生する可能性があります。
以下のような形式でスプレッドシートに投稿の一覧を出力します。
コードの全体
まず、コードの全体です。
function getNoteArticles() {
const userName = "specially198";
const url = `https://note.com/api/v2/creators/${userName}/contents?kind=note`;
// APIで記事を取得する
let jsonArticleInfo = UrlFetchApp.fetch(url, {'method':'get'});
let articleInfos = JSON.parse(jsonArticleInfo.getContentText());
let output = makeOutput(articleInfos.data.contents);
// 記事数が2ページ以上ある場合は、総ページ数分、繰り返し処理する
if (!articleInfos.data.isLastPage) {
let page = 2;
while(true) {
jsonArticleInfo = UrlFetchApp.fetch(`${url}&page=${page}`, {'method':'get'});
articleInfos = JSON.parse(jsonArticleInfo.getContentText());
let tmp = makeOutput(articleInfos.data.contents);
output = output.concat(tmp);
if (articleInfos.data.isLastPage) {
break;
}
page++;
}
}
let sheetNoteArticleList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('note記事一覧');
sheetNoteArticleList.getRange(2, 1, output.length, output[0].length).setValues(output);
}
function makeOutput(contents) {
let output = [];
for (let articleInfo of contents) {
let row = [];
row.push(articleInfo.noteUrl);
row.push(articleInfo.name);
output.push(row);
}
return output;
}
noteから投稿の一覧を取得する
まず、noteから投稿の一覧を取得します。
取得するには、以下のAPIを使用します。
https://note.com/api/v2/creators/[ここにユーザー名が入る]/contents?kind=note
以下の部分が該当部分です。
const userName = "specially198";
const url = `https://note.com/api/v2/creators/${userName}/contents?kind=note`;
// APIで記事を取得する
let jsonArticleInfo = UrlFetchApp.fetch(url, {'method':'get'});
let articleInfos = JSON.parse(jsonArticleInfo.getContentText());
APIで取得した情報を加工する
取得した情報はスプレッドシートに出力する形式で加工しています。
取得した情報からURLとタイトルを使用しています。
以下の部分が該当部分です。
let output = makeOutput(articleInfos.data.contents);
function makeOutput(contents) {
let output = [];
for (let articleInfo of contents) {
let row = [];
row.push(articleInfo.noteUrl);
row.push(articleInfo.name);
output.push(row);
}
return output;
}
繰り返し処理をしてAPIを呼び出すようにする
APIでは一度に取得できる件数が決まっていて、それを超える分は繰り返し処理をして取得するようにしています。
以下のように、ページという概念になっています。
※画面で投稿の一覧を表示する時と同じ考え方で、「もっとみる」と同じ感じです。
「isLastPage」というプロパティで、最終ページかどうかが分かるので、最終ページになるまで繰り返しています。
以下の部分が該当部分です。
// 記事数が2ページ以上ある場合は、総ページ数分、繰り返し処理する
if (!articleInfos.data.isLastPage) {
let page = 2;
while(true) {
jsonArticleInfo = UrlFetchApp.fetch(`${url}&page=${page}`, {'method':'get'});
articleInfos = JSON.parse(jsonArticleInfo.getContentText());
let tmp = makeOutput(articleInfos.data.contents);
output = output.concat(tmp);
if (articleInfos.data.isLastPage) {
break;
}
page++;
}
}
スプレッドシートに出力する
最後にスプレッドシートに出力します。
シート名は「note記事一覧」としています。
以下の部分が該当部分です。
let sheetNoteArticleList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('note記事一覧');
sheetNoteArticleList.getRange(2, 1, output.length, output[0].length).setValues(output);
以下のような形式でスプレッドシートに出力できれば完了です。