İçerik Hizmeti

Bir komut dosyası web uygulaması olarak yayınlandığında, komut dosyasının URL'sine bir istek yapıldığında doGet() ve doPost() özel geri çağırma işlevleri çağrılır. İçerik hizmeti, HTML hizmeti ile oluşturulan bir kullanıcı arayüzü nesnesini döndürmek yerine ham metin içeriğini döndürmek için kullanılabilir. Bu, GET ve POST isteklerine yanıt veren ve çeşitli MIME türlerinde veri sunan, "hizmetler" görevi gören komut dosyaları yazmanıza olanak tanır.

Temel bilgiler

İçerik hizmetinin basit bir örneği aşağıda verilmiştir:

function doGet() {
  return ContentService.createTextOutput('Hello, world!');
}

Bir kullanıcı arayüzü sunarken uyguladığınız adımları uygulayarak komut dosyasını bir web uygulaması olarak dağıtın. Komut dosyasının URL'sine GET isteği yapıldığında Hello, world! metni döndürülür. Düz metne ek olarak, hizmet ATOM, CSV, iCal, JavaScript, JSON, RSS, vCard ve XML içeriğini döndürmeyi de destekler.

RSS özet akışı yayınlama

RSS özet akışını filtrelemek gibi biraz daha karmaşık bir işlemi deneyelim. XKCD çizgi romanları her zaman komiktir, ancak ekstra alternatif metni görmek için fareyle çizgi roman şeridinin üzerine gelmediğiniz sürece esprinin tamamını alamazsınız. Maalesef mobil tarayıcıda fareyle öğelerin üzerine gelinemediği için bu işe yaramaz.

Feed'i, ekstra bitiş çizgisinin doğrudan feed'de yer alacağı şekilde düzenlemek istediğimizi varsayalım. üzerine gelmek yerine, feed'i görmek için ekranı biraz aşağı kaydırmanız yeterliydi. Bu, mobil cihazlarda da işe yarar. Kod:

function doGet() {
  var feed =  UrlFetchApp.fetch('http://xkcd.com/rss.xml').getContentText();
  feed = feed.replace(
    /(<img.*?alt="(.*?)".*?>)/g,
    '$1' + new Array(10).join('<br />') + '$2');
  return ContentService.createTextOutput(feed)
    .setMimeType(ContentService.MimeType.RSS);
}

Bu karışık görünebilir, ancak basit parçalara bölünmüştür. Orijinal XKCD RSS özet akışını getirmek için URL Getirme hizmetini kullanırız. Daha sonra ihtiyacımız olan değişiklikleri yapmak için standart bir JavaScript normal ifadesi kullanırız. Son olarak, düzenlenen feed'i bir TextOutput nesnesine sarmalayıp MIME türünü RSS olarak ayarlarız.

Bunu uygulamalı olarak görmek için komut dosyasını web uygulaması olarak yayınlayın ve anonim erişime izin verdiğinizden emin olun (zira RSS okuyucunuz sayfayı anonim bir kullanıcı olarak ziyaret edecektir). Ardından, RSS okuyucunuza hizmetin URL'sini (orijinal RSS özet akışının değil) ekleyin veya hizmeti doğrudan bir web tarayıcısında ziyaret edin. İşte bu kadar.

Komut dosyalarından JSON sunma

İçerik hizmetiyle başka neler yapabiliriz? JSON dosyasını diğer komut dosyalarına veya diğer web sitelerine ve hizmetlere sunmaya ne dersiniz? Aşağıda, bir takvim aralığının belirli bir saatte açık olup olmadığını görmek için herkesin kullanabileceği bir hizmeti uygulayan basit bir komut dosyası verilmiştir.

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}

Daha önce olduğu gibi, çalışması için bunu anonim bir web uygulaması olarak yayınlayın. Bu durumda, yeni hizmetinizin kullanıcıları hizmet URL'sinin sonuna URL parametreleri ekleyerek hizmeti kullanabilir. start ve end parametreleri, standart Unix sıfır zamanında kontrol edilecek bir zaman aralığı sağlar.

curl -L URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000

Hizmet, takviminizde bu aralıkta herhangi bir şey olup olmadığını bildiren JSON sonucu döndürür.

{"available":true}

Web sayfalarında JSONP sunma

Küçük bir değişiklikle, JSON hizmetiniz JSONP haline gelebilir. Yani tarayıcıda JavaScript'ten çağrılabilir. Yeni komut dosyası şöyledir:

function doGet(request) {
  var events = CalendarApp.getEvents(
    new Date(Number(request.parameters.start) * 1000),
    new Date(Number(request.parameters.end) * 1000));
  var result = {
    available: events.length == 0
  };
  return ContentService.createTextOutput(
    request.parameters.prefix + '(' + JSON.stringify(result) + ')')
    .setMimeType(ContentService.MimeType.JAVASCRIPT);
}

Bu hizmeti bir tarayıcıdan çağırmak için prefix adlı ek parametreyle src özelliği hizmetinizin URL'si olan bir komut dosyası etiketi oluşturun. Bu, hizmet tarafından döndürülen değerle çağrılacak olan istemci taraflı JavaScript'inizde bulunan işlevin adıdır.

<script src="URL_OF_YOUR_SCRIPT?start=1325437200&end=1325439000&prefix=alert"></script>

Ön ekimiz olarak tarayıcının yerleşik alert() işlevini belirttiğimizden, bu örnekte tarayıcıda hizmet çıkışını içeren bir mesaj kutusu gösterilir. Döndürülen JavaScript kodu şöyle görünür:

alert({"available":true})

Yönlendirmeler

Güvenlik nedeniyle, İçerik hizmeti tarafından döndürülen içerik script.google.com üzerinden sunulmuyor, bunun yerine script.googleusercontent.com adresindeki tek seferlik bir URL'ye yönlendiriliyor. Bu nedenle, başka bir uygulamaya veri döndürmek için İçerik hizmetini kullanıyorsanız HTTP istemcisinin yönlendirmeleri izleyecek şekilde yapılandırıldığından emin olmanız gerekir. Örneğin, cURL komut satırı yardımcı programında -L işaretini ekleyin. Bu davranışın nasıl etkinleştirileceğiyle ilgili daha fazla bilgi için HTTP istemcinizin belgelerine göz atın.