質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

4090閲覧

GAS 旧Googleサイトのお知らせページにある投稿を新しい順で取得したい。

ippeiishigo

総合スコア7

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2017/11/13 05:41

###前提・実現したいこと
旧Googleサイトに投稿されたお知らせを新しい順から5件取得し、htmlとしてリスト表示するWebアプリケーションを作成したいと考えています。しかし、以下に示す問題で手詰まりの状態です。
お手数おかけしますが、投稿を新しい順で取得する方法をご教示頂けませんでしょうか。
よろしくお願い致します。

###発生している問題・エラーメッセージ
お知らせの投稿は、getAnnouncements()またはgetChildren()メソッドを使い取得します。
しかし、実際に取得した結果を見ると、どうも古い順で取得してしまっていることが分かりました。
公式のリファレンスを見ても、取得順に関するプロパティを見つけられませんでした。

ソースコードは以下の通りです。
###コード.gs

GAS

1function doGet(e) { 2 var output = HtmlService.createTemplateFromFile('info-list'); 3 return output.evaluate(); 4} 5function getNewslist() { 6 var parent = SitesApp.getPageByUrl('お知らせページのURL'); 7 var pages = parent.getChildren({start: 0,max: 5}); 8 var html = '<ul class="newswrap">'; 9 for(var i in pages) { 10 var hiduke = Utilities.formatDate(pages[i].getDatePublished(),"JST","yyyy年MM月dd日"); 11 Logger.log(pages[i].getTitle() + '(' + pages[i].getUrl() + ')' + hiduke); 12 html += '<li class="newslist">' + hiduke + ' '; 13 html += '<a href="' + pages[i].getUrl() + '" class="newstitle">' + pages[i].getTitle() +'</a></li>'; 14 } 15 html += '</ul>'; 16 html += '<div class="readmore"><a href="お知らせページのURL">もっと見る »</a></div>' 17 return html; 18} 19

###info-list.html

GAS

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 <style> 6 </style> 7 </head> 8 <body> 9 <? output.append(getNewslist()); ?> 10 </body> 11</html>

###補足情報
上記スクリプトを作成してから一時的には、新しい順で投稿を取得できていました。
しかし、気付いたら古い順でしか投稿を取得できない状態となってしまっていました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私はGoogleサイトの特定子ページ群を取得して、サイトのList機能にリスト・リンク一覧をつくる時に前回取得済以降の新規追加分だけを特定して取得しようとして、同じ悩みになりました。取得順はあるタイミングでは最新順になっていますが、サイトページ編集行為やアクセスなどが発生(=特定に至ってません)すると、順番が最新順には取得できないことがわかりました。結局対象の全件を一旦取得して、取得後にソートをかけてやる方法でしかやりようがありませんでした(知らないだけかもしれませんが)。
その方法でよければ、下記で実現可能です。

function doGet(e) { var output = HtmlService.createTemplateFromFile('info-list'); return output.evaluate(); } function getNewslist() { var parent = SitesApp.getPageByUrl('お知らせページのURL'); //GASは1度に最大200件ずつしか取得できない制限があるので1~200、201~400… //というように対象がなくなるまで全件取得し、pages配列に格納する var pages = []; var start = 0; var size = 200; var failed = false; do{ try{ var Childrens = parent.getChildren({start:start,max:size}); failed = false; pages = pages.concat(Childrens); start += size; }catch(e){ failed = true; } }while(Childrens.length == size || failed); //取得したpages配列の中身2行を次々と指定し、最終的に全件ソートして結果を返す pages.sort(function(a,b){ var a_hiduke = a.getDatePublished();//pages配列a行目の中でソート比較する項目を指定 var b_hiduke = b.getDatePublished();//pages配列b行目の中でソート比較する項目を指定 var result; //2つの値を比較 if(a_hiduke > b_hiduke){ result = -1;//負の値を返すと降順(b→a) }else if(a_hiduke < b_hiduke){ result = 1;//正の値を返すと昇順(a→b) }else{ result = 0;//0を返すとソートしない } return result; }); var output_pages = 5; //出力としたいページリンク数 var html = '<ul class="newswrap">'; //総ページ数がoutput_pages以下の場合を考慮 if (output_pages>pages.length){output_pages=pages.length;} for(var i=0;i<output_pages;i++) { html += '<li class="newslist">' ; html += Utilities.formatDate(pages[i].getDatePublished(),"JST","yyyy年MM月dd日"); html += ' '; html += '<a href="' +pages[i].getUrl() + '" class="newstitle">' ; html += pages[i].getTitle() +'</a></li>'; } html += '</ul>'; html += '<div class="readmore"><a href="お知らせページのURL">もっと見る »</a></div>'; return html; }

投稿2018/01/12 05:04

jinshan

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問