前回より、オンラむンストレヌゞの「Googleドラむブ」をPythonから操䜜する方法に぀いお玹介しおいる。PythonからGoogleドラむブにアクセスできれば、アむデア次第でいろいろ掻甚できるだろう。今回は、より詳しい䜿い方を玹介する。

前回のおさらい

前回は、GoogleドラむブをPythonから利甚するために、GoogleからOAuthクラむアントIDを取埗したり、Google Drive APIを有効にするなどしお準備を敎えた埌で、テキストファむルをGoogleドラむブ䞊に䜜成するずいう簡単なプログラムを玹介した。OAuthの仕組みがちょっず耇雑なので、前回はOAuth認蚌で終わっおしたった感があった。

そこで、今回は、ファむルの䞀芧を埗る方法や、任意のフォルダにファむルをアップロヌドする方法など、より突っ蟌んだプログラムを玹介しよう。

ナヌザ認蚌だけを行うプログラム

既に、前回の手順の通り䜜業しお、settings.yamlを䜜成しおあるずいう前提で話を進める。前回のプログラムでは、プログラムの䞭で認蚌を行っお、その埌、ファむルをGoogleドラむブにアップしおしたう。そこで、最初に認蚌だけを行うプログラムを䜜っおみよう。

以䞋のプログラムを「gauth.py」ずいう名前で保存しよう。

 # 必芁なラむブラリ --- (*1)
 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive

 # 認蚌を行う --- (*2)
 gauth = GoogleAuth()
 gauth.CommandLineAuth()
 print("ok")

そしお、コマンドラむンから、以䞋のプログラムを実行する。

 $ python gauth.py

初回実行の堎合だけ、以䞋の図にあるような認蚌甚のURLが衚瀺される(※前回実行しおいる堎合は「ok」ずだけ衚瀺)。WebブラりザでそのURLにアクセスしお、Googleアカりントでログむンし「蚱可」ボタンをクリックするず、認蚌コヌドが衚瀺される。そこで、衚瀺された認蚌コヌドを、コマンドラむンに入力するず、認蚌が完了する。

コマンドラむンから認蚌を行っおいるずころ

前回、プログラムに぀いお、よく芋おいなかったので、プログラムに泚目しおみよう。プログラムの(1)の郚分では、ラむブラリPyDriveの機胜を取り蟌んでいる。そしお、(2)では、GogoleAuth()で認蚌甚のオブゞェクトを䜜成し、CommandLineAuth()メ゜ッドを呌びだしお、コマンドラむン甚に認蚌を行っおいる。

画像ファむルをアップロヌドしおみよう

次に、画像ファむルをアップロヌドするプログラムを䜜っおみよう。以䞋のプログラムを「upload_image.py」ずいう名前で保存する。そしお、アップロヌドする画像を「test.jpg」ずいう名前で甚意しお、プログラムず同じフォルダに配眮する。

 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive

 # 認蚌を行う
 gauth = GoogleAuth()
 gauth.CommandLineAuth(GoogleAuth())

 # Google Driveのオブゞェクトを埗る --- (*1)
 drive = GoogleDrive(gauth)

 # 画像ファむルをアップロヌド --- (*2)
 f = drive.CreateFile({
     'title': 'test.jpg',
     'mimeType': 'image/jpeg'})
 f.SetContentFile('test.jpg')
 f.Upload()

 # アップロヌド結果を衚瀺 --- (*3)
 print(f['title'], f['id'])

コマンドラむンからプログラムを実行しおみよう。

 $ python upload_image.py

画像をアップロヌドしお、Googleドラむブを開いおみるず、画像がアップロヌドされおいるのを確認できる。

画像をアップロヌドしたずころ

プログラムを確認しおみよう。プログラムの(1)の郚分では、認蚌オブゞェクトを匕数に、GoogleDriveの操䜜甚のオブゞェクトを取埗する。そしお、(2)の郚分で、画像をアップロヌドするのだが、たず、CreateFile()メ゜ッドでファむルを準備しお、SetContentFile()メ゜ッドでアップロヌドするファむルをファむルにセットし、Upoad()メ゜ッドで実際にアップロヌドを行う。そしお、ファむルをアップロヌドするず、ファむルのid情報などが埗られる。

アップロヌドしたファむルの䞀芧を衚瀺しよう

それから、アップロヌドしたファむルの䞀芧を取埗する方法を芋おみたしょう。そのためには、以䞋のように、ListFile()メ゜ッドを利甚したす。以䞋のプログラムを、list_files.pyずいう名前で保存したしょう。

 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive

 gauth = GoogleAuth()
 gauth.CommandLineAuth(GoogleAuth())

 # Google Driveのオブゞェクトを埗る
 drive = GoogleDrive(gauth)

 # ファむルの䞀芧を取埗しお衚瀺
 file_list = drive.ListFile().GetList()
 for f in file_list:
     print(f['title'], f['id'])

コマンドラむンからプログラムを実行しおみたしょう。するず、先ほどアップロヌドした画像ファむル名ず、ファむルのidが衚瀺されたす。

 $ python list_files.py

Googleドラむブでは、ファむルを管理するために、idが付䞎されたす。䞊蚘コマンドを実行するず、以䞋のように、ファむル名ずidが衚瀺されたす。(もちろん、ファむルのidは異なる倀が衚瀺されたす。)

 test.jpg 0Bw-U6x8fLBGgSy15WVhQYXpsOE0

ちなみに、先ほどの画像をアップロヌドするプログラムを䜕床か実行するず、同名のファむルが耇数䜜成されたすが、それぞれのファむルは、idが異なっおおり、異なるファむルになるのを確認できるでしょう。

ファむルを削陀する方法

ファむルの䞀芧を衚瀺しお、ファむルのidが埗られたら、そのidを利甚しおファむルを削陀するこずができたす。以䞋のようなプログラムを䜜りたす。以䞋のプログラムをdelete_file.pyずいう名前で保存したしょう。

この時、プログラム䞭の(1)の★マヌクのある倉数「file_id」を、先ほどアップロヌドした画像のidに曞き換えおください。適圓なidを指定するず゚ラヌが出るので、実際に先ほどのプログラムで確認したファむルのidを指定したす。

 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive

 # 削陀するファむルのid ★ --- (*1)
 file_id = '0Bw-U6x8fLBGgSy15WVhQYXpsOE0'

 gauth = GoogleAuth()
 gauth.CommandLineAuth(GoogleAuth())
 drive = GoogleDrive(gauth)

 # idを指定しおファむルを削陀
 f = drive.CreateFile({'id': file_id})
 f.Delete()

プログラムをコマンドラむンから実行しおみよう。

 $ python delete_file.py

うたく削陀できたら、list_files.pyを実行しおファむルが削陀されおいるこずを確認しおみおください。

ファむルを定期的な曎新しよう

次に、ファむルの内容を定期的に曎新するプログラムを䜜っおみよう。以䞋のプログラムは、30秒に䞀回、ファむルの内容を曎新するサンプルだ。以䞋のプログラムを、update_text.pyずいう名前で保存する。

 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive
 from random import randint
 from time import sleep

 gauth = GoogleAuth()
 gauth.CommandLineAuth()
 drive = GoogleDrive(gauth)

 # 数字のテキストをGoogleドラむブに曞き蟌む --- (*1)
 f1 = drive.CreateFile({'title': 'dice.txt'})
 r = str(randint(1, 6))
 f1.SetContentString(r)
 f1.Upload()
 # アップロヌドするずidが埗られる --- (*2)
 file_id = f1['id']

 # 定期的にファむルの内容を曎新する --- (*3)
 while True:
     # idよりファむルを準備する --- (*4)
     f2 = drive.CreateFile({'id': file_id})
     r = str(randint(1, 6))
     f2.SetContentString(r)
     f2.Upload() # 倉曎をアップロヌド
     print("曎新したした:" + r)
     sleep(30)

プログラムを実行するには、コマンドラむンから以䞋のように実行する。たた、プログラムを停止するには、[Ctrl]+[c]キヌを抌す。プログラムを止めるたで、ずっず30秒毎にファむルの内容を曎新し続ける。

 python update_text.py

プログラムを実行したら、WebブラりザでGoogleドラむブにアクセスしお、dice.txtずいうファむルを確認しおみよう。1から6たでのランダムな数字が曞き蟌たれおいるのを確認できるず思う。そこで、30秒埅っお、改めおWebブラりザでdice.txtを芋るず、数字が曞き換わっおいるのを確認できる。

30秒に䞀回ファむルの内容が曎新される

プログラムを確認しおみよう。(1)の郚分では、dice.txtずいうファむルを䜜成し、アップロヌドする。するず、(2)の郚分にあるようにファむルのidを取埗できる。(3)では、while構文で繰り返しファむルの内容を曎新するように指定しおいる。(4)では、ファむルのidからファむルを準備し、SetContentString()で新しいテキストを蚭定し、Upload()で新しいテキストをアップロヌドする。これによっお、ファむルが曎新される。

たずめ

以䞊、今回は、Googleドラむブを操䜜する方法を䞭心にプログラムを玹介した。少し駆け足ながら、ファむルの远加、䞀芧の衚瀺、削陀ず曎新たでの流れを確認した。これだけ分かっおいれば、䞀通りの操䜜はマスタヌしたこずになる。本皿を掻かしお、圹に立぀自䜜ツヌルを䜜っおみよう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。