1

Google Apps Script を使用して、XML リクエストの送信を指定するGoogle Apps Reporting APIからデータを取得しようとしています

私の目標は、disk_space_report を取得し、そのデータをスプレッドシートに入れることです。これにより、そのスプレッドシートのディスク容量を監視し、データを処理することもできます。

そのようなことを行う方法の例を誰か教えてもらえますか?

ありがとうございます。

4

2 に答える 2

1

これは、私が作成し、Google Apps ユーザー アカウント レポートを取得するために使用した小さなコードです。

function startHere(){
  var domain = UserManager.getDomain();
  var fDate = '2012-12-18';//Utilities.formatDate(new Date(), Session.getTimeZone(), 'yyyy-MM-dd');
  var url = 'https://www.google.com/hosted/services/v1.0/reports/ReportingData';

  //Build API request parameters
  var fetchArgs = googleOAuth_('Reporting', url);
  fetchArgs.method = 'POST';
  var rawXML = '<?xml version="1.0" encoding="UTF-8"?>'
      +'<rest xmlns="google:accounts:rest:protocol" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">'
      +'<type>Report</type>'
      +'<domain>'+domain+'</domain>'
      +'<date>'+fDate+'</date>'
      +'<page>1</page>'
      +'<reportType>daily</reportType>'
      +'<reportName>accounts</reportName>'
      +'</rest>';
  fetchArgs.payload = rawXML;
  fetchArgs.contentType = "application/xml";
  fetchArgs.headers = {"Content-type": "application/atom+xml charset=UTF-8"}; 

  //Fetch CSV data
  var csvData = UrlFetchApp.fetch(url, fetchArgs).getContentText();

  //Parse CSV data and make a 2D array
  var recs = csvData.split('\n');
  var data = []; //this is actual 2D data
  for(var i=0; i<recs.length-1; i++){
    var temp = recs[i].split(',');
    if(i==0) temp.push('percent_disk_usage');
    else{
      var usage = (parseInt(temp[5])*100)/(parseInt(temp[4])*1024*1024);
      temp.push(usage);
    }
    data.push(temp);
  }
//Write data to spreadsheet
}

function googleOAuth_(name,scope) {
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey("anonymous");
  oAuthConfig.setConsumerSecret("anonymous");
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}
于 2012-12-19T10:34:26.793 に答える
0

簡単なサンプルです。スクリプト内に、xmlRequest という名前の新しい HTML ファイルを作成します。内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<rest xmlns="google:accounts:rest:protocol"
    xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
        <type>Report</type>
    <domain>YOURDOMAIN.COM</domain>
      <date>2012-12-01</date>
        <page>1</page>
        <reportType>daily</reportType>
        <reportName>accounts</reportName>
</rest>

YOURDOMAIN.COM を Google Apps ドメインに変更します。Code.gs 内に次のコードを貼り付けます。

/**
 * Script configuration
 */
var SCOPE = 'https://www.google.com/hosted/services/v1.0/reports/ReportingData';
var APPNAME = "disk_space_report";
var URL = 'https://www.google.com/hosted/services/v1.0/reports/ReportingData';

function testit() {
  // Generate the new entry from a template
  var template = HtmlService.createHtmlOutputFromFile("xmlRequest").getContent();
  var response = UrlFetchApp.fetch(URL,googleOAuth_('POST', template));
  Logger.log(response.getContentText());

}


/**
 * Google authentication loader
 * @param {String} method the HTTP method to use for the UrlFetch operation, possible values are: GET, POST, PUT, DELETE
 * @param {String} payload the payload to use if needed
 * @return {Object} configuration options for UrlFetch, including oAuth parameters
 */
function googleOAuth_(method, payload) {
  // Shared configuration for all methods
  var oAuthConfig = UrlFetchApp.addOAuthService(APPNAME);
  oAuthConfig.setRequestTokenUrl('https://www.google.com/accounts/OAuthGetRequestToken?scope='+encodeURIComponent(SCOPE));
  oAuthConfig.setAuthorizationUrl('https://www.google.com/accounts/OAuthAuthorizeToken');
  oAuthConfig.setAccessTokenUrl('https://www.google.com/accounts/OAuthGetAccessToken');
  oAuthConfig.setConsumerKey('anonymous');
  oAuthConfig.setConsumerSecret('anonymous');

  // Detect the required method
  switch(method) {
    case "GET":
      return {oAuthServiceName:APPNAME, oAuthUseToken:'always'};
      break;
    case "POST":
      return {oAuthServiceName:APPNAME, oAuthUseToken:'always', payload: payload, contentType: 'application/atom+xml', method: "POST"};
      break;
    case "PUT":
      return {oAuthServiceName:APPNAME, oAuthUseToken:'always', payload: payload, contentType: 'application/atom+xml', method: "PUT"};
      break;
    case "DELETE":
      return {oAuthServiceName:APPNAME, oAuthUseToken:'always', method: "DELETE"};
      break;
    default:
      return {oAuthServiceName:APPNAME, oAuthUseToken:'always'};
      break;
  }
}

testit 関数を実行すると、ロガー内で生のディスク使用状況統計を取得して解析する必要があります。

于 2012-12-19T09:55:21.977 に答える