タグ別アーカイブ: google apps

GoogleのAPIを利用したアプリケーションをGoogle Apps Marketplace (Chrome Web Store)で公開する方法 その2

| 1件のフィードバック

前回に引き続き、Google Apps Marketplaceへのアプリケーションの公開手順を紹介します。

手順

  1. 利用するAPIの登録
  2. アプリケーションの開発
  3. Chrome Web Storeへの登録
  4. インストールのテスト
  5. アプリケーションの公開とレビュー申請

今回は3から5の手順です。

注意事項

アプリケーションをGoogle Apps Marketplaceで公開することが目的ですが、アプリケーションの登録はChrome Web Storeのディベロッパーダッシュボードから行います。
また、アプリケーションの公開に伴い、初回の公開時のみ5ドルの支払いが必要となります。

続きを読む

GoogleのAPIを利用したアプリケーションをGoogle Apps Marketplace (Chrome Web Store)で公開する方法 その1

| コメントをどうぞ

Googleが公開しているアプリケーションのプラットフォームとして、
・Google Apps Marketplace(Google Apps for Work利用者向け)
・Chrome Web Store(Googleの個人アカウント向け)
があります。

現在私たちはGoogle Apps向けのポータルサービスとして、infoScoop for Google AppsをGoogle Apps Marketplaceで公開しています。
http://www.infoscoop4g.com/ja/

今回と次回の2回に分けて、GoogleのAPIを利用したアプリケーションを公開する方法を紹介します。
Google Apps Marketplaceに公開する場合もChrome Web Storeに公開する場合も、基本的な流れは同じです。
参考: https://developers.google.com/apps-marketplace/

手順

公開までの手順は大きく5つに分かれています。

  1. 利用するAPIの登録
  2. アプリケーションの開発
  3. Chrome Web Storeへの登録
  4. インストールのテスト
  5. アプリケーションの公開とレビュー申請

今回は1と2の手順です。

続きを読む

Google カレンダーの予定入力画面のURLパラメータ

| コメントをどうぞ

Googleカレンダーの予定入力画面は通常、以下のようなリンクで開く事ができます。

https://www.google.com/calendar/event?action=TEMPLATE
または
https://www.google.com/calendar/render?action=TEMPLATE

上記のリンクのように特に何も指定しない場合、デフォルトの状態で予定の新規入力画面が開きます。
このリンクは、URLパラメータにより件名、場所、説明、ゲストなどを指定することが可能です。

続きを読む

Google Apps Marketplace APIのCustomerLicense

| 1件のフィードバック

Marketplaceで公開している自分のアプリケーションが、あるドメインでインストールされているかをチェックするAPIです。

Google Apps Marketplace APIのCustomerLicense
https://developers.google.com/apps-marketplace/v2/reference/customerLicense

リファレンスページで試すが403エラー

以下のページの Try it! で試したのですが、403エラーが出てしまいました。
https://developers.google.com/apps-marketplace/v2/reference/customerLicense/get

403 Forbidden

Cache-Control:  private, max-age=0
Content-Encoding:  gzip
Content-Length:  135
Content-Type:  application/json; charset=UTF-8
Date:  Fri, 07 Nov 2014 04:43:55 GMT
Expires:  Fri, 07 Nov 2014 04:43:55 GMT
Server:  GSE

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "forbidden",
        "message": "Not authorized to access the application ID"
      }
    ],
    "code": 403,
    "message": "Not authorized to access the application ID"
  }
}

Stack Overflowの以下の投稿を参考にソースコードを作成したところ、APIを利用してアプリケーションのインストール状況を確認できました。
http://stackoverflow.com/questions/21410538/error-consuming-customerlicense-app-marketplace-with-service-account-oauth2

ソースコード

以下のパラメータを任意に設定します。

  • SERVICE_ACCOUNT_EMAIL: Service Accountのメールアドレス
  • SERVICE_ACCOUNT_PKCS12_FILE_PATH: ダウンロードしたP12ファイルのパス
  • APPLICATION_ID: Google Developer ConsoleのProject Number(数字12桁)
  • CUSTOMER_ID: インストール状況をチェックするドメイン名
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;

public class CustomerLicense {
    public static void main(String[] args) throws GeneralSecurityException, IOException {
        String SERVICE_ACCOUNT_EMAIL = "103425845188-onbg603ons33o9becsffdauc6akcb548@developer.gserviceaccount.com";
        String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "*****.p12";
        String SCOPE = "https://www.googleapis.com/auth/appsmarketplace.license";
        String APPLICATION_ID = "103425845188";
        String CUSTOMER_ID = "infoscoop.org";

        GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(new NetHttpTransport())
        .setJsonFactory(new JacksonFactory())
        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
        .setServiceAccountScopes(Collections.singleton(SCOPE))
        .setServiceAccountPrivateKeyFromP12File(new File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
        .build();
        credential.refreshToken();
        String token = credential.getAccessToken();

        URL url = new URL("https://www.googleapis.com/appsmarket/v2/customerLicense/"+ APPLICATION_ID + "/" + CUSTOMER_ID);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Authorization", "Bearer "+token);
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            try {
                    InputStreamReader isr = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
                    BufferedReader reader = new BufferedReader(isr);
                    String line;
                    while ((line = reader.readLine()) != null) {
                        System.out.println(line);
                    }
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    }
}

実行結果

{"kind":"appsmarket#customerLicense","id":"103425845188/infoscoop.org","applicationId":"103425845188","customerId":"infoscoop.org","state":"ACTIVE","editions":[{"editionId":"default_edition","seatCount":-1}]}

Google Apps Scriptを触ってみた

| コメントをどうぞ

今回はGoogle Apps Scriptについて紹介します。

Google Apps Scriptとは

Google Apps Scriptはサーバーサイドのスクリプト言語です。
JavaScriptでプログラムを作成することで、Google Appsの様々なサービスに対して処理を実行することができます。

Google Apps Script — Google Developers
https://developers.google.com/apps-script/?hl=ja

Google Apps Scriptを触ったことない人は、以下のサイトが参考になると思います。

ドットインストール – Google Apps Script入門
http://dotinstall.com/lessons/basic_google_apps_script

トリガー

Google Apps Scriptの細かい説明は省略しますが、個人的に気に入っている機能である「トリガー」について紹介します。

トリガーとは、作成したプログラムを定期的に実行してくれる機能です。
定期実行する方法としては、Cronやタスクスケジューラなどがありますが、トリガーは数クリックで設定ができてGoogleが実行してくれるという手軽さがとてもよいです。

Alt

以下の形式で定期実行の間隔を指定できます。

  • 特定の日時
    • YYYY-MM-DD HH:MM 形式の日付
  • 分タイマー
    • 1, 5, 10, 15, 30分ごと
  • 時タイマー
    • 1, 2, 4, 6, 8, 12時間ごと
  • 日タイマー
    • 午前0時~1時, 午前1時~2時, … , 午後11時~午前0時
  • 週タイマー
    • 毎週月曜日, 毎週火曜日, … 毎週日曜日
    • 午前0時~1時, 午前1時~2時, … , 午後11時~午前0時
  • 月タイマー
    • 1, 2, … ,31
    • 午前0時~1時, 午前1時~2時, … , 午後11時~午前0時

このトリガーの機能を利用して、議事録ファイルを作成するスクリプトを書いてみました。
要件は以下の通りです。
続きを読む

Google Apps 各種オブジェクトの名、説明などの最大長

| コメントをどうぞ

Google Appsで作成できるユーザー、グループ、カレンダーリソースについて名称や説明などの最大長などを調べてみました。

  • ユーザー
    設定項目 最大長 使用できない文字
    60文字 < = >
    60文字 < = >
    メールアドレス 64文字 ! ” # $ % & ( ) * + , / : ; < = > ? @ [ ] ^ ` { | } ~

     

  • グループ
    設定項目 最大長 使用できない文字
    グループ名 60文字 < = >
    メールアドレス 64文字 ! ” # $ % & ( ) * + , / : ; < = > ? @ [ ] ^ ` { | } ~
    説明 4096文字 < = >

     

  • カレンダーリソース
    設定項目 最大長 使用できない文字
    リソース名 100バイト
    リソースの種類 100バイト
    説明 1000バイト

上記の通りオブジェクト毎にまちまちの設定となっていますので注意してください。特にカレンダーリソースについてはなぜか最大長の単位が「文字数」ではなく「バイト」ですのでご注意を。

APIでGoogleのエディションを判定する方法

| コメントをどうぞ

Google Appsを利用するアプリケーションを作成する場合、Google Appsが有償版か無償版かでロジックを振り分けたい場合があります。

そのような場合、Google Admin Settings APIを使ってエディションを取得するのですが、このAPIは従来有償版のみに提供されていたAPIでした。
しかし、昨年末Google Appsの開発者ブログでAdmin Settings APIを含むいくつかのAPIが全エディションで利用できるようになったとのアナウンスがありました。

詳細は以下。

管理 API がすべての Google Apps エディションで

と言うことで、早速試してみます。まずはサンプルコードです。


public void getEdition() throws Exception{
String adminEmail = "admin@example.com";
String password = "administrator";
String domain = "example.com";
String appName = "GetEditionSample";

DomainSettingsService service
= new DomainSettingsService(adminEmail, password, domain, appName);

System.out.println("Edition[" + domain + "]: " + service.getDomainEdition());
}

ドメイン「example.com」でGoogle Appsの有償版を利用している場合、上記のコードを実行すると以下の様な結果が返されます。

Edition[example.com]: premier

ここまではOKですね。では次にドメイン「example.com」でGoogle Appsの無償版を使っている場合はどうなるのか試してみます。過去においては無償版に対してこのコードを実行した場合は403エラーが返されていたのですが、現在では以下の様な結果が得られるハズです。

Edition[example.com]: standard

では、実行。

Exception in thread "main" com.google.gdata.util.ServiceForbiddenException: Domain cannot use API <HTML> <HEAD> <TITLE>Domain cannot use API</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Domain cannot use API</H1> <H2>Error 403</H2> </BODY> </HTML>     at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:597)     at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)     at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)     at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)     at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)     at com.google.gdata.client.Service.getEntry(Service.java:1352)     at com.google.gdata.client.GoogleService.getEntry(GoogleService.java:567)     at com.google.gdata.client.Service.getEntry(Service.java:1278)     at com.google.gdata.client.appsforyourdomain.AppsForYourDomainService.getEntry(AppsForYourDomainService.java:118)     at com.google.gdata.client.appsforyourdomain.adminsettings.DomainSettingsService.getDomainEdition(DomainSettingsService.java:212)     at mywork.AdminSettingsApiSample.getEdition(AdminSettingsApiSample.java:94)     at mywork.AdminSettingsApiSample.main(AdminSettingsApiSample.java:70) 

・・・
・・・・・・
・・・・・・・・・

あれ?

期待した結果が得られない・・・うーーん・・・何でか分からず悩んでいたのですが、ひょんなことから原因が分かりました。
Admin Settings APIを利用するためにはGoogle Apps管理画面から「provisionning APIを有効にする」のチェックを入れておく必要があります。

そんなのどこにも書いてないじゃん・・・orz

ま、とにかく上記のチェックを入れるとちゃんと無償版でも正しい結果が得られました。