【Java】Google Mapsを画像化し、それをファイルに書き出すことなくEvernote連携
公開日:
:
最終更新日:2013/09/20
Java API, Evernote, Evernote API, Google Static Maps API, Java
必要な環境
・Java実行環境
・EvernoteのJava APIが使用出来る環境
大まかな手順
1.Google Static Maps API に対して、HTTP GET(欲しい地図情報をURLに記載する)
2.RESPONSEされた画像を、BufferedImageに入れる
3.BufferedImageをbyte[]に変換し、Evernoteにアップロード
コード
private void private void createNote(String inputUrl) throws Exception { // 新規ノート作成 Note note = new Note(); note.setTitle("画像アップロードテスト"); // Evernoteに送るDataファイル Data dataImage = new Data(); try { // Google Static Maps API V2を用いて、標準のHTTPリクエストで送信されたURLパラメータに基づいて地図を作成し、画像として返す // リクエストで帰ってきたものを、BufferedImageに変換 URL url = new URL(inputUrl); URLConnection con = url.openConnection(); InputStream in = con.getInputStream(); BufferedImage img = ImageIO.read(in); in.close(); // BufferedImageをEvernote用にbyteファイルに変換 byte[] imageInByte; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "png", baos); baos.flush(); imageInByte = baos.toByteArray(); baos.close(); // Dataファイルに格納 dataImage.setSize(imageInByte.length); dataImage.setBodyHash(MessageDigest.getInstance("MD5").digest(imageInByte)); dataImage.setBody(imageInByte); } catch (Exception e) { throw new RuntimeException(e); } //mimeTypeを指定 String mimeType = "image/png"; // 画像ファイルをnoteに入れるため、Resourceを作成。 Resource resource = new Resource(); resource.setData(dataImage); resource.setMime(mimeType); // NoteにResourceを追加 note.addToResources(resource); // NoteにMD5ハッシュを記載し、ResourceのMD5ハッシュと対応させる String hashHex = bytesToHex(resource.getData().getBodyHash()); // Evernote用のマークアップ言語で記述する必要がある。 //詳細は、http://dev.evernote.com/documentation/cloud/chapters/ENML.php String content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">" + "<en-note>" + "<en-media type=\"image/png\" hash=\"" + hashHex + "\"/>" + "</en-note>"; note.setContent(content); // createNoteメソッドを使ってEvernoteにアップロード Note createdNote = noteStore.createNote(authToken, note); newNoteGuid = createdNote.getGuid(); System.out.println("作成完了。GUID: "+ newNoteGuid); }
String inputUrlには、Static Maps API V2 デベロッパー ガイドを参考にして、下記のようなURLを作成する。
http://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green%7Clabel:G%7C40.711614,-74.012318&markers=color:red%7Ccolor:red%7Clabel:C%7C40.718217,-73.998284&sensor=false
上記URLを入力して実行すると、画像がアップロードされる。
以上。
参考にしたサイト
・Java Google Maps から地図画像を取得する
・Java画像メモ
・How to convert byte[] to BufferedImage in Java
関連記事
記事はありませんでした