mardi 15 mai 2012

Google Script Class DocsList récupérer les fichiers public

0 commentaires
La Class DocsList de Google Script permet interagir avec Google Drive anciennement Google Docs et de parcourir les différents fichiers que vous stockez.
Plusieurs propriétés existent pour récupérer le nom du fichier, sa taille, la date création, la date de modification etc... On peut aussi récupérer les personnes qui ont les droits en écriture et en lecture sur chacun de ses fichiers. La seule chose qui manque est une fonction pour récupérer la visibilité, c'est à dire savoir si le fichier est public ou non.

Récupérer les fichiers Google Docs public par script
Quand on récupère le tableau des lecteurs (viewer) avec la propriété getViewers(), dans le tableau qui est renvoyé il existe un utilisateur "Public" quand le fichier est public.
Pour savoir si un fichier est public, il suffit donc de parcourir les viewers et de chercher si un user "Public" est présent.
Domaine Google Apps : Si vous êtes sur un compte Google Apps et que vous voulez connaitre les fichiers que vous partagez sur le domaine il y aura un viewer du nom de votre domaine. Donc au lieu de chercher Public il faut chercher votre domaine.

Script pour récupérer les fichiers public de son compte
Voici un script qui listera les fichiers que l'on partage en mode public.
function getPublicFiles(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var docs = DocsList.getFiles(); //Retrieve all the docs.
  var listfile = "";
  var viewer = new Array;
  var owner = "";
  var me = Session.getUser().getEmail(); //Get the email of the script owner. Need it to check if you are the owner of the file.
  for(var i in docs){
    try{
      viewer = docs[i].getViewers(); //We have to put this call in a try because sometimes it may return an error.
    }catch(e){
      viewer = "NA";
    }
    try{
      owner = docs[i].getOwner().getEmail();//We have to put this call in a try because sometimes it may return an error.
    }catch(e){
      owner = "NA";
    }
    if(viewer != "NA" && owner == me ){ //If there is wiewer and if you are  the owner of the file.
      j = 0;
      for(j in viewer){
        if(viewer[j].getEmail() == "Public"){//Check if the user Public exist in the Viewer.
          listfile = listfile + docs[i].getName()+ ", "; // I built a basic list but it can be change in a table for example.
        }
      }
    }
  }
  Browser.msgBox(listfile); //Just display the list in a message box.
}
Ce script donne un idée de ce que l'on peut faire mais le plus important est qu'il faut chercher le user Public dans les lecteurs (viewers) du fichier. Pour le moment il n'existe pas mieux.
La propriété de partage "Personnes avec le lien" (Users with the link) n'est pas trouvable par un moyen détourné.

Leave a Reply