APIを使ってファイルをダウンロードする(バッチ処理)IT2020年12月13日SharePointのAPIからファイル情報を取得したり、ファイルをダウンロードする。テナント名を{{MYTENANT}}、サイト名を{{MYSITE}}としよう。ブラウザでSharePointの画面を閲覧する際は以下のようなURLになる。https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}「ドキュメント」をクリックすると以下のようなURLに飛ぶ。Documents」がURLエンコードされて「Shared%20Documents」である。このディレクトリはどのサイトにもあるだろう。サンプルとして、以下のような階層でサブディレクトリとファイルを作成した。Documents/TestFolder/Book1.xlsxAPIのURL確認ためしにブラウザで以下のようなURLにアクセスするとXMLで応答がある。・フォルダ情報https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_api/web/GetFolderByServerRelativeUrl('Shared%20Documents')・サブフォルダ一覧https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_api/web/GetFolderByServerRelativeUrl('Shared%20Documents')/Folders・フォルダ内のファイル一覧https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_api/web/GetFolderByServerRelativeUrl('Shared%20Documents%2FTestFolder')/Filesなお、引数の値は相対パスで書くと'Shared%20Documents'で始まるが、絶対パスでは'%2Fsites%2F{{MYSITE}}%2FShared%20Documents'のように書く(「%2F」は「/」のこと)。GetFolderByServerRelativeUrlの引数は相対パスでも問題ないようだが、GetFileByServerRelativeUrlによるファイルダウンロードの場合は絶対パスを指定しないと応答が返らなかった。・ファイルダウンロードhttps://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_api/web/GetFileByServerRelativeUrl('%2Fsites%2F{{MYSITE}}%2FShared%20Documents%2FTestFolder%2FBook1.xlsx')/$valueファイルダウンロードの引数に相対パスを渡した場合、以下のようなメッセージが返った。パラメーターではサポートされていません。APIに関するマイクロソフトの公式ドキュメントは以下にある。以下のようなURLでアプリケーション登録用の画面が表示される。https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_layouts/15/appregnew.aspx※一度作成したアプリケーションの更新・削除方法が不明なので、まず適当な値を入れてお試しするのが吉。・クライアントID:「生成」ボタンを押せば勝手に生成される。・クライアントシークレット:「生成」ボタンを押せば勝手に生成される。・タイトル:任意のアプリケーション名を入力する。・アプリドメイン:任意のドメインを入力する。「localhost」などでもよいようだ。・リダイレクト先のURI:「http://localhost」など。正常に作成されました。」という画面に遷移する。この画面に表示されている情報を大切に保管する。以下のようなURLでアプリケーションへの権限付与用の画面が表示される。https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_layouts/15/appinv.aspx・アプリID:先ほど作成したアプリケーションの「クライアントID」を入力する。「参照」ボタンを押すと、その他の項目が補完される。・アプリの権限要求XML:以下のような値を入れる。/></AppPermissionRequests>【参考】公式サイトの説明。アプリ権限の相違点について説明します。以下のようなURLでアプリの権限が表示される。https://{{MYTENANT}}.sharepoint.com/sites/{{MYSITE}}/_layouts/15/appprincipals.aspxアプリIDという欄に、先程のクライアントIDの後ろに「@」で区切られてハイフン区切りの36文字の文字列が続いている。この36文字がREALMである。API実行いよいよ、アプリからAPIを実行してみる。・SharePointAPI実行の2段階の手続きを踏む必要がある。アクセストークンの有効期限は約8時間後。一度取得すれば期限が来るまでSharePointAPI実行を繰り返すことができる。アクセストークン取得ここまでで取得した各値を使い、以下のようなリクエストを送信する。・リクエストボディは以下のパラメータをセットする。grant_type=client_credentialsclient_id={{クライアントID}}@{{REALM}}client_secret={{クライアントシークレット}}resource=00000003-0000-0ff1-ce00-000000000000/{{MYTENATNT}}.sharepoint.com@{{REALM}}※「00000003-0000-0ff1-ce00-000000000000」はSharePointを示すprincipalという値らしい。※Postmanなどのツールを使う場合は気にしなくてもよいが、curlなどで送信する場合は「@」や「/」をURLエンコードして「name=value&name=value&...」の形式でボディを作る。「@」→「%40」、「/」→「%2F」である。クライアントシークレットにも「/」や「=」が入っているので、忘れずにURLエンコードを行う。※「{{MYTENANT}}.sharepoint.com」の部分を間違うと後のSharePointAPI実行で以下のようなエラーが返る。これにしばらく嵌って時間を浪費した。thrown."}うまくいけばJSONで応答が返ってくる。「access_token」に入っている値(長ーい文字列:これがアクセストークン)を抽出する。さっきブラウザで実行したAPIのURLから適当にピックアップした。application/json;odata=nometadata」うまくいけば、欲しかった情報が返ってくるはず。プロキシ統合の使用」にチェックを入れる。・プロキシ統合を使用する場合、Lambdaは次の形式で結果を返す必要がある。APIを使って更新する。公開中のページをコピーして非公開状態で編集していた内容を、元のページに反映するために使った。Wo...2020年07月25日ITXSERVERのPythonでvenvとpipを利用するXSERVERに限らず、root権限の無い環境でpipを利用したい場合に応用できるはず。標準エラー出力をパイプで後続プロセスに渡す。以下、標準出力はstdout、標準エラー出力はstderrと表記する。SDKをセットアップするとpipでエラーが発生するようになった。installが失敗する。KAJISACカズレーザーの50点塾キヨ。CHANNEL仲里依紗です。KAJISACカズレーザーの50点塾キヨ。CHANNEL仲里依紗です。きアーカイブ2023年2月2022年12月2022年8月2022年7月2022年5月2022年3月2022年1月2021年12月2021年10月2021年8月2021年7月2021年6月2021年5月2021年4月2021年3月2021年2月2021年1月2020年12月2020年11月2020年10月2020年9月2020年8月2020年7月2020年6月2020年5月2020年4月2020年3月2020年2月2019年8月2019年6月2019年5月2019年4月2019年3月2019年2。