Appleのイベントは見ましたか?
Spring forward.のことです。
いやぁ、まさかあんなサプライズがあるとは。。。
どうも、DiceK Mikamiです。
さて、今回は(Appleとは全然関係なく)Google API使うにあたって利用することになるService Account認証に潜む罠に関して取り上げてみたいと思います。
続きを読む
Appleのイベントは見ましたか?
Spring forward.のことです。
いやぁ、まさかあんなサプライズがあるとは。。。
どうも、DiceK Mikamiです。
さて、今回は(Appleとは全然関係なく)Google API使うにあたって利用することになるService Account認証に潜む罠に関して取り上げてみたいと思います。
続きを読む
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と2の手順です。
Marketplaceで公開している自分のアプリケーションが、あるドメインでインストールされているかをチェックするAPIです。
Google Apps Marketplace APIのCustomerLicense
https://developers.google.com/apps-marketplace/v2/reference/customerLicense
以下のページの 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
以下のパラメータを任意に設定します。
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ドライブの拡張機能である「Google Fusion Tables」と「Google Apps Script」を利用して簡単なマスタメンテナンスアプリを作成してみたいと思います。
昔の Google Apps Scriptを触ってみた で紹介しているGoogle Apps ScriptからTranslate Serviceを使ってみた。
続きを読む
今回は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が実行してくれるという手軽さがとてもよいです。
以下の形式で定期実行の間隔を指定できます。
このトリガーの機能を利用して、議事録ファイルを作成するスクリプトを書いてみました。
要件は以下の通りです。
続きを読む
初めまして。infoScoop for Google Appsの開発を行っております中田と申します。
現在Google Calendar API Ver3.0が公開されています。このAPIではリクエスト認証にはOAuth2.0の使用が推奨されています。しかしAPIドキュメントによると現時点では2-legged OAuthを行う為にはOAuth 2.0のトークンは使えないので OAuth 1.0のトークン+APIキーを使えと記述されています。ところがAPIドキュメントには「OAuth 1.0のトークン+APIキー」の具体的な手法については特に記載されていません。色々調べてみるとGoogle Apps Developer Blogに以下の投稿がありました。
Calendar API v3, 2-legged OAuth & Java
今回はこのブログで紹介されているサンプルを実際に動かしてみました。
まず、Calendarサービスの初期化部分のコードです。
public Calendar buildService() { HttpTransport transport = AndroidHttp.newCompatibleTransport(); JacksonFactory jsonFactory = new JacksonFactory(); // The 2-LO authorization section OAuthHmacSigner signer = new OAuthHmacSigner(); signer.clientSharedSecret = ""; final OAuthParameters oauthParameters = new OAuthParameters(); oauthParameters.version = "1"; oauthParameters.consumerKey = ""; oauthParameters.signer = signer; Calendar service = Calendar.builder(transport, jsonFactory) .setApplicationName("") .setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { @Override public void initialize(JsonHttpRequest request) { CalendarRequest calendarRequest = (CalendarRequest) request; calendarRequest.setKey(""); } }).setHttpRequestInitializer(oauthParameters).build(); return service; }
上記のコード中の<CONSUMER_SECRET>、<CONSUMER_KEY>、<YOUR_API_KEY>については各アプリケーション固有の値を設定します。
アプリケーションがinfoScoop for Google AppsのようにGoogle Apps Marketplaceに登録されたアプリケーションの場合は、Google Apps MarketplaceのMy Vendor Profileから参照できる値を使用します。
<YOUR_API_KEY>についてはGoogle Apps Marketplaceにベンダー登録したアカウントでAPIコンソールを開き、「API Access」画面から確認できる値を使用します。
また、Google Appsの管理画面の 高度なツール > 認証 > サードパーティの OAuth クライアント アクセスを管理するから以下のCalendar APIのスコープを追加します。
https://www.googleapis.com/auth/calendar
もしくはGoogle Apps MarketplaceのListing Manifest中のスコープ設定に上記スコープを追加してください。
Google Apps Marketplaceに登録されたアプリケーションではない場合はAPIコンソールからアプリケーション登録を行う必要があります。
まず、APIコンソールを開き、任意の任意のGoogleアカウントでログインします。
次に「Services」タブから使用するAPIを有効にします。今回の例では「Calendar API」をONにします。
初めてAPIの利用を行う場合には利用規約に同意する必要があります。
「API Access」タブを開き、「Create an OAuth 2.0 client ID…」から画面の指示に従いアプリケーションの登録を行います。
アプリケーションの登録が完了するとConsumer Key(Consumer ID)とConsumer Secretが参照できるようになります。ここで参照されるConsumer Key(Consumer ID)とConsumer Secretおよびアクセスキーを使用します。
ここまでの設定で前述のサンプルコードが動作するようになります。
APIキーを使用するAPIについてはAPIコンソールでの表示でも分かるとおり実行回数などに制限が加えられています。Calendar API Ver.3.0では1日あたり10000回までとなっています。
残念ながらGoogle Apps Marketplaceに登録したアプリケーションのConsumer Key Consumer Secretでもこの制限は有効となっています。現時点ではAPI実行回数の限定解除を行う為にはAPIコンソールからGoogleに対してお伺いを立てるしかないようです。