2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DirectCloud-BOXのAPI連携の肝とpythonモジュール作成

Posted at

前段

DirectCloud-BOXという、Dropboxを更に企業向けにして、FireStorageみたいにも使えるっぽいツールを使ってみた。
使った理由は、APIが充実していて、WEBGUIを使わずに共有とかができそうで、上手く活用すれば
顧客とのファイル受け渡しが楽になるかもなーと思いました。
あと、pythonのAPIモジュール製作の練習も兼ねて。requests便利だよ、requests。

APIについて

DirectCloud-BOXのAPIは、このサービスで出来ることは一通り揃っており、
ユーザの立場で使うものと、管理者の立場で使うものの2種類があります。
リファレンスはこちら。
https://directcloud.jp/api_reference

今回はユーザ向けのものしか触っていません。理由としては管理者の方は正直、画面で操作したほうが
UI的にも操作性は悪くないので、いいのかなと思いました。車輪の再発明はしたくない。

DirectCloud-BOXのAPI接続をするまで

DirectCloud-BOXの開始

まず、フリー版へ登録しましょう。
https://directcloud.jp/freeplan
フリー版でもAPIはすべて使える上、5GBのストレージ容量とユーザ数無制限で利用可能です。
ちょっとだけ有料版と差はあるものの、検証するにはなんの問題もありませんでした。

登録後にやること

会社ID、ユーザID、パスワードが発行されるとメールで通知されるので、管理者の管理画面にログインします。
ログインしたら、ユーザの管理など出来ることが色々ありますが、一目散に左メニューの「全機能一覧」を押して
共有 > DirectCloud-BOX API を使用するに設定し、APIのServiceとServiceKeyを作成します。

スクリーンショット 2021-08-21 14.23.18.png

↓全機能一覧から、使用する設定リンクを押した先の画面
スクリーンショット 2021-08-21 14.25.59.png

ここまでに出てきた、会社ID、ユーザID、パスワード、Service、ServiceKey すべてこの後利用するのでメモしておきます。

API接続

上記にも書いたとおり、APIは会社ID、ユーザID、パスワード、Service、ServiceKey を使ってAccessTokenを取得し、AccessTokenを利用してデータの取得や登録を行います。
(ちょっとパラメータが過剰すぎやしないかな・・・パスワード変更したらAPIを書き換えないといけないって疎結合してる意味が無い。)

さてこれら情報を取得したら、AccessToken取ってみましょう。
ここでなんと、APIリファレンスにAPIのドメインが記載されていません。これは問い合わせをするしか知る方法はありませんでした。
公開しても良い情報とのことでしたのでAPIのドメインは

https://api.directcloud.jp

です。なのでAccessTokenを取得するには

https://api.directcloud.jp/openapi/jauth/token

に対してパラメータ

"service": service,
"service_key": service_key,
"code": code,
"id": id,
"password": password,

を送信すれば取得できるようです。

その他APIの取得

AccessTokenを取得したら他のAPIはAccessTokenをヘッダーに付けてAPIを叩くだけでした。
この辺りは非常にシンプルなのでソースコードもきれいに書けたと思います。

作ったpythonモジュール

gihubに公開しています。

使い方

使い方は単純でcloneした後、pythonの環境が整ってあれば、.envを作成して

pip install -r requirements.txt
python index.py

すればいい感じに動くと思います。

.env設定内容

.envの中身はこんな感じで作成します。
※SERVICE、SERVICE_KEYは管理者用APIを使いたかったら設定して下さい。

SERVICE="pddlhm*******"
SERVICE_KEY="9f1cee41*****************************"

USER_SERVICE="pddl****"
USER_SERVICE_KEY="b2595***************"

COMPANY_CODE="pdd*****"
USER_ID="bdm*****"
PASSWORD="*******"

実際に動作させたいくつかの情報

フリーの猫動画をアップロードして、ダウンロードリンクの作成を行ってみました。

from direct_cloud_box.api import directCloudBox
import os
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

USER_SERVICE = os.environ.get("SERVICE")
USER_SERVICE_KEY = os.environ.get("SERVICE_KEY")
COMPANY_CODE = os.environ.get("COMPANY_CODE")
USER_ID = os.environ.get("USER_ID")
PASSWORD = os.environ.get("PASSWORD")

user_api = directCloudBox(
    USER_SERVICE,
    USER_SERVICE_KEY,
    COMPANY_CODE,
    USER_ID,
    PASSWORD
    )
try:
    print(user_api.fileUpload("./sample_file/sample_movie.mp4", "1"))
    print(user_api.fileGet("1"))    
    print(user_api.fileDownloadUrl("1", "285389469"))
finally:
    user_api.tokenExpire()

すると、このようなURLが発行されます。
https://cdn.directcloud.jp/pddlhmwn/bdmnbqjc/20210820131811322883?response-content-disposition=attachment%3B%20filename%3D%22sample_movie.mp4%22%3B%20filename%2A%3DUTF-8%27%27sample_movie.mp4&response-content-type=video%2Fmp4&Expires=1629524543&Signature=iFvJTMV38gJwQjtjQX~EIbSE5OWvk~anw9JJQzKZX0NYDm33ohJe05oH1SEdKuVNR5eDNJJIQe6QnnN9YViPKcRNDw7SaoQXsa9zc26RoaVPYUby8OIrYC9J~Bazr3EyY4qGYsPq~IAP7bx0uLN~3zRiqezLUUIJP~hlGcPXh3W6c85N4amW4lYec-sHKMPLWy4ub5-ZbZSEjSA0apvu0bI3Z3aZfjFy63ry2k0edl4iNK6zIHxgd8koZUWJguqwld7BX1cVJKI-ZvJZUcso4CLZgjacxAuOV9Dy7FWnEsOgYt6cX0Vfhk~i2atUDJkL8kZnjnpYODtxascfFpBxXA__&Key-Pair-Id=APKAJV43NA6KHFLMBOQQ

これで猫動画が見れましたね。にゃー。

他にAPIからはパスワード付きシェアURLや、アップロード可能フォルダの共有、あとプレビュー表示URLなんかも
APIから作れるようですが、なぜかAPIがすべてエラーが返却されます。
ちょっと一人では解決できなさそうなので、今回はここまで。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?