Android、Java、Web系、Linux、マラソン等の備忘録

2012/01/17

DropboxのJava版APIで過去リビジョンのファイルを取得できない現象について

0 件のコメント

最近はソースや開発環境はDropbox配下に置き、マシンが変ろうともDropboxで同期させればおkということでなくてはならないDropboxですが、APIの正式版バージョン1が昨年10月に出たということで、使ってみました。

環境



  • Eclipse:Eclipse IDE for Java Developers Indigo Service Release 1

  • JDK:1.6.0_30

  • Dropbox SDKs:Java v1.2.2

WS000375

SDKと言いつつも、Javaに関して言えばjarファイルとソースが入っているだけなので、DropboxのサイトでAPP KEY/SECRETを入手して、jarをビルドパスに通してアクセストークンKEY/SECRETを入手すればDropboxへアクセスできます。

アクセストークン KEY/SECRETの取得はこちらを参考にしました。

・Dropbox Java API で遊ぶ - ザネリは列車を見送った
http://zaneli.hatenablog.com/entry/2011/12/10/123559

サンプルソース


Dropboxの魅力の一つとして、いくつか履歴を残してくれます。間違ってファイルを変更しても、履歴が残っている間なら復元が可能です。APIを使って過去リビジョンのファイルをダウンロードするサンプルソースを作成しました。test.txtファイルに関して変更した過去10件分のファイルをDropboxから取得しローカルへ保存するプログラムです。

public class GetOldFile {

private static final String APP_KEY = "あなたのAPPキー";
private static final String APP_SECRET = "あなたのAPPシークレット";

private static final String TOKEN_KEY = "あなたのアクセストークンキー";
private static final String TOKEN_SECRET = "あなたのアクセストークンシークレット";
/**
* @param args
*/
public static void main(String[] args) {
AppKeyPair appKeys =
new AppKeyPair(APP_KEY, APP_SECRET);
AccessTokenPair tokens =
new AccessTokenPair(TOKEN_KEY, TOKEN_SECRET);
WebAuthSession session =
new WebAuthSession(appKeys, AccessType.DROPBOX, tokens);
DropboxAPI<WebAuthSession> api =
new DropboxAPI<WebAuthSession>(session);

// Dropboxディレクトリ配下のパス
String path = "/develop/test.txt";

try {
// 10件分のファイル変更情報を取得
List<DropboxAPI.Entry> entries = api.revisions(path, 10);

for(DropboxAPI.Entry entry: entries) {
System.out.println(entry.modified + " - " + entry.rev);

FileOutputStream fos =
new FileOutputStream("D:/logs/" + entry.rev + ".txt", false);
// Dropboxよりリビジョンを指定してローカルへファイルを保存
api.getFile(path, entry.rev, fos, null);
fos.close();
}
} catch (DropboxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


ところが!ローカルに保存したファイルすべてが同じ内容でした。どれも最新版test.txt。Javadocを見ても、




・DropboxAPI
https://www.dropbox.com/static/developers/dropbox-java-sdk-1.2.2-docs/index.html




WS000376



getFileメソッドの使い方は間違っている気がしない。フォーラムで検索しようにも、英語でなんとキーワードを打てばよいのやら。。



ふと、SDK内のソースDropboxAPI.javaを開いてみました。



WS000377


getFileメソッドの中身はgetFileStreamメソッドが担っているということで、



WS000378



getFileStreamメソッド付近でパラメータの「rev」で検索すると、上図にもわかるようにヒットしない(青色マークされない)=実装されてない!ずこーー



実装後記



ということで、実装されるのを待ちましょうかね。iOS版の方には入っているみたいな記述をチラっと見たので、自分で中身を実装すれば取得できるかもしれませんが、少なくともJava版のこのバージョン1.2.2では、過去のファイルは取得できない作りということで。



あと、開発者が欲しがる機能として、Dropbox配下のファイルに変更があったらアプリ側に通知してくれるようなAPIがないそうです。もしくは、最近変更されたファイル一覧を取得できるAPI。フォーラムのある人によれば、ここは規模が小さいし実装おせーから仕方ねー。みたいなアドバイスもありましたw



じゃぁ、Dropboxへファイルを追加すると、メールを送ってくれたり、PDFに変更してくれたりするここのサービスは、どのように実装してるんでしょうかね?ファイルを総なめしてメタ情報を取得してるんでしょうか?




・Automate your Dropbox
http://dropboxautomator.wappwolf.com/




先日メールを飛ばすよう試してみましたが、思った動きをしませんでした。Dropboxを使ったアプリは開発者側にとってはまだまだ環境が揃っていないような印象を感じます。



ちなみに、変更履歴一覧は個人であれば取得できなくもありません。DropboxのWebサイトへログインして、



WS000380



イベントタブをクリック、ページの下の方に、



WS000381



「このフィードを購読」というRSSが配信されているので、このURLでXMLを解析等すれば変更情報を取得できますが、取得できもて10件~20件程度で、短期間に更新があっった場合は、



WS000382



こんな風にまとめられるので、扱い辛いです。



というわけで待ちましょうか。。


PR:仕事を便利にする!クラウド活用TIPS―いつでも、どこでも、クラウド仕事スタイル

0 件のコメント :

コメントを投稿