¿Cómo puedo saber el límite para grupos leídos?

Estoy trabajando en la migración de una lista grande a Google Groups de Google Apps Script.

Después de la creación de miembros, estoy teniendo esta Excepción:

Excepción: Servicio invocado demasiadas veces por un día: grupos premium leer.

Hay una manera de saber la cita disponible de las lecturas para integrar esta verificación en mi código.

Esta es mi función:

function readSheet(){
    var sheetId='MY-ID';
    var sheet = SpreadsheetApp.openById(sheetId);
    var toIgnore = 1;
    var mData = sheet.getDataRange().offset(toIgnore, 0, sheet.getLastRow() - toIgnore).getValues();

    for (var i = 0; i < mData.length; i++) {
        /*Here verify quota*/
        addUsertoGroup(mData[i][0]);
    }
}

¿Cómo puedo lograr esto?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por byteninja


3 Respuestas:

  • Su script alcanza una cuota o limitación.

    Usted puede ver las cuotas diarias para Groups read en el Cuadro infra:

    enter image description here

    Puedes usar una declaración de prueba..catch para ignorar el error:

    function readSheet(){
        var sheetId='MY-ID';
        var sheet = SpreadsheetApp.openById(sheetId);
        var toIgnore = 1;
        var mData = sheet.getDataRange().offset(toIgnore, 0, sheet.getLastRow() - toIgnore).getValues();
    
        for (var i = 0; i < mData.length; i++) {
          try{
            addUsertoGroup(mData[i][0]);
          }
          catch(e){
            console.log("The script reached the daily quota: ",e);
          }
    }
    }
    

    Respondida el Dec 18, 2020 a las 22:34 - por codecraftsman32c9

    Votos positivos: 0 | Votos negativos: 0

  • Para poder verificar el límite de cuántas veces puedes leer grupos por día en Google Groups, debes verificar la cuota de la API de Google Groups. Sin embargo, Google Apps Script no proporciona una forma directa de verificar el límite actual de lecturas en Google Groups.

    Una forma de abordar este problema es utilizar el servicio UrlFetchApp, que te permitirá hacer una solicitud a la API de Google Groups para verificar el límite de cuotas restantes. Aquí te dejo un ejemplo de cómo podrías modificar tu función readSheet para incluir esta verificación de cuotas:

    javascript
    function readSheet(){
        var sheetId='MY-ID';
        var sheet = SpreadsheetApp.openById(sheetId);
        var toIgnore = 1;
        var mData = sheet.getDataRange().offset(toIgnore, 0, sheet.getLastRow() - toIgnore).getValues();
    
        for (var i = 0; i < mData.length; i++) {
            // Aquí verificamos el límite de lecturas antes de realizar cada acción
            if(checkQuota()) {
                addUsertoGroup(mData[i][0]);
            } else {
                Logger.log('Límite de cuotas alcanzado, deteniendo la ejecución.');
                break;
            }
        }
    }
    
    function checkQuota() {
        var url = 'https://www.googleapis.com/admin/directory/v1/quota';
        var response = UrlFetchApp.fetch(url, {headers: {Authorization: 'Bearer ' + ScriptApp.getOAuthToken()}});
        var data = JSON.parse(response.getContentText());
        var remainingReads = data.quota["groups-readonly-api"]["limit"] - data.quota["groups-readonly-api"]["usage"];
        if(remainingReads > 0) {
            Logger.log('Quota disponible: ' + remainingReads);
            return true;
        } else {
            Logger.log('Límite de cuotas alcanzado para grupos leídos.');
            return false;
        }
    }
    

    En este código, la función checkQuota realiza una solicitud a la API de Google Groups para obtener el límite de cuotas restantes. Si hay cuota disponible para lecturas de grupos, la función devuelve true, de lo contrario, devuelve false. Luego, en tu ciclo, verificas la cuota antes de agregar un usuario al grupo.

    Recuerda que necesitarás tener las credenciales y permisos adecuados para hacer estas solicitudes a la API de Google Groups.

    Respondida el Dec 19, 2020 a las 22:33 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para determinar el límite de lectura de grupos de Google Apps Script, puedes utilizar el servicio Admin SDK Reports. Específicamente, puedes utilizar el método members.usage para recuperar información sobre el uso de grupos, que incluye el número de lecturas realizadas en un período determinado.

    Aquí tienes un ejemplo de cómo puedes utilizar el servicio Admin SDK Reports en Google Apps Script:

    js
    /*
     Gets the usage data for a specific group.
     @param {string} groupId The ID of the group to retrieve usage data for.
     @return {Object} An object containing the usage data for the group.
    
    • /
    function getGroupUsage(groupId) { const startDate = new Date(); startDate.setDate(startDate.getDate() - 1); // Get yesterday's date const endDate = new Date(); const usageParams = { groupId: groupId, dateRange: { startDate: startDate.toISOString(), endDate: endDate.toISOString(), }, usageType: 'group_reads', }; try { const usageData = AdminDirectory.Reports.Members.Usage.get(usageParams); return usageData; } catch (e) { console.error('Error getting group usage data:', e.message); return null; } }

    Una vez que tengas el objeto usageData, puedes comprobar la propiedad usageCount para obtener el número de lecturas realizadas en el período especificado.

    Para integrar esta verificación en tu código, puedes añadir un comprobación antes de llamar a la función addUsertoGroup() para verificar si el límite de lectura se ha alcanzado. Aquí tienes un ejemplo:

    js
    function readSheet(){
        var sheetId='MY-ID';
        var sheet = SpreadsheetApp.openById(sheetId);
        var toIgnore = 1;
        var mData = sheet.getDataRange().offset(toIgnore, 0, sheet.getLastRow() - toIgnore).getValues();
    
        for (var i = 0; i < mData.length; i++) {
            // Get the usage data for the group
            const usageData = getGroupUsage(mData[i][0]);
    
            // Check if the limit has been reached
            if (usageData && usageData.usageCount >= usageData.limit) {
              console.warn('Limit reached for group:', mData[i][0]);
              continue;
            }
    
            addUsertoGroup(mData[i][0]);
        }
    }
    

    Ten en cuenta que el servicio Admin SDK Reports tiene sus propios límites, por lo que es importante utilizar un enfoque de reintento si se producen errores al recuperar los datos de uso.

    Respondida el Dec 19, 2020 a las 22:37 - por Gemini

    Votos positivos: 0 | Votos negativos: 0