« 2014年3月 | トップページ | 2016年9月 »

2014年8月

2014年8月31日 (日)

DelphiでDropbox

Dropboxプロがパワーアップして、1TBで月額1200円になったので、HDDの肥やしとなっていた眠っていたコードをひっぱりだし、手直しと簡単なデモアプリを作ったのでDelphi用のDropboxライブラリを公開してみる。

DropboxライブラリをパクってWindows Liveライブラリを作ったので、動作環境はWindows Liveライブラリ と全く同じで、開発環境は2010で、Dropboxライブラリの動作環境はIE7以降が必要、デモアプリはVista以降と全く同じです・・

まずは、ダウンロードは

から。

主なユニットの構成も同じで、

  • Dropbox.pas
  • Dropbox.Client.pas
  • Dropbox.Protocol.Request.pas
  • Dropbox.Protocol.Response.pas

で、インターフェースベースで、スレッドセーフに作ってあります。Dropbox社によって標準でiOS, Java, Ruby, Pythonなどいつくかの言語・プラットフォーム用の開発キットが用意されているのですが、メソッド名とか開発キットをだいたいパクっているので、詳細はそのドキュメントHTTPのAPIのドキュメント を参考に・・・・dashdash

もちろん、Dropboxのアカウントが必要です。また、アプリを自分で登録 してApp KeyとApp Secretを発行してもらってください。SkyDriveと違い、Dropboxはアプリを登録すると、申請しない限り、Appフォルダの下にアプリ名のフォルダが作られ、そのフォルダにしかアクセスできないので、あえて、開発用アカウントを用意しなくても安全だと思います。

DropboxもSkyDriveと同じOAuth2を使っているので、認証方法はDelphiでWindows Live(SkyDrive) を参考に・・

具体的な使い方はデモアプリを見てください・・

Dropboxdemo1

Dropboxdemo2

フォルダの作成からファイルのアップロード、ダウンロード、移動、名前の変更、そして、特定のリビジョンの復元まで一通りできるようになってるので・・

1点だけ言うと、Dropboxではファイルのアップロードを分割してチャンクごとに行えるようになってるのですが、
ChunkedUploadFileFirstでアップロードするバイト配列を渡し、チャンクアップロードを開始します。UploadedChunkオブジェクトが返るので、そのUploadIDを使い残りのチャンクをChunkedUploadFileNextでアップロードします。すべてのチャンクをアップロードしたらCommitChunkedUploadFileでコミットします。こんな感じで使います。

というか、もうこのオンラインストレージネタはおなかいっぱいで飽きたdash

次になんか作るときは、いい加減、WinInet卒業して、クロスプラットフォームなHTTPライブラリに移行しようと思う。

2014年8月30日 (土)

DelphiでWindows Live(SkyDrive)・・・(5)

やる事がなくなったので、再びWindows Live。今回で5回目ですが、まず過去の記事のリンクを・・・

今回はファイルコンテンツやピクチャの条件ダウンロードと部分ダウンロード、要はHTTPの条件リクエストと部分ダウンロードに対応してみました(一部メソッドを変更しましたdashdash)。

AccessConditionオブジェクトでアクセス条件を指定します。

これは、HTTPのIf-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Sinceヘッダーそのまんまです。ここ からパクリましたdashdash。部分ダウンロードを行うには、RangesSpecifierオブジェクトで範囲を指定します。

HTTPでは現状バイトレンジしか定義されていませんが、そのバイトレンジを表すRangesSpecifierオブジェクトを作成するヘルパを用意してます。

一応、RFC2616のHTTPの仕様通り、2通りの指定方法を用意しましたが、現状、後者の末尾のバイト数(SuffixLength)を指定する方法はサーバーの方で対応してないようなので(HTTPの仕様通り、エラーではなく無視されて全体が返される)、前者の開始位置(FirstByte)と終了位置(LastByte)を指定する方を使って下さい。また、HTTPの仕様では複数のバイトレンジを一度に指定できるようになってますが、その場合は、自分でIRangesSpecifierインターフェースを実装して下さい(というか、サーバーが対応してるかは知りませんdashdash)。条件ダウンロード、部分ダウンロードのために戻り値のLiveResponsePropertiesオブジェクトで一部のHTTPヘッダにアクセスできるようにしてあります。

具体的に使うとこんな感じです。

 

後は、上記のGetUserPictureやGetFileContentメソッドはプッシュ型のメソッドですが、データを自分で引っ張るプル型のメソッドも追加しておきました。

LiveDownloaderオブジェクトは次のようになってます。

LiveDownloaderオブジェクトのGetStreamメソッドで得られるストリームを使って読み込みます。プル型なので、途中でキャンセルしたければ、そのまま破棄して下さい。

以上です。

HTTPの条件リクエストや部分ダウンロードの勉強のために実装してみたけど、色々おもろかったbearing

というか、完全に独りよがりライブラリ・・・

ダウンロードはいつも通りOneDriveから。

« 2014年3月 | トップページ | 2016年9月 »

自作ソフトウェア

無料ブログはココログ

メモ