CV・NLPハマりどころメモ

画像認識と自然言語処理を研究する上でうまくいかなかったことと,その対策をまとめる自分用のメモが中心.

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

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

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

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

構文

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

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

入力例

curl -u hoge-user '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 '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 '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