Daftar file Google Drive dari folder tertentu di halaman web

Saya mencari cara untuk membuat daftar semua file di folder Google Drive tertentu, juga yang memperbarui daftar secara otomatis, dan membiarkan semua orang melihatnya. Saya telah menemukan cukup banyak artikel yang membuat spreadsheet untuk mencantumkannya tetapi tidak diperbarui sendiri. Saya hanya dapat memahami sedikit JavaScript karena saya mencoba memodifikasi beberapa kode lain tetapi tidak berhasil. Inilah yang telah saya lakukan.

Saya membuat file Skrip Google Apps

function doGet(e){
return HtmlService.createHtmlOutputFromFile('list.html');}

dan di dalam list.html

<!DOCTYPE html>
<html>
  <head>
  <script type="text/javascript">
    var dir = "SpinFest2016 KPDS Clips"

    function listFilesInFolder(dir) {

      var folder = DriveApp.getFoldersByName(dir).next();
      var contents = folder.getFiles();
      var file;
      var name = [];
      var date = [];
      var desc = [];

      for (var i = 0; i < contents.length; i++) {

      file = contents[i];

      name[i] = file.getName();
      date[i] = file.getDateCreated();
      desc[i] = file.getDescription();

      };
    };
  </script>
  </head>
      <table style ="width: 100%">
      <tr>
          <th>이름</th>
          <th>제출일</th>
          <th>비고</th>
      <tr>
          <td><p id="name"></p></td>
          <td><p id="date"></p></td>
          <td><p id="desc"></p></td>
      </tr>
      <script type="text/javascript">
          document.getElementById("name").innerHTML = name;
      </script>

      </table>
  </body>
</html>

Saya mencoba membuat daftar hanya nama file terlebih dahulu tetapi tidak berhasil, dan saya tidak tahu apa yang salah. Jika Anda dapat menunjukkan bagian mana yang salah dan apa yang harus saya lakukan, saya sangat menghargai bantuan Anda. Jika ada cara lain yang lebih baik (tidak hanya skrip aplikasi Google tetapi juga cara lain untuk menampilkan daftar file) yang sesuai dengan ketentuan di bawah ini, saya akan sangat berterima kasih.

  • mencantumkan nama file di google drive
  • siapa pun yang memiliki tautan dapat melihat daftarnya
  • daftar diperbarui secara otomatis (baik secara berkala atau sewaktu-waktu terjadi perubahan)

person Canor    schedule 14.03.2016    source sumber


Jawaban (2)


Seperti yang tertulis, doGet Anda memberi browser web halaman HTML dengan beberapa kode JS yang tertanam di dalamnya, yang akan coba dijalankan oleh browser. Dan gagal, karena browser web tidak mengetahui tentang DriveApp; itu dapat menjalankan JavaScript, bukan Apps Script.

mengeksekusi kode Apps Script dalam skrip yang tersemat di halaman dapat dilakukan dilayani oleh doGet, tetapi sintaksnya memerlukan waktu untuk membiasakan diri.

Untuk halaman sederhana seperti milik Anda, saya hanya akan membuat semua HTML dalam fungsi doGet, dan menyajikannya. Lihat contoh saya.

Ada satu masalah lagi dengan kode Anda: folder.getFiles() mengembalikan file iterator, bukan array. Ini adalah sesuatu yang Anda ulangi menggunakan metode hasNext dan next, seperti yang ditunjukkan di bawah ini.

function doGet(e) {
  var template = '<table style ="width: 100%"><tr><th>name</th><th>Date</th><th>Description</th></tr>APPS_SCRIPT_CONTENT</table>';
  var dir = 'SpinFest2016 KPDS Clips';
  var folder = DriveApp.getFoldersByName(dir).next();
  var contents = folder.getFiles();
  var file, name, date, desc, list = []; 
  while (contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    date = file.getDateCreated();
    desc = file.getDescription();
    list.push('<tr><td>' + name + '</td><td>' + date + '</td><td>' + desc + '</td></tr>');
  }
  var output = HtmlService.createHtmlOutput(template.replace('APPS_SCRIPT_CONTENT', list.join('')));
  return output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

Ini akan menyajikan file HTML statis dengan snapshot direktori saat ini. Jika pengguna memuat ulang, mereka mungkin akan mendapatkan salinan yang lebih baru. File tidak akan diperbarui dengan sendirinya jika isi direktori diubah; Saya rasa hal ini tidak mungkin dilakukan pada platform ini. Dengan skrip yang menjalankan kode Apps Script, seseorang dapat mencoba memperbarui secara berkala, namun hal ini tampaknya tidak praktis: mengapa menyia-nyiakan kuota waktu eksekusi Apps Script Anda pada pengguna yang membuka halaman web Anda dan berjalan-jalan?

person Community    schedule 14.03.2016

getFiles() akan mengembalikan FileIterator, mungkin tidak memiliki properti .length. Ubah loop menjadi while-loop dan periksa apakah iterator hasNext adalah true, dengan cara ini iterator akan berulang. Selain itu, coba ubah cara Anda memasukkan item ke dalam array. Lihat cuplikan yang dimodifikasi, semoga berhasil.

while (contents.hasNext()){

    file = contents.next();

    name.push(file.getName());
    date.push(file.getDateCreated());
    desc.push(file.getDescription());

};

Apa yang terjadi setelah ini, bagaimana Anda menampilkannya terserah Anda.

person adjuremods    schedule 23.03.2016