タグ別アーカイブ: API

Azure Resource Usage APIで課金情報を取得する

| コメントをどうぞ

Azureの課金APIがリリースされていたので触ってみました。

Microsoft Azure リソースの消費を把握する
https://azure.microsoft.com/ja-jp/documentation/articles/billing-usage-rate-card-overview/

Azure Billing REST API Reference (Preview)
https://msdn.microsoft.com/library/azure/1ea5b323-54bb-423d-916f-190de96c6a3c

手順

  1. Azure AD applicationの作成 と アクセストークンの作成
  2. DHCでリクエストを実行

続きを読む

HTMLとJavaScriptでEC2インスタンスを起動する

| コメントをどうぞ

AWSのSDKは様々な言語向けに用意されていますが、サーバーサイドの実装なしでAWSのAPIを叩く場合の選択肢として、AWS SDK for JavaScriptがあります。
http://aws.amazon.com/jp/tools/

ただ、他のSDKと違って対応しているサービスが限られています。
利用可能なサービスはS3、SQS、SNS、DynamoDBなどで、EC2は対象ではありませんでした。

EC2をサポート

6月24日のリリースで、In the BrowserにEC2がこっそり追加されていました。
http://aws.amazon.com/releasenotes/SDK/JavaScript/5873934951898767

6月18日のリリースにはEC2はありませんね。
http://aws.amazon.com/releasenotes/SDK/JavaScript/3577030144306744

HTMLファイルだけでEC2を起動

続きを読む

GoogleのService Account認証に潜む invalid_grant 問題

| 2件の返信

Appleのイベントは見ましたか?
Spring forward.のことです。
いやぁ、まさかあんなサプライズがあるとは。。。
どうも、DiceK Mikamiです。

さて、今回は(Appleとは全然関係なく)Google API使うにあたって利用することになるService Account認証に潜む罠に関して取り上げてみたいと思います。
続きを読む

Gmailの検索機能あれこれ

| コメントをどうぞ

Gmailの検索、使ってますか?

Gmailは実に様々な検索機能をもっています。

標準の検索ボックスでは以下の条件を利用してメールを検索することができます。

  • From
  • To
  • 件名
  • キーワード(含む、含まない)
  • 添付ファイルあり
  • チャットは除外する
  • サイズ
  • 期間

しかし、実際にはもっと多くの検索条件を利用することができます。

続きを読む

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}]}

Gmailのメールの本文を直接開くURLを取得する方法

| 2件の返信

Googleは様々なサービスのAPIを公開しており、Gmailもその中の一つです。
今回は、GmailをIMAP APIを使ってメールの情報を取得する方法を紹介します。

IMAPでGmailを取得する

GmailをIMAPで取得するためのAPIとして、OracleからJavaMailが提供されています。
http://www.oracle.com/technetwork/java/javamail/index.html

上記のページの右側のDownloadsから、javamail1_4_4.zip (2011年12月20日時点)をダウンロードします。
ダウンロードした zip を解凍すると、mail.jar を取得できます。

このライブラリを使ったメールの取得については下記の記事を参照してください。
http://harikrishnan83.wordpress.com/2009/01/24/access-gmail-with-imap-using-java-mail-api/

 

メールの本文を開くURLを取得する

JavaMailを使用した場合、メールのタイトルや本文は取得できますが、メールを直接開くURLは取得できません。

そこで、JavaMailの拡張版を使います。
https://code.google.com/p/java-gmail-imap/
JavaMail 1.4.4を拡張したもので、メッセージ(メール)ごとに以下の情報を取得できます。

  • メッセージID
  • スレッドID
  • ラベルリスト

このライブラリのパッケージは、JavaMail 1.4.4と競合しないように以下のように定義されています。

  • com.google.code.com.sun.mail
  • com.google.code.javax.mail

JavaMailから変更する場合は拡張版のクラスをimportするように修正します。

 

メールのURL取得のサンプル 

以下のサンプルでは、最新のメール10件のメールを取得してタイトルとURLとラベルを出力しています。
Gmailは以下のURLでメールを直接開くことができます。
https://mail.google.com/mail/u/0/?shva=1#inbox/messageId

import java.net.URLEncoder;
import java.util.Properties;

import com.google.code.com.sun.mail.imap.IMAPFolder;
import com.google.code.com.sun.mail.imap.IMAPMessage;
import com.google.code.com.sun.mail.imap.IMAPSSLStore;
import com.google.code.javax.mail.FetchProfile;
import com.google.code.javax.mail.Folder;
import com.google.code.javax.mail.Message;
import com.google.code.javax.mail.Session;

public class GetGmailURL {

 private static String email = "email@gmail.com";
 private static String password = "password";
 private static int msg_num = 10;
 private static String host = "imap.gmail.com";

 public static void main(String[] args) throws MessagingException {
  Properties props = new Properties();
  props.setProperty("mail.store.protocol", "imaps");
  Session session = Session.getDefaultInstance(props, null);
  IMAPSSLStore store = new IMAPSSLStore(session, null);
  Folder inbox = null;
  try {
   store.connect(host, email, password);
   inbox = store.getFolder("Inbox");
   inbox.open(Folder.READ_ONLY);
   int count = inbox.getMessageCount();
   Message messages[] = inbox.getMessages(count-msg_num, count);
   FetchProfile fp = new FetchProfile();
   fp.add(IMAPFolder.FetchProfileItem.X_GM_MSGID);
   fp.add(IMAPFolder.FetchProfileItem.X_GM_THRID);
   fp.add(IMAPFolder.FetchProfileItem.X_GM_LABELS);
   inbox.fetch(messages, fp);

   for(int i=msg_num; i>0; i--){
    System.out.println("Title: " + messages[i].getSubject());
    IMAPMessage im = (IMAPMessage) messages[i];
    String msgId = Long.toHexString(im.getGoogleMessageId());
    String url = "https://mail.google.com/mail/u/0/?shva=1#inbox/" + msgId;
    System.out.println("URL: "url);
    String[] labels = im.getGoogleMessageLabels();
    if(labels!=null){
     for(String label: labels){
      System.out.println("Label: " + label);
     }
    }
    System.out.println();
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if(inbox.isOpen()) {
    inbox.close(true);
   }
   if(store.isConnected()){
    store.close();
   }
  }
 }
}

実行結果

Title: Box Buzz: Good-bye Box.net, Hello Box
URL: https://mail.google.com/mail/u/0/?shva=1#inbox/13459016de7c3784
Label: Cloud Service
:
:

ブラウザで上記のURLを開くとGmailのメールの本文が開きました。