私はGoogleドライブをチェックし、ユーザーの介入なしにファイルを自動的にダウンロードするポーリングWebアプリケーションを作成しようとしています。Web Appのドライブからファイルを自動ダウンロードしますか?
ContentServiceを使用するdoGet関数にコードを配置すると、物事がうまくいくようになりました。
ただし、これは一度しか機能しません。タイマーイベントでページを自動的にリフレッシュまたはリロードする方法はありません。
クライアント側のjavascriptでSetTimeoutを使用すると、一定の間隔で自動的にトリガする機能をサーバ側で取得できますが、ContentServiceからの出力をどう処理するかが問題になります。
オンサクセスコールバックは、createTextOutputからの出力を受け入れません。
私のソリューションは展開する必要はありません。私の解決策が展開される場合は、エディタから実行してもらいます。
私はサーバー側でcreateTextOutputの出力を取得した後、ファイルのダウンロードを引き起こすためにクライアントに戻すために何をする必要がありますか?
これが役立つ場合は、コードを含めました。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
setTimeout(
function()
{
document.getElementById('results').innerHTML = 'Event Timer';
google.script.run
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.fetchFromGoogleDrive();
}, 60000);
function onSuccess(sHTML)
{
document.getElementById('results').innerHTML = 'File Downloaded ' + sHTML;
}
function onFailure(error)
{
document.getElementById('results').innerHTML = error.message;
}
</script>
</head>
<body>
<div id="results">Waiting to DownLoad!</div>
id="Fetch">Fetch!</button>
</body>
</html>
function doGet() {
Logger.log('doGet');
return HtmlService.createHtmlOutputFromFile('form.html');
}
function fetchFromGoogleDrive() {
//Logger.Log('fetchFromGoogleDrive');
var fileslist = DriveApp.searchFiles("Title contains 'Expected File'");
if (fileslist.hasNext()) {
//Logger.Log('File found');
var afile = fileslist.next();
var aname = afile.getName();
var acontent = afile.getAs('text/plain').getDataAsString();
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.CSV);
output.setContent(acontent);
output.downloadAsFile(aname);
return afile.getDownloadUrl();
}
else
{
//Logger.Log('No File Found');
return 'Nothing to download';
}
//Logger.log('All files processed.');
}
。要点は、一旦機能が入力されると、Googleドライブ文書をダウンロードするための機構が提供されていないことである。実行可能な唯一のメカニズムは、doGet()を介してファイルをダウンロードすることです。 – Walter
答えを編集しました –