Topluluk Bağlayıcısı oluşturma

Topluluk Bağlayıcısı oluşturma adımları şunlardır:

  1. Yeni bir Apps Komut Dosyası projesi oluşturun.
  2. Bağlayıcı kodunu yazın.
  3. Proje manifestini doldurun.

Yeni bir Apps Komut Dosyası projesi oluşturma

Yeni proje oluşturmak için Google Apps Komut Dosyası'nı ziyaret edin. Apps Komut Dosyası, varsayılan komut dosyasıdır. myFunction işlevini kaldırıp yeniden adlandırabilirsiniz gösterir. (Apps Komut Dosyası hakkında daha fazla bilgi edinin)

Bağlayıcı kodunu yazın

Her bağlayıcının belirli bir işlev grubunun tanımlanması gerekir. İlgili içeriği oluşturmak için kullanılan barındırma uygulaması (ör. Looker Studio) bu işlevleri yürütür. Sizin bağlayıcının gelen istekleri işlemesi ve Topluluk Bağlayıcısı API referansı. Geliştirme sırasında sorunlarla karşılaşırsanız kodunuz varsa yardım için hata ayıklama kılavuzunu okuyun.

getAuthType() dosyasında kimlik doğrulama türünü tanımlayın

Bu işlev, Search Ads 360'ta kullanılan kimlik doğrulama yöntemini Üçüncü taraf hizmet. Ayrıntılar için getAuthType() referansına bakın. Şu anda Desteklenen kimlik doğrulama yöntemleri AuthType referansında listelenmiştir.

Örneğin, aşağıdaki bağlayıcı kimlik doğrulama gerektirmez:

npm-downloads/src/auth.js
var cc = DataStudioApp.createCommunityConnector();

// https://developers.google.com/datastudio/connector/reference#getauthtype
function getAuthType() {
  var AuthTypes = cc.AuthType;
  return cc
    .newAuthTypeResponse()
    .setAuthType(AuthTypes.NONE)
    .build();
}

Veri kaynağınız OAuth 2.0 kimlik doğrulaması gerektiriyorsa OAuth 2.0 kimlik doğrulama rehberini kullanın ve bağlayıcınızdır.

Yapılandırmayı getConfig() ile tanımlayın

getConfig() işlevi, bağlayıcınızın gerektirdiği, kullanıcı tarafından sağlanan değerler dahil. Görüntüleyin Ayrıntılar için getConfig() referansını inceleyin.

getConfig() tarafından verilen yanıta göre Looker Studio, bağlayıcı yapılandırma ekranı. Desteklenen yapılandırma öğeleri listelenir ConfigType referansında.

Veri kaynağınız parametre olarak tarih gerektiriyorsa şunu çağırın: config.setDateRangeRequired(true). Koşullu veya dinamik olarak sormanız yapılandırmayla ilgili sorularınız için adımlı yapılandırmaya göz atın.

Aşağıda, kullanıcının bir giriş yapmasını gerektiren bir bağlayıcı npm paket adı kodu. Bir bilgi ve bir giriş alanı, getConfig() işlevi:

npm-downloads/src/main.js
// https://developers.google.com/datastudio/connector/reference#getconfig
function getConfig() {
  var config = cc.getConfig();

  config
    .newInfo()
    .setId('instructions')
    .setText(
      'Enter npm package names to fetch their download count. An invalid or blank entry will revert to the default value.'
    );

  config
    .newTextInput()
    .setId('package')
    .setName(
      'Enter a single package name or multiple names separated by commas (no spaces!)'
    )
    .setHelpText('e.g. "googleapis" or "package,somepackage,anotherpackage"')
    .setPlaceholder(DEFAULT_PACKAGE)
    .setAllowOverride(true);

  config.setDateRangeRequired(true);

  return config.build();
}
.

Alanları getSchema() ile tanımlayın.

Bu işlev, belirli bir isteğin şemasını almak için çağrılır. Herhangi biri getConfig() işlevi tarafından tanımlanan yapılandırma parametreleri sağlanır request bağımsız değişkeninde. Ayrıntılar için getSchema() referansını inceleyin.

Bağlayıcınızın veri kaynağına ve şema sabitlenebilir veya şemayı dinamik olarak sağlamanız gerekebilir. istek zamanı.

Örneğin, bir bağlayıcı Rapor Kimliğine dayalı olarak rapor verileri getiriyorsa, söz konusu rapor için döndürülen verilerdir ve bu nedenle şema önceden bilinmeyebilir. Bu durumda, getSchema() için veri getirme işlemi gerekebilir ve şemanın olabileceğini unutmayın.

npm-downloads/src/main.js
function getFields() {
  var fields = cc.getFields();
  var types = cc.FieldType;
  var aggregations = cc.AggregationType;

  fields
    .newDimension()
    .setId('packageName')
    .setName('Package')
    .setType(types.TEXT);

  fields
    .newDimension()
    .setId('day')
    .setName('Date')
    .setType(types.YEAR_MONTH_DAY);

  fields
    .newMetric()
    .setId('downloads')
    .setName('Downloads')
    .setType(types.NUMBER)
    .setAggregation(aggregations.SUM);

  return fields;
}

// https://developers.google.com/datastudio/connector/reference#getschema
function getSchema(request) {
  return {schema: getFields().build()};
}

getData() ile verileri getirme ve döndürme

Bu işlev, belirli bir istek için veri almak üzere çağrılır. Herhangi bir yapılandırma getConfig() işlevi tarafından tanımlanan parametreler request bağımsız değişken. Ayrıntılar için getData() referansını inceleyin.

getData() isteğindeki şu parametreler için ek URL gerekir: dikkat:

  • lastRefresh
    lastRefresh, en güncel zamanı işaret eden bir zaman damgasını temsil eder verilerin yenilenmesini talep eder. Değeri new Date(timestampString) Apps Komut Dosyası Önbellek Hizmeti kullanıyorsanız veya başka bir önbelleğe alma yöntemi kullanıyorsanız lastRefresh zaman damgası Veri kaynağına yeni bir getirme isteğinde bulunulacağını mı yoksa veri kaynağına mı yeni bir getirme isteği gönderileceğini verilerini geri yükleyebilirsiniz.

  • dateRange
    dateRangeRequired, getConfig() içinde true değerine ayarlanırsa her getData() çağrısı, istekte seçilen tarih aralığını içerir. Görüntüleyin Daha ayrıntılı bilgi için Tarih Aralıklarıyla çalışma başlıklı makaleyi inceleyin.

Aşağıdaki örnek, gelen isteğe dayalı olarak verileri getirir ve paket istatistikleri:

npm-downloads/src/main.js
// https://developers.google.com/datastudio/connector/reference#getdata
function getData(request) {
  request.configParams = validateConfig(request.configParams);

  var requestedFields = getFields().forIds(
    request.fields.map(function(field) {
      return field.name;
    })
  );

  try {
    var apiResponse = fetchDataFromApi(request);
    var normalizedResponse = normalizeResponse(request, apiResponse);
    var data = getFormattedData(normalizedResponse, requestedFields);
  } catch (e) {
    cc.newUserError()
      .setDebugText('Error fetching data from API. Exception details: ' + e)
      .setText(
        'The connector has encountered an unrecoverable error. Please try again later, or file an issue if this error persists.'
      )
      .throwException();
  }

  return {
    schema: requestedFields.build(),
    rows: data
  };
}

/**
 * Gets response for UrlFetchApp.
 *
 * @param {Object} request Data request parameters.
 * @returns {string} Response text for UrlFetchApp.
 */
function fetchDataFromApi(request) {
  var url = [
    'https://api.npmjs.org/downloads/range/',
    request.dateRange.startDate,
    ':',
    request.dateRange.endDate,
    '/',
    request.configParams.package
  ].join('');
  var response = UrlFetchApp.fetch(url);
  return response;
}

/**
 * Parses response string into an object. Also standardizes the object structure
 * for single vs multiple packages.
 *
 * @param {Object} request Data request parameters.
 * @param {string} responseString Response from the API.
 * @return {Object} Contains package names as keys and associated download count
 *     information(object) as values.
 */
function normalizeResponse(request, responseString) {
  var response = JSON.parse(responseString);
  var package_list = request.configParams.package.split(',');
  var mapped_response = {};

  if (package_list.length == 1) {
    mapped_response[package_list[0]] = response;
  } else {
    mapped_response = response;
  }

  return mapped_response;
}

/**
 * Formats the parsed response from external data source into correct tabular
 * format and returns only the requestedFields
 *
 * @param {Object} parsedResponse The response string from external data source
 *     parsed into an object in a standard format.
 * @param {Array} requestedFields The fields requested in the getData request.
 * @returns {Array} Array containing rows of data in key-value pairs for each
 *     field.
 */
function getFormattedData(response, requestedFields) {
  var data = [];
  Object.keys(response).map(function(packageName) {
    var package = response[packageName];
    var downloadData = package.downloads;
    var formattedData = downloadData.map(function(dailyDownload) {
      return formatData(requestedFields, packageName, dailyDownload);
    });
    data = data.concat(formattedData);
  });
  return data;
}

Proje manifestini doldurun

Manifest dosyası, topluluk bağlayıcınızla ilgili şu bilgileri içerir: Looker Studio'da bağlayıcınızı dağıtmak ve kullanmak için gereklidir.

Manifest dosyasını Apps Komut Dosyası geliştirme ortamında düzenlemek için Görünüm menüsünü açın ve Manifest dosyasını göster'i tıklayın. Bu işlem, yeni bir appsscript.json manifest dosyası.

Manifest dosyasını aşağıdaki verileri içerecek şekilde güncelleyin:

npm-downloads/src/appsscript.json
{
  "dependencies": {
    "libraries": []
  },
  "dataStudio": {
    "name": "npm Downloads",
    "logoUrl": "https://raw.githubusercontent.com/npm/logos/master/npm%20square/n-64.png",
    "company": "Google Data Studio Developer Relations",
    "companyUrl": "https://developers.google.com/datastudio/",
    "addonUrl": "https://github.com/googledatastudio/community-connectors/tree/master/npm-downloads#readme",
    "supportUrl": "https://github.com/googledatastudio/community-connectors/issues",
    "description": "Get npm package download counts.",
    "sources": ["npm"],
    "templates": {
      "default": "1twu0sHjqR5dELAPyGJcw4GS3-D0_NTrQ"
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request"
  ]
}

Looker Studio manifesti hakkında ayrıntılı bilgi için manifest referansına bakın.

Sonraki adımlar

Sonraki adım Topluluk Bağlayıcısı'nızı dağıtmaktır.