Movatterモバイル変換


[0]ホーム

URL:


Daisuke Igarashi, profile picture
Uploaded byDaisuke Igarashi
PDF, PPTX3,604 views

Pythonで始めるDropboxAPI

旭川オープンソースコミュニティ11月勉強会だいぶ適当です!

Embed presentation

Download as PDF, PPTX
Pythonで始める DropboxAPIDaisuke Igarashi <planset@gmail.com>
ppyytthhoonn?
ppyytthhoonn?
pythonってなに?
プログラミング言語
>>> print ‘Hello world!’Hello world!
>>> for i in range(5):...     print “Hello world!”...Hello world!Hello world!Hello world!Hello world!Hello world!
>>> for i in range(5):...     if i == 3:...          print "aho"...     else:...          print "Hello world!"...Hello world!Hello world!Hello world!ahoHello world!
pythonとは• オープンソース• スクリプト言語• オブジェクト指向• Guido van Rossum によって1991年 くらいに開発された
python事例• linux(red hat)のいろいろ anaconda, virt-managerなど• Trac, Ploneなどのウェブもの。• DropboxなどのサービスやSDK• googleでも割と使われている。 開発者がgoogle勤務。
なんでpython?
毎年少なくとも一つの言語を学習する
プログラミング言語歴• さらっと Delphi(object pascal)、アセンブラ、 php、perl、ruby、html、javascript、 java• わりとしっかり c/c++、VisualBasic、VB.NET
プログラミング言語歴• さらっと Delphi(object pascal)、アセンブラ、 php、perl、ruby、html、javascript、 java• わりとしっかり c/c++、VisualBasic、VB.NET
プログラミング言語歴• さらっと Delphi(object pascal)、アセンブラ、 php、perl、ruby、html、javascript、 java• わりとしっかり c/c++、VisualBasic、VB.NET
今日話すこと•python入門•Dropbox APIを使ってみよう
Python入門•pythonの特徴•pythonの基本•pythonの色々
Python入門•pythonの特徴•pythonの基本•pythonの色々
インデント
インデント  インデント    インデント
インデント  インデント    インデント
インデントここ     インデント     ここ          インデント
たとえば、Cでは(丁寧にかけば)
int testfunc(int x, int y){    if (x + y == 0)    {        return true;    } else {        return false;    }}
int testfunc(int x, int y){    if (x + y == 0)    {        return true;    } else {        return false;    }}
int testfunc(int x, int y){    if (x + y == 0)    {        return true;    } else {        return false;    }}
pythonでは
def testfunc(x, y):    if x + y == 0:        return True    else:        return False
def testfunc(x, y):    if x + y == 0:        return True    else:        return False
def testfunc(x, y):    if x + y == 0:        return True    else:        return False
def testfunc(x, y):    z = 1    x = z + y    return x
def testfunc(x, y):    z = 1    x = z + y  return x
あ。ずれちゃった
File "dame.py", line 6    return x           ^IndentationError: unindent does not matchany outer indentation level意訳:インデントがずれてるじゃねーかばかやろー!
そんなpythonなため
pythonキモイ
でも
こうは書かないよね?int testfunc(int x, int y){if (x==0){return true;}else{return false;}}
だったらそう書かなきゃ動かないようにすればい    いじゃん
思想
pythonの思想• 言語自身の機能を最小限に。• 誰が書いても同じ機能は同じような実装 になるように。• 文書化の重視
pythonの思想• 言語自身の機能を最小限に。• 誰が書いても同じ機能は同じような実装 になるように。• 文書化の重視
文書化といっても• ドキュメントを書け• コメントを書け
文書化といっても• ソースに書いても、API仕様書にかかな きゃだめだったり• ドキュメントを書いても結局メンテされ なかったり
pythonでは言語レベルで サポート
sample.pydef add(x, y):    """    xとyを加算します。    ただし、結果が3の倍数の場合、'aho'を返します。    例)x=15、y=5の場合    >>> add(15, 5)    20    例)x=10、y=2の場合    >>> add(10, 2)    'aho'    """    return x + y if (x + y) % 3 != 0 else 'aho'if __name__ == '__main__':    import doctest    doctest.testmod()
>>> help(sample)Help on module sample:NAME       sample - # -*- coding: utf-8 -*-FILE       /path/to/sample.pyFUNCTIONS    add(x, y)        xとyを加算します。          ただし、結果が3の倍数の場合、'aho'を返します。          例)x=15、y=5の場合           >>> add(15, 5)           20          例)x=10、y=2の場合           >>> add(10, 2)
if __name__ == '__main__':    import doctest    doctest.testmod()
sample.pydef add(x, y):    """    xとyを加算します。    ただし、結果が3の倍数の場合、'aho'を返します。    例)x=15、y=5の場合    >>> add(15, 5)    20    例)x=10、y=2の場合    >>> add(10, 2)    'aho'    """    return x + y if (x + y) % 3 != 0 else 'aho'if __name__ == '__main__':    import doctest    doctest.testmod()
# python sample.py -vTrying:    add(15, 5)Expecting:    20okTrying:    add(10, 2)Expecting:    'aho'ok1 items had no tests:    __main__1 items passed all tests:   2 tests in __main__.add2 tests in 2 items.2 passed and 0 failed.Test passed.
つまり、 コメントがドキュメントであり コメントがテストであり、かつ信頼できるコードのサンプルになる。
ちなみにちゃんとテストをしたいなら unittest パッケージ  が標準でついてます
電池が付属しています
Python入門•pythonの特徴•pythonの基本•pythonの色々
変数
整数、実数•宣言は必要ないです•x = 1•y = 1.1•x++ はない!
配列•変更不可能な配列•変更可能な配列
変更不可能な配列•a   = ‘igarashi‘   # 文字列•c   = (1, 2, 3)    # タプル
変更不可なので•a = ‘igarashi‘   # 文字列•a[2] = ‘3’
変更不可なので•a = ‘igarashi‘   # 文字列•a[2] = ‘3’ できません!
変更可能な配列•d   = [1, 2, 3]   # リスト
変更可能なので•d = [1, 2,   3]   # リスト•d[0] = 10•>>> d [10, 2, 3]
辞書• dic   = {'name': 'yamada',           'age': 20}• ‘name’ in dic # True• del dic[‘age’] # 削除• キーは変更できない値なら何でも良い。
集合•g =   set([1,2,3,2,1])•>>> g set([1,2,3])
True False•is_true = True•if is_true:     print “hello”
注意点
pythonでは
全て参照渡しです
なのでー
>>> x = 1>>> x = x + 1>>> print x2
>>> x = 1     1     x>>> x = x + 1    1+1         2     x          x>>> print x2
>>> x = 1     1     x    1+1   まちがい>>> x = x + 1                2     x          x>>> print x2
>>> x = 1     x          1>>> x = x + 1                1     x            ×                2>>> print x2
>>> var1 = 1>>> var2 = var1この時点では同じオブジェクトを指している。>>> var1 = 2v1だけ新しいオブジェクトを参照する。>>> var12>>> var21
>>> var1 = [1, 2, 3]>>> var2 = var1この時点で同じオブジェクトを指している。>>> var1.append(4)v1だけに新しい要素を追加したつもりが・・・>>>   var1[1,   2, 3, 4]>>>   var2[1,   2, 3, 4]
制御構文
if, elif, elseif x == 1:    print 'A'elif x == 2:    print 'B'else:    print 'C'
forfor i in [1,2,3,4,5]:    print ifor i in range(1, 6):    print i
whilei = 0while i<10:    i += 1    print ibreak,continueもつかえるよ。
try, withtry:    lines = []    with open("infile.txt", "r") as f:         lines = f.readlines()except:    print 'error'    raisefinally:    print 'o wa ri'
関数、クラス
関数def testfunc(x, y):  return x + ytestfunc(10, 2)
関数def testfunc():    print “hoge”    returntestfunc()
関数def testfunc():    print “hoge”    returntestfunc()
関数def testfunc():    print “hoge”    returntestfunc
関数def say():    print “hoge”>>> hogehoge = say>>> hogehoge()“hoge”
無名関数>>> add = lambda x,y:x + y>>> add(1, 2)3
クラスclass Human(object):    name = ''    age = 0    def __init__(self, name, age):        self.name = name        self.age = age   def say(self):       print 'hoge'
クラスclass Human(object):    name = ''    age = 0    def __init__(self, name, age):        self.name = name        self.age = age   def say(self):       print 'hoge'
クラスclass Human(object):    name = ''    age = 0    def __init__(self, name, age):        self.name = name        self.age = age   def say(self):       print 'hoge'
クラスclass Human(object):    name = ''    age = 0    def __init__(self, name, age):        self.name = name        self.age = age   def say(self):       print 'hoge'
できればこう書きたい?class Human(object):    name = ''    age = 0    def __init__(name, age):        self.name = name        self.age = age   def say():       print 'hoge'
こう考えてみるobj = Hoge()obj.age = 20obj.name = 'hoge'
こう考えてみるdef initialize(obj, age, name):    obj.age = age    obj.name = nameobj = Hoge()initialize(obj, 20, 'hoge')
こう考えてみるclass Hoge():    def initialize(obj, age, name):        obj.age = age        obj.name = nameobj = Hoge()Hoge.initialize(obj, 20, 'hoge')
こう考えてみるclass Hoge():    def initialize(obj, age, name):        obj.age = age        obj.name = nameobj = Hoge()obj.initialize(20, 'hoge')
こう考えてみるclass Hoge():    def __init__(obj, age, name):        obj.age = age        obj.name = nameobj = Hoge(20, 'hoge')
こう考えてみるclass Hoge():    def __init__(self, age, name):        self.age = age        self.name = nameobj = Hoge(20, 'hoge')
便利な書き方
コメント# コメントdef func():    '''    関数のドキュメント  '''  print 'Hello world!'
コメント>>> help(func)Help on function func in module __main__:func()    関数のドキュメント
値の比較>>> x = 5>>> 1 < x < 10True>>> x < 10 < x*10 < 100True
値を入れ替え>>> a = 10>>> b = 5>>> a, b = b, a>>> a, b(5, 10)
戻り値を分けて入れる>>> a, b = b, aこれができるのは、リスト代入(タプル代入)のおかげ>>> ip1, ip2, ip3, ip4 =        ‘192.168.0.1’.split(‘.’)ip1 = 192, ip2 = 168, ip3 = 0, ip4 = 1
配列のインデックス>>> items = [‘A’, ‘B’, ‘C’]>>> for index,item in enumerate(items):>>>    print index, item0 A1 B2 C
後置if>>> i = 2>>> “hoge” if i%2==0 else “fuga”hoge>>> i = 1>>> “hoge” if i%2==0 else “fuga”fuga
map>>> items = [1,2,3,4,5]>>> map(str, items)[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]>>> map(lambda x:x*x, items)[1, 4, 9, 16, 25]
リスト内包表記result =  [do_something(i) for i in range(0, 10)]
リスト>>> t = [1,2,3,4,5]>>> t[1]2
リスト>>> t = [1,2,3,4,5]>>> t[-1]5>>> t[1:4][2,3,4]>>> t[2::-1][3,2,1]
リスト>>> [1,2,3]+[4,5,6][1,2,3,4,5,6]>>> [1,2,3]*3[1,2,3,1,2,3,1,2,3]
イテレータ>>> i = iter('abc')>>> next(i)'a'>>> next(i)'b'>>> next(i)'c'>>> next(i)Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration
ジェネレータ・ジェネレータはイテレータを 簡単に生成するためのもの
ジェネレータdef generator2():    i = 0    while True:        yield i        i += 1>>> g = generator2()>>> next(g)0>>> next(g)1
ジェネレータfor i in generator2():    print i
Python入門•pythonの特徴•pythonの基本•pythonの色々
色々というかウェブ開発
WEBフレームワーク
しっかり•Django•pylons(Pyramid)•google app engine•tornado
さくっと•Flask•他にも山ほど。
稼働環境
ウェブサーバ•apache     •wsgi•nginx      •fcgi•lighttpd   •gunicorn
PaaS•heroku     • DjangoZoom•dotcloud   •OpenShift•fluxflex     •Cloud             Foundry•google app engine
学習
学習する価値• 基本はc/php/vb/perlと同じだけど、各 所で色々違っておもしろいよ。• なにより書きやすい。
学習する価値• rubyでウハウハしてるなら別に良いかも• 採用曲線の頂点(後は下るだけ)• むしろ今からならjavascriptがいいかも
おすすめ• 公式ドキュメントのチュートリアル
おすすめ• Flaskのドキュメント
Python入門•pythonの特徴•pythonの基本•pythonの色々
今日帰ったら•手洗い•うがい•pythonインストール
ふぅ
今日話すこと•python入門•Dropbox APIを使ってみよう
Dropbox APIを  つかってみよう•DropboxAPIとは•oauthとは•APIにアクセスしてみよう
Dropbox APIを  つかってみよう•DropboxAPIとは•oauthとは•APIにアクセスしてみよう
DropboxAPIとは
DropboxAPIとは
DropboxAPIとは
APIでできること•アカウント情報の取得•ファイルのアップロード•ファイルのダウンロード•検索、共有、サムネイル取得
APIでできること•ファイルのコピー•フォルダの作成•ファイルの移動•ファイルの削除
詳しくは
でもね
すぐには使えません
OAuth
OAuthおーおーす
OAuthとは•API認可の方法•認証(Authentication)ではな く•認可(Authorization)
OAuthとは•twitterとかfacebookとか•もちろんDropboxも
なぜ認可?
たとえば•dropboxのAPIを使ってサービ スを提供するサイトがあって•これを利用しようとします
利用者       サービス提供サイトあんたのサービス使わせてよ!            dropbox
利用者       サービス提供サイトいいけど、dropboxのアクセスに必要なユーザー名とパスワードを教えてちょ             dropbox
利用者       サービス提供サイトユーザー名とパスワードを入力            dropbox
利用者        サービス提供サイト           ユーザー名&パスワード      データのやりとり             dropbox
利用者         サービス提供サイト            ユーザー名&パスワード              dropbox サービス提供サイトがアカウント情報を 持つことが問題!
OAuthだと
利用者       サービス提供サイトあんたのサービス使わせてよ!            dropbox
利用者        サービス提供サイト使いたいって人がいるんだけど、許可してくれない?             dropbox
利用者      サービス提供サイト            dropboxそれは本人に聞いてみないと!あのサービス提供サイトがあなたのデータにアクセスしたいって言うんだけどいい?
利用者      サービス提供サイト          dropboxいいともー!
利用者        サービス提供サイト             アクセストークン      いいってさー      よかったねー               dropbox
利用者      サービス提供サイト           アクセストークン           dropbox アカウント情報をサービス提供サイトに 預ける必要がなくなる。
認可API•/oauth/request_token•/oauth/authorize•/oauth/access_token
Dropbox APIを  つかってみよう•DropboxAPIとは•oauthとは•APIにアクセスしてみよう
1.登録•Dropboxにアプリ登録する•consumer key•consumer secret key
1.登録https://www.dropbox.com/developers
1.登録
1.登録
1.登録
1.登録consumer keyconsumer secret key
2.リクエストトークン•/oauth/request_token•cosumer keyとsecretを使う•必要な情報を固めてPOST•リクエストトークンを取得
2.リクエストトークンここがめんどう
2.リクエストトークン•oauth_consumer_key•oauth_signature_method•oauth_timestamp•oauth_nonce•oauth_version•oauth_signature
2.リクエストトークンこれをPOST!
2.リクエストトークン•成功するとリクエストトークンを 返してくれる•oauth_token_secret•oauth_token
3.認証/認可URL•/oauth/authorize+トークン•利用者がURLにアクセスして許可 する
3.認証/認可URL
4.アクセストークン•/oauth/access_token•consumer keyとsecretを使う•リクエストトークンも使う•アクセストークンを取得
4.アクセストークン•POSTする方法は リクエストトークン取得時+ リクエストトークンを投げる
4.アクセストークン•成功するとアクセストークンを返 してくれる。•oauth_token_secret•oauth_token•uid
5.APIの利用•アクセストークン•consumer keyとsecretを使う•各種APIへアクセス
じつは•oauthは非常に面倒 oauth2策定中 実装してるところもある facebook GraphAPI
つまり
今更OAuth1.0とか覚えなくていい         え・・・、じゃあ、今までのスライドは何のために・・・
そこで
Dropbox APIを  つかってみよう• DropboxAPIとは• oauthとは• APIにアクセスしてみよう•めんどくさいのでSDKを使う
DropboxSDKとは
SDKを使うと
1.登録 consumer key
SDKのクラスを作る
2.リクエストトークン取得
3.認可用URL作成
4.アクセストークン取得
5.APIの利用
5.APIの利用
5.APIの利用
5.APIの利用
5.APIの利用
5.APIの利用
Dropbox APIを つかってみよう文字列だけの画面見てもよくわからないからわかりやすいの見せろよ!
こんなの作ってみるdropboxフォルダのファイル一覧
環境構築# mkvirtualenv dropboxtest...開発用の仮想環境が準備される。(dropboxtest)# pip install flask dropbox dotcloud...必要なパッケージがインストールされる。
flaskサンプル1
flaskサンプル1
flaskサンプル2
flaskサンプル2
アプリ作成
アプリ作成
アプリ作成
アプリ作成
デプロイ
デプロイ
まとめ
まとめ•pythonはキモくない
まとめ•pythonはキモくない•ライブラリで面倒なことも楽勝
まとめ•pythonはキモくない•ライブラリで面倒なことも楽勝•フレームワークもいい感じ
まとめ•pythonはキモくない•ライブラリで面倒なことも楽勝•フレームワークもいい感じ•稼働環境も増えてきた
pythonするなら
いまがチャンス!
以上です。ありがとうございました。 おつかれさまでした。

Recommended

PDF
Scala with DDD
PPTX
Javaプログラミング入門【第2回】
PDF
すごいH 第12章モノイド
KEY
モナドがいっぱい!
PDF
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PPT
CLR/H No.35-2
KEY
Actor&stm
PPTX
[機械学習]文章のクラス分類
PDF
Ekmett勉強会発表資料
PDF
Mock and patch
PPTX
Javaプログラミング入門【第3回】
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
Javaセキュアコーディングセミナー東京第1回演習の解説
PDF
PHP5.5新機能「ジェネレータ」初心者入門
 
PPTX
C# LINQ ~深く知って、使いまくろう~
PDF
Scalaのオブジェクトの話
PPTX
C#を始めたばかりの人へのLINQ to Objects
PDF
Metaprogramming in JuliaLang
PDF
Juliaで並列計算
PDF
LINQソースでGO!
PDF
traitを使って楽したい話
PDF
Introduction Xtend
ODP
Ekmett勉強会発表資料
PDF
Python勉強会3-コレクションとファイル
PPTX
Javaデザインパターン入門【第3回】
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PPTX
Java8 Lambda chapter5
KEY
ひのきのぼうだけで全クリ目指す
PDF
Python入門

More Related Content

PDF
Scala with DDD
PPTX
Javaプログラミング入門【第2回】
PDF
すごいH 第12章モノイド
KEY
モナドがいっぱい!
PDF
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PPT
CLR/H No.35-2
KEY
Actor&stm
Scala with DDD
Javaプログラミング入門【第2回】
すごいH 第12章モノイド
モナドがいっぱい!
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
CLR/H No.35-2
Actor&stm

What's hot

PPTX
[機械学習]文章のクラス分類
PDF
Ekmett勉強会発表資料
PDF
Mock and patch
PPTX
Javaプログラミング入門【第3回】
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
Javaセキュアコーディングセミナー東京第1回演習の解説
PDF
PHP5.5新機能「ジェネレータ」初心者入門
 
PPTX
C# LINQ ~深く知って、使いまくろう~
PDF
Scalaのオブジェクトの話
PPTX
C#を始めたばかりの人へのLINQ to Objects
PDF
Metaprogramming in JuliaLang
PDF
Juliaで並列計算
PDF
LINQソースでGO!
PDF
traitを使って楽したい話
PDF
Introduction Xtend
ODP
Ekmett勉強会発表資料
PDF
Python勉強会3-コレクションとファイル
PPTX
Javaデザインパターン入門【第3回】
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PPTX
Java8 Lambda chapter5
[機械学習]文章のクラス分類
Ekmett勉強会発表資料
Mock and patch
Javaプログラミング入門【第3回】
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Javaセキュアコーディングセミナー東京第1回演習の解説
PHP5.5新機能「ジェネレータ」初心者入門
 
C# LINQ ~深く知って、使いまくろう~
Scalaのオブジェクトの話
C#を始めたばかりの人へのLINQ to Objects
Metaprogramming in JuliaLang
Juliaで並列計算
LINQソースでGO!
traitを使って楽したい話
Introduction Xtend
Ekmett勉強会発表資料
Python勉強会3-コレクションとファイル
Javaデザインパターン入門【第3回】
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Java8 Lambda chapter5

Similar to Pythonで始めるDropboxAPI

KEY
ひのきのぼうだけで全クリ目指す
PDF
Python入門
PPTX
Python基礎その1
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
PPTX
2017/12/21 虎の穴 Python勉強会
PPTX
Python 学習教材
PDF
Python勉強会2-数値と文字列
PPT
Pythonintro
PPTX
Python opt
ODP
Introduction of Python
KEY
Hello World Python featuring GAE
PDF
Python02
PDF
DATUM STUDIO PyCon2016 Turorial
PDF
Python勉強会4-制御構文とパッケージ
PDF
はじめてのPython
PDF
エキ Py 読書会02 2010/9/7
PDF
第1回python勉強会
PDF
S02 t1 sta_py_tsuji_0702_slides
PDF
Python01
PDF
LLdeade Python Language Update
ひのきのぼうだけで全クリ目指す
Python入門
Python基礎その1
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
2017/12/21 虎の穴 Python勉強会
Python 学習教材
Python勉強会2-数値と文字列
Pythonintro
Python opt
Introduction of Python
Hello World Python featuring GAE
Python02
DATUM STUDIO PyCon2016 Turorial
Python勉強会4-制御構文とパッケージ
はじめてのPython
エキ Py 読書会02 2010/9/7
第1回python勉強会
S02 t1 sta_py_tsuji_0702_slides
Python01
LLdeade Python Language Update

Pythonで始めるDropboxAPI


[8]ページ先頭

©2009-2025 Movatter.jp