4.サンプルプログラムを作る – Pythonで始めるDropboxAPI

 Dropboxのチュートリアルとほぼ同じですが、3で作った開発環境でサンプルプログラムを作り、DropboxAPIを使ってみます。

もくじ

1.概要
 今回書くことについての説明をします。
2.DropboxAPIについて
 DropboxAPIがどんなものか、どういう仕組みで動いているのかについて説明します。
3.DropboxAPIを使う準備をする
 pythonからDropboxAPIを使うために必要な環境の準備をします。
4.サンプルプログラムを作る <ー今回はコレ
 3で作成した環境を使ってサンプルプログラムを作ります。
5.flaskを使ってウェブアプリを作成
 ウェブフレームワークのflaskを使ってウェブアプリを作る練習をします。
6.Dropboxのフォルダ一覧を作る
 flaskを利用して、Dropboxのフォルダ一覧を表示するウェブアプリを作ります。
7.dotcloudで公開する
 PaaSのdotcloudを使い、6で作ったウェブアプリをデプロイすることでみんなに見てもらえるようにします。
8.参考
 参考にしたURLなど。

本記事のソースはGitHubにあります。


4.サンプルプログラム作成

 それでは「3.DropboxAPIを使う準備をする」で作成した仮想環境でDropboxAPIを利用するサンプルプログラムを作ってみましょう。
 基本的な内容はDropboxのチュートリアルと同じものです。

tutorial.py
[python]
# -*- coding: utf-8 -*-
# Dropbox SDK ライブラリをインポート
from dropbox import client, rest, session

# Dropboxの開発者サイトからアプリのConsumer KeyとConsumer Secretを記述
APP_KEY = ‘INSERT_APP_KEY_HERE’
APP_SECRET = ‘INSERT_SECRET_HERE’

# ACCESS_TYPE にはアプリで設定した内容( ‘dropbox’ か ‘app_folder’)を設定
ACCESS_TYPE = ‘INSERT_ACCESS_TYPE_HERE’

sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)

request_token = sess.obtain_request_token()

url = sess.build_authorize_url(request_token)

# 認証認可URLを作成して表示する。そのURLを開いて認証認可してくる。
print "url:", url
print "このウェブサイトをブラウザで閲覧して、’許可’ボタンを押してください。そしてここに戻ってきてENTERを押してください。"
raw_input()

# アクセストークンを取得。許可ボタンを押していなければ失敗する。
access_token = sess.obtain_access_token(request_token)

client = client.DropboxClient(sess)
print "アカウント情報:", client.account_info()

folder_metadata = client.metadata(‘/’)
print "metadata:", folder_metadata
[/python]

ソース内の以下の項目は、自身が登録したアプリの設定を記述してください。

  • INSERT_APP_KEY_HERE: アプリのApp key
  • INSERT_SECRET_HERE: アプリのApp secret
  • INSERT_ACCESS_TYPE_HERE: アプリのAccess level。今回はapp_folder

ソースを保存したら、

[bash]
python tutorial.py
[/bash]

として実行します。

認証認可用URLが表示され、そのURLをブラウザで開き、許可ボタンを押して、またターミナルに戻ってENTERを押すと、アクセストークンを取得して処理を継続するようになっています。
フォルダのファイル一覧を表示するようになっているので、試しにdropboxでAppsフォルダの中にあるアプリケーションフォルダにファイルをアップロードしてから確認するとわかりやすいと思います。

基本的にはDropboxAPIの利用はこれらの処理だけでOKです。

デバッグ

 このチュートリアルで動作がうまくいかなかったり、どういうオブジェクトが返ってきているのか気になったらdebugを使ってみましょう。

・debugのインストール
[bash]
pip install debug
[/bash]

・使い方
たとえば、前記のソースの中の「request_token = sess.obtain_request_token()」で何が返ってきているのか確認したいと思います。
その場合、request_token=・・・の次の行に import debug を追加してください。

[python]
request_token = sess.obtain_request_token()

import debug # <-これを追加

url = sess.build_authorize_url(request_token)
[/python]

こうすると、デバッガに入ります。

使い方は h または help と打つと表示されます。
ここでは、request_tokenの内容を見たいので、こうしてみます。

[bash]
ipdb> request_token
<oauth.oauth.OAuthToken object at 0x1007d2c10>

ipdb> dir(request_token)
[‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__doc__’, ‘__format__’, ‘__getattribute__’, ‘__hash__’, ‘__init__’, ‘__module__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘__weakref__’, ‘callback’, ‘callback_confirmed’, ‘from_string’, ‘get_callback_url’, ‘key’, ‘secret’, ‘set_callback’, ‘set_verifier’, ‘to_string’, ‘verifier’]

ipdb> see(request_token)
hash() help() repr() str()
.callback .callback_confirmed .from_string()
.get_callback_url() .key .secret
.set_callback() .set_verifier() .to_string()
.verifier
ipdb>

[/bash]

dirするとそのオブジェクトに定義された名前の一覧がでます。seeはそれをもうちょい見やすく表示するものです。
デバッガなので、例えば、request_tokenにNoneを入れてみることもできます。

[bash]
ipdb> request_token=None
ipdb> where
> /Users/planset/Dropbox/private/p/dropbox/tutorial.py(17)<module>()
15 import debug
16
—> 17 url = sess.build_authorize_url(request_token)
18
19 # Make the user log in and authorize this token

[/bash]

この状態で行を実行してみます。

[bash]
ipdb> n
AttributeError: "’NoneType’ object has no attribute ‘key’"
[/bash]

sess.build_authorize_urlの中で、request_tokenの属性keyにアクセスしようとして、例外が発生したようです。
このようにdebugを使えば、お手軽にデバッグすることができます。

次回

5.flaskを使ってウェブアプリを作成