Google脚本执行失败:请稍后重试并考虑使用批处理操作。用户超过配额

时间:2017-02-08 05:56:34

标签: google-apps-script google-contacts

我有一个脚本,我将谷歌联系人与谷歌电子表格同步。 我的帐户中有大约11000个联系人,我写了一个函数getContacts,它从谷歌联系人那里获取所有联系信息并将其发送到函数printContacts,但是因为有太多的联系人脚本无法执行完成。 我尝试使用代码在每次达到最大执行时间时创建一个触发器,但现在我遇到了一个新问题,因为我有太多ContactsApi调用脚本显示错误“超出用户配额” 如果有人能够使用此代码,那将是一个很好的帮助

//Function gets the contacts from the Google Contacts and stores in an array. Calls printContacts function with that array and no. of rows as argument
    function getContacts() {
      var startTime= (new Date()).getTime();
      Logger.log("start time set")

      var scriptProperties = PropertiesService.getScriptProperties();
      var num_contacts = scriptProperties.getProperty('num_contacts');
      Logger.log("script property num_contacts : "+Number(num_contacts))

      setHeader();
      var groupName = 'System Group: My Contacts';    
      var group  = ContactsApp.getContactGroup(groupName);
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var contacts = ContactsApp.getContactsByGroup(group);

      var allContacts = []; 
      var contactDetails = [];
      var data, numData, dataArray = [], extraArray = [];
      var contact_length = contacts.length;
      Logger.log("contact_length : "+contact_length);
      Logger.log("contacts.length : "+contacts.length);
      var MAX_RUNNING_TIME = 300000;
      var REASONALBLE_TIME_TO_WAIT = 60000;
      var limit = contact_length;
      Logger.log("limit :"+limit)


      for(var i=Number(num_contacts); i <= contacts.length; i++) {

        var currTime = (new Date()).getTime();
        if(currTime - startTime >= MAX_RUNNING_TIME){

          Logger.log("Value of i in if section : "+i)
          scriptProperties.setProperty("num_contacts",i);
          ScriptApp.newTrigger("getContacts")
          .timeBased()
          .at(new Date(currTime+REASONALBLE_TIME_TO_WAIT))
          .create();

          Logger.log("trigger created for i = "+i)
          break;      
        }
        else{
          if(i < contacts.length)
          {
            allContacts[i] = [];

            contactDetails[0] = contacts[i].getGivenName();
            contactDetails[1] = contacts[i].getFamilyName();


            data = contacts[i].getEmails();
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getAddress();
            }
            contactDetails[2] = dataArray.join("\n");
            dataArray = [];

            data = contacts[i].getPhones(ContactsApp.Field.MOBILE_PHONE);
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getPhoneNumber();
            }
            contactDetails[3] = dataArray.join("\n"); 
            dataArray = [];


            data = contacts[i].getPhones(ContactsApp.Field.WORK_PHONE);
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getPhoneNumber();
            }

            contactDetails[5] = dataArray.join("\n"); 
            dataArray = [];

            // new section for home_phone ----- start
            data = contacts[i].getPhones(ContactsApp.Field.HOME_PHONE);
            numData = data.length;
            for(var j = 0; j < numData; j++){
              dataArray[j] = data[j].getPhoneNumber();
            }
            contactDetails[6] = dataArray.join("\n");
            dataArray = [];
            // new section for home_phone ----- end

            data = contacts[i].getCompanies();
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getCompanyName();
              extraArray[j] = data[j].getJobTitle();
            }

            contactDetails[7] = dataArray.join("\n");  
            dataArray = [];

            contactDetails[8] = extraArray.join("\n"); 

            data = contacts[i].getAddresses();
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getAddress();
            }

            contactDetails[9] = dataArray.join("\n");  
            dataArray = [];

            contactDetails[10] = contacts[i].getNotes();

            data = contacts[i].getCustomFields();
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              dataArray[j] = data[j].getValue();
            }

            contactDetails[11] = dataArray.join("\n");  
            dataArray = [];  
            data = [];

            data = contacts[i].getContactGroups();
            numData = data.length;
            for(var j = 0; j < numData; j++) {
              if(data[j].getName() == 'System Group: My Contacts')
              {
                continue;
              }
              else
              {
                dataArray[j] = data[j].getName();
              }
            }

            contactDetails[4] = dataArray.join("\n");  
            dataArray = [];

            contactDetails[12] = 'saved';
            contactDetails[13] = contacts[i].getId();

            for(var j = 0; j < 14; j++) {
              allContacts[i][j] =  contactDetails[j];
            }

          }



        } 

      } 
      Logger.log("last value of i "+i);
      Logger.log("num of contacts "+allContacts.length)
      printContacts(allContacts, contacts.length);
      setProperties_getContacts();
      return;
    }

    //Function to print contacts to the spreadsheet.
    function printContacts(contactsArray, i) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();

      var range = sheet.getRange(2, 1, i, 14);
      range.setValues(contactsArray);
    }

0 个答案:

没有答案