Google AdminDirectory list all users data with thumbnail (ADVANCED!)

I finally managed to do something I've wanted to do for a while:

Get a list of all our google domain users data, so I can make a contacts app with thumbnail images and all. Getting the thumbnails to show was a real pain in the ***, as the thumbnails will only show privately through directory services. So I had to do a workaround.

This script is not for the faint of heart to implement. You need to have administrator privileges and add the right services to the apps script. This you have to figure out yourself.

 

EDIT: I noticed a part of the script changed when adding it here as code: 

"data:" it shold be "data:"

Ratatosk_0-1645617577556.png

 

 

 

 

 

 

 

function listAllUsers() {
    var ss = SpreadsheetApp.getActive();
    const baseURL = "https://admin.googleapis.com/admin/directory/v1/users/"
    var pageToken,
    page,
    count = 0;
    var listArray = [];
    listArray.push(['Full Name', 'First name', 'Last name', 'Email','Phone', 'Job Title', 'Department', 'EmployeeNumber', 'Thumbnail'])
    do {
        page = AdminDirectory.Users.list({
                domain : 'mydomain.com',
                orderBy : 'givenName',
                pageToken : pageToken
            });
        var users = page.users;
        if (users)  {     
            for (var i = 0; i < users.length; i++) {
                var user = users[i];

                let endPoint = "/photos/thumbnail";
            let url = baseURL + user.primaryEmail + endPoint;
            let headers = {"Authorization": "Bearer " + ScriptApp.getOAuthToken()};
            let parameters = {
            'method': 'GET' ,
            'pageToken': pageToken,  
            'muteHttpExceptions': true,
            'headers': headers
            };
             let urlResult = (url);
             
               let data = UrlFetchApp.fetch(url, parameters);
               
               
                let resultData = JSON.parse(data);
             let photo = resultData.photoData;
             if (photo === undefined) {
               encodedPhoto = "data&colon;image/jpeg;base64,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";}
               else {encodedPhoto = "data&colon;image/jpeg;base64," + resultData.photoData.replace(/_/g,'/').replace(/-/g,'+'); }
             

               console.log(encodedPhoto);
               
           var department,
                title, ID; // Addded two new variables 
                
                try { // Try to get the users department if there is an error push the error to the array
                    department = user.organizations[0].department;
                } catch (e) {
                    department = e
                }
                try {// Try to get the users title if there is an error push the error to the array
                    title = user.organizations[0].title;
                } catch (e) {
                    title = e
                }
                try {// Try to get the users title if there is an error push the error to the array
                    userID = user.externalIds[0].value;
                } catch (e) {
                    userID = e
                }
                
                function generatePhonesCell(phones) {
                    return phones
                    .map(phone => {
                    const value = phone.value
                    const type = phone.type.replaceAll('_', ' ')
                    return `${value} ` //(${type})
                 }
                 
)
            .join('\n')
}
                listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, generatePhonesCell(user.phones || []),title, department, userID, encodedPhoto ]);

            }
        }
        pageToken = page.nextPageToken;
        break; // This means you only get one page
    } while (pageToken);
    try {
        var outputSheet = ss.getSheetByName('googleUsers');
        outputSheet.getDataRange();
    } catch (err) {
        var outputSheet = ss.insertSheet('googleUsers', 2);
    }
    outputSheet.getDataRange().clear();
    outputSheet.getRange(1, 1, listArray.length, listArray[0].length).setValues(listArray);
   
    
  
        
}

 

 

 

 

 

 

 

6 0 1,889
0 REPLIES 0
Top Labels in this Space