2012年03月

年度末なんで振り返ってみました ~今年度もお世話になりました。来年度もよろしくお願いいたします~


今年度の営業日も本日で最後です。

例年、年度末は「年度末処理」の監視などで、出張や現地が多かったのですが、今年度は落ち着いております。

今年度を振り返ってみると、昨年度末の地震によりいろいろな変化があった一年であったかと実感しています。

細々と続いていた「プログラミングだけの受託」は、SIerさんの内作ブームとかねてからのオフショアにより、ほぼ0に近い状態に。

逆に上流から行うような案件の相談が増えてきています。

弊社の受託開発部門では、まさに「下請けからの脱却」を目指しており、「上流から」という仕事が増えてきたことは喜ばしいことの反面、人材に関しては「上流」から出来る人材不足が顕著になってきております。

今後、「誰にでも出来る」仕事は、低単価になっていき、オフショアにどんどん流れていってしまうのでしょう。
「自分たちにしか出来ない仕事」をどんどん増やし、顧客の皆様に「NCADなら何とかしてくれる」と思っていただけるよう、精進していきたいと思います。

evernoteのAPI Java編 ~ノートの追加~


前回、作成したノートブックにノートを追加してみましょう。

evernoteは画像やPDFなどを自由にアップできるのが売りですから、今回はPDFを添付させる処理にしたいと思います。

PDFは任意のファイルを取り込んでbyte[]になっているものとします。
また、タイトルや本文、タグ(複数可能)も任意の文字列とします。

まず、添付ファイルにするPDFのデータをcom.evernote.edam.type.Dataにセットします。

Data data = new Data();   
data.setSize(byteData.length);
data.setBodyHash(MessageDigest.getInstance("MD5").digest(byteData));
data.setBody(byteData);

さらにDataをcom.evernote.edam.type.Resourceにセットします。
Resource resource = new Resource();
resource.setData(data);
resource.setMime(mimeType);
ResourceAttributes atts1 = new ResourceAttributes(); // リソースの属性
atts1.setFileName(ファイル名);
resource.setAttributes(atts1);

リソースのハッシュ値(MD5チェックサム) を作成します。
※bytesToHex()はググってください。
String hashHex1 = bytesToHex(resource.getData().getBodyHash()); 

コンテンツの作成
PDFの場合のmimeTypeは「application/pdf」
String mimeType = "application/pdf";
String content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
  "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">" +
  "<en-note>"+enNote +
  "<en-media type=\""+ mimeType + "\" hash=\"" + hashHex1 + "\"/>" +<BR>
  "</en-note>";

Noteを作成し、前回作成したノートブック以下に作成されるように設定し、タイトルやタグもセットします。
Note note = new Note();
note.setNotebookGuid(selectedNotebook.getGuid());
note.setTitle(title);
for(Iterator it = tags.iterator();it.hasNext();){
note.addToTagNames((String)it.next());
}
note.setContent(content);
note.setCreated(getNow());
note.setUpdated(note.getCreated());
note.setActive(true);
note.addToResources(resource);

登録実行
Note createdNote = noteStore.createNote(authToken, note);
System.out.println("GUID: " + createdNote.getGuid());

これでPDF付きのノートの登録が完了です。

evernoteのAPI Java編 ~ノートブックの作成~


前回取得したauthResultを使って、evernoteにアクセスしましょう。

まずは、ノートブックがないとはじまらないということで、ノートブックの作成から。

ある名称のノートブックが存在しなけば作成するという処理を行います。

まず、アカウント配下のノートブックの一覧を取得します。

String noteStoreUrl = 
HOST+"/edam/note/"+authResult.getUser().getShardId();
THttpClient noteStoreTransport =
new THttpClient(noteStoreUrl);
TBinaryProtocol noteStoreProtocol =
new TBinaryProtocol(noteStoreTransport);
NoteStore.Client noteStore =
new NoteStore.Client(noteStoreProtocol);

String authToken = authResult.getAuthenticationToken();

List notebooks = noteStore.listNotebooks(authToken);


取得したノートブックの中にお目当ての名称のノートブックがあるかを探します。
見つからなければ、その名称のノートブックを作成しちゃいましょう

Notebook selectedNotebook = null;
for (Iterator it = notebooks.iterator();it.hasNext();)
{
Notebook notebook = (Notebook) it.next();
if (notebook.getName().equals(ノートブックの名称))
{
selectedNotebook = notebook;
}
}
if(selectedNotebook == null){
Notebook notebook = new Notebook();
notebook.setName(ノートブックの名称);
selectedNotebook =
noteStore.createNotebook(authToken,notebook);
}

という感じで対象とするノートブックのオブジェクトをゲットします。

次はゲットしたノートブックにノートを追加しちゃいます。

evernoteのAPI Java編 ~認証~


evernoteのAPIの評価をする機会があったので、備忘録です。

APIを使うにはWEBサービスAPIから申し込みを行います。

認証の種類は2種類あって、ユーザ名とパスワードをアプリ自身が持って認証を行う方式(クライアント用キー)とログインするユーザに認証を促し、その認証情報に乗っかっる方式(ウェブサービス用キー)があります。

今回はアプリに専用のユーザ名とパスワードを持たせるクライアント用キー方式で実験してみました。

evernoteのAPIを使う際の認証は、sandobox用がもらえます。
開発段階ではsandboxを使って投げこむことになります。
これは、えらいこっちゃなアプリを作られてご本尊に影響がでないようにという配慮のようです。

登録するとconsumerKeyとconsumerSecretがもらえます。

キーをもらったらここからSDKをダウンロード。

ZIPを解凍してJavaのフォルダ以下のどっかにある

evernote-api-1.20.jar
libthrift.jar

を確保します。

実装したいJavaのプロジェクトのlib以下に配置してclasspathを定義してあげます。

これで準備はOK。

具体的な認証の手順は以下の感じ

private UserStore.Client userStore = null;
private AuthenticationResult authResult = null;
private String username = "ユーザ名";
private String password = "パスワード";
private String consumerKey = "evernoteからもらったkey";
private String consumerSecret = "evernoteからもらったSecret";

private static String HOST = "https://sandbox.evernote.com";

public void init() throws Exception{
try {
String userStoreUrl = HOST+"/edam/user";
THttpClient userStoreTrans = new THttpClient(userStoreUrl);
TBinaryProtocol userStoreProt =
new TBinaryProtocol(userStoreTrans);
userStore = new UserStore.Client(userStoreProt);

//認証
authResult = userStore.authenticate(
username, password, consumerKey, consumerSecret);

} catch (TTransportException e) {
throw new Exception(e.getMessage(),e);
} catch (EDAMUserException ex) {
String parameter = ex.getParameter();
EDAMErrorCode errorCode = ex.getErrorCode();
if (errorCode == EDAMErrorCode.INVALID_AUTH) {
}
throw new Exception(ex.getMessage(),ex);
} catch (EDAMSystemException e) {
throw new Exception(e.getMessage(),e);
} catch (TException e) {
throw new Exception(e.getMessage(),e);
}

}
生成したauthResultが認証情報なので、このオブジェクトを使ってevernoteにアクセスできます。

次回はこのauthResultを使ってノートブックを追加してみましょう。

プリズン・ブレイク ~サラ・タンクレディって美人ですね~


海外ドラマのプリズン・ブレイク。
面白いとはきいていましたが、なかなか観る機会がなかったのですが、今年の正月にFOXでシーズン1から4までぶっ通しで連続放送していました。
そいつを全て録画して観ているのですが、確かに面白いですね。。

シーズン1の閉塞感のある中でのストーリー展開よりも脱獄後の展開のほうが個人的には好きですね。。
あとベリックやマホーンといった敵役の転換も面白いですね。。

しかしベリックがあんなにいいヤツだったとは。。
livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ