Bloggerのページ一覧をGASで自動記入する
「Bloggerの投稿一覧をGASで自動記入する」の続きです。
やったこと
前回、投稿一覧をGoogleスプレットシートに記載したため、次はページ一覧を別シートに記載します。
- スプレットシートに保存してあるデータを取得する
- BloggerAPIでページ一覧を取得する
- データとページ一覧から新規/更新/削除を行う
- スプレットシートに更新したデータを適用する
ソースコード
pages.gsvar key = '{BloggerAPIキー}';
var blogid = '{BloggerID}';
var sheetid = '{スプレッドシートID}';
// www.bugbugnow.netのドメインを要変更
// リストの値を更新する
function updateBlogListValues(type, values) {
var ret = false;
var list = [];
var token = void 0;
var isPost = (type == 'posts');
do {
// ページリストを取得
var url = 'https://www.googleapis.com/blogger/v3/blogs/'+blogid+'/'+type;
url += '?fetchBodies=false';
url += '&maxResults=50';//500だとpostsでエラーする?//50で89が取れなかった。50+7しか収集しなかった。
// 昼間は50件以上取得できない?
url += '&orderBy=updated';
url += (token)? '&pageToken='+token: '';
url += '&key='+key;
var fetchOptions = {
method:"GET",
headers:{
Referer:'https://www.bugbugnow.net/',
}
};
Logger.log('updateBlogListValues: '+url);
var res = UrlFetchApp.fetch(url, fetchOptions);
Utilities.sleep(5*1000);//5s
var text = res.getContentText();
var json = JSON.parse(text);
res = text = null;
// 終端の時(ちょうど終了の場合)
if (!json.items) {
break;
}
Logger.log('updateBlogListValues: '+json.items.length);
// 挿入&更新
for (var i=0; i<json.items.length; i++) {
var item = json.items[i];
var insert = true;
for (var k=0; k<values.length; k++) {
if (values[k][0] == item.url) {
if (values[k][1] != item.updated) {
values[k][1] = item.updated;
values[k][2] = item.published;
values[k][3] = item.title;
if (isPost) {
values[k][4] = item.labels.join(',');
}
ret = true;
Logger.log('update: '+values[k][0]);
}
list[k] = true;
insert = false;
break;
}
}
if (insert) {
var value = [item.url, item.updated, item.published, item.title];
if (isPost) {
value.push(item.labels.join(','));
}
values.push(value);
list[values.length-1] = true;
ret = true;
Logger.log('insert: '+values[values.length-1][0]);
}
}
// 次のトークンがある場合、繰り返す
token = json.nextPageToken;
} while (token);
// 削除
for (var i=values.length-1; i>=0; i--) {
if (list[i] !== true) {
Logger.log('delete: '+values[i][0]);
values.splice(i, 1);
ret = true;
}
}
return ret;
}
// リストを更新する
function updateBlogList(type) {
Logger.log('updateBlogList: '+type);
// スプレットシートの取得
var isPost = (type == 'posts');
var sheetApp = SpreadsheetApp.openById(sheetid);
var sheet = sheetApp.getSheetByName(type);
// A1=(1, 1)
var row = sheet.getLastRow();
Logger.log('row: '+row);
var values = [];
if (row > 1) {
values = sheet.getRange(2, 1, row-1, (isPost? 5: 4)).getValues();
}
var ret = updateBlogListValues(type, values);
if (ret) {
// シートを更新
values.sort(function(a, b) {
return new Date(a[2]).getTime() - new Date(b[2]).getTime();
});
if (row > 1) {
sheet.getRange(2, 1, row-1, (isPost? 5: 4)).clear();
}
sheet.getRange(2, 1, values.length, values[0].length).setValues(values);
Logger.log('updateBlogList: update');
}
}
// ページ一覧更新
function updatePage() {
updateBlogList('pages');
}
完成品
Bloggerのページ一覧を下記のようにGoogleスプレットシートに記入できました。