DropboxのAPI利用について
前回Google Hangout Chatに画像を付けてメッセージを投稿するまわりを調べましたが、その際メッセージに付与する画像をWeb上に置いてURLを指定する必要があるので、今回はDropboxに任意の画像をアップロードして、共有リンクを作成してその共有リンクのURLを取得して、Google Hangout ChatのCard形式のJSON文字列の中で、IMAGEウィジット内のURLなどに指定する箇所について調べてみました。
DropboxにはAPIが用意されているので、「Dropboxに画像アップロード → 共有リンクの作成 → 共有リンクURLの取得」のプロセスをDropboxのAPIを利用して実現します。
import dropbox
ACCESS_TOKEN = 'ABCDEFG12345HIJKLMN678OPQRSTU90'
local_path = 'fox.jpg'
path = '/images/' + local_path #dropbox直下に「images」フォルダを作成
# ファイルをDropboxにアップロード
f = open(file_from, 'rb')
dbx.files_upload(f.read(),path )
f.close()
# ファイル名取得
#for entry in dbx.files_list_folder('/images/').entries:
# print(entry.name)
# 共有リンク作成
setting = dropbox.sharing.SharedLinkSettings(requested_visibility=dropbox.sharing.RequestedVisibility.public)
link = dbx.sharing_create_shared_link_with_settings(path=path, settings=setting)
# 共有リンク取得
links = dbx.sharing_list_shared_links(path=path, direct_only=True).links
if links is not None:
for link in links:
url = link.url
url = url.replace('www.dropbox','dl.dropboxusercontent').replace('?dl=0','')
print(url)
・DropboxのAPIを利用するには、DropboxのConsole画面でApp登録をして、Token情報をメモして利用します。
・Dropoboxのアップロードした画像を共有参照する場合、リンクURLは、末尾の「?dl=0」を削除して、また「www.dropbox.com」の文言も「dl.dropboxusercontent.com」に置き換えてあげると、URLをブラウザ上で参照可能になります。
変更前:ttps://www.dropbox.com/.../hogehogefugafuga/fox.jpg?dl=0
↓
変更後:ttps://dl.dropboxusercontent.com/.../hogehogefugafuga/fox.jpg
補足
・いろいろ調べてみると、どうやらRaspberry Pi(≒ Linux OS)を室内や温室などに設置して、室内ペットや温室栽培の野菜などを対象にカメラで定期的に撮影して、撮影した画像ファイルをDropboxにアップロードして、その画像の共有リンクを作成してURLを取得してSlackに投稿するといった定点観測用の簡易監視システムを構築するといった文脈で、この「Dropboxに画像アップロード → 共有リンクの作成 → 共有リンクURLの取得」のプロセスを、DropboxのAPIを使って実装している方がちらほらいらっしゃる模様。さもありなむ。
・最初Googleドライブに画像を置いて共有URLを取得できるかどうかを試そうかとも思いましたが、今回はDropboxでの方法について調べてみました。(おそらくはGoogleドライブでも同じことができるはず。。。だと思うけど、根気がないから調べないです)
・[再掲]自分がやりたいのは、Google AnalyticsなどのKPI数値をグラフ化してまとめたもの(画像)を、Google hangout chatに定期的に投稿して、チーム内でのディスカッションを促進するといったことです。今回はそのGoogle hangout chatのチャットルーム(Webhook)に投稿する画像を、Dropboxにアップロードして、共有リンクURLを作成して参照可能な状態にするまわりのプロセスを調べてみました。
これを踏まえて次回に続く。。。