NextCloudにコマンドラインでアクセス[NextCloud]

7月 26, 2020

今回は,NextCloudにコマンドラインでアクセスし,共有フォルダ内の情報参照とファイルのダウンロード・アップロードとファイルの共有リンクの発行を行う方法を紹介する.

共有フォルダ内の情報参照

LinuxUnixコマンドラインcurlを使って情報を取得する.

構文

curl -u [ユーザー名]:[パスワード] 'http://[ホストサーバーのIPアドレス]/remote.php/dav/files/[ユーザー名]/[参照先ディレクトリ]' -X PROPFIND

上のコマンドを打ち込んだ後,ごちゃごちゃとしたXMLディレクトリ内の情報が返ってくる.
パスワードを省略すると,パスワードの入力が求められる.

入力例

curl -u hoge-user:password 'http://hogehoge-cloud.com/remote.php/dav/files/hoge-user/Photos' -X PROPFIND

上の入力例を打ち込むと,アドレス“http://hogehoge-cloud.com”のファイルサーバーに存在する”Photos”ディレクトリ内の写真名(Nut.jpgなど)が出力される.

ホスト側のファイルをローカルにダウンロード

構文

curl -u [ユーザー名]:[パスワード] 'http://[ホストサーバーのIPアドレス]/remote.php/dav/files/[ユーザー名]/[参照先ディレクトリ]/[ダウンロード対象のファイル]' -X GET -o [保存先へのパス]

入力例

curl -u hoge-user:password 'http://hogehoge-cloud.com/remote.php/dav/files/hoge-user/Photos/Nut.jpg' -X GET -o Nut.jpg

上の入力例を打ち込むと,アドレス“http://hogehoge-cloud.com”のファイルサーバーにデフォルトで存在する”Photos”にある写真Nut.jpgがカレントディレクトリにダウンロードされる.

ローカルのファイルをホスト側にアップロード

構文

curl -u [ユーザー名]:[パスワード] 'http://[ホストサーバーのIPアドレス]/remote.php/dav/files/[ユーザー名]/[参照先ディレクトリ]/[アップロードしたいファイルの名前]' -T [アップロードしたいファイルのパス] -X PUT

入力例

curl -u hoge-user:password 'http://hogehoge-cloud.com/remote.php/dav/files/hoge-user/Photos/dog.jpg' -T dog.jpg -X PUT

上の入力例を打ち込むと,アドレス“http://hogehoge-cloud.com”のファイルサーバーにデフォルトで存在する”Photos”ディレクトリにdog.jpgという名前の画像がアップロードされる.

ファイルの共有と共有リンクの取得

ここから少しだけ難しくなる.ファイルの共有を行うために,まずGUI上の設定>共有>アプリからの共有APIの利用を許可する にチェックが入っていることを確認すること.

構文

curl -u [ユーザー名] -X GET 'http://[ホストサーバーのIPアドレス]/ocs/v2.php/apps/files_sharing/api/v1/shares?path=[参照先ディレクトリ]/[共有するファイル名]&shareType=3'' -H "OCS-APIRequest:true"

ファイルの共有では,/ocs/v2.php/apps/files_sharing/api/v1/sharesのOCS APIに複数のパラメータを渡す必要がある.入力するパラメータのpathは共有対象のファイルパスであり,shareTypeはファイル共有の範囲を指定するパラメータのことである(0=user; 1=group; 3=public link; 6=federated cloud share) .0か1を設定した場合は,shareWithのパラメータも設定する必要があるので注意.後ろについている"OCS-APIRequest:true"の意味は分からなかったがおそらく呪文のようなものであろう.

入力例

curl -u hoge-user -X POST 'http://hogehoge-cloud.com/ocs/v2.php/apps/files_sharing/api/v1/shares?path=/Photos/Nut.jpg&shareType=3' -H "OCS-APIRequest:true"

上の入力例を打ち込むと,アドレス“http://hogehoge-cloud.com”のファイルサーバーにデフォルトで存在する”Photos”ディレクトリ内にある写真Nut.jpgが共有化され,返り値として,その共有リンクが含まれたXMLが返ってくる.

共有リンクの取得

ファイルの共有と共有リンクの取得のコマンドからshareTypeのパラメータを省くと,ホスト側にあるファイルの共有リンクを確認することができる.当たり前のことだが,この機能を使うにはGUICLIを使って事前にファイル共有の設定を行っておく必要がある.

構文

curl -u [ユーザー名] -X GET 'http://[ホストサーバーのIPアドレス]/ocs/v2.php/apps/files_sharing/api/v1/shares?path=[参照先ディレクトリ]/[共有するファイル名]' -H "OCS-APIRequest:true"

入力例

curl -u hoge-user -X GET 'http://hogehoge-cloud.com/ocs/v2.php/apps/files_sharing/api/v1/shares?path=/Photos/Nut.jpg' -H "OCS-APIRequest:true"

上の入力例を打ち込むと,アドレス“http://hogehoge-cloud.com”のファイルサーバーに存在する”Photos”ディレクトリ内にある写真Nut.jpgの共有リンクが含まれたXMLが返ってくる.

参考

https://docs.nextcloud.com/server/latest/user_manual/files/access_webdav.html#accessing-files-using-curl

https://docs.nextcloud.com/server/12/NextcloudDeveloperManual.pdf

https://nextcloud.stylez.co.jp/api

NextCloud

Posted by vastee