ToolsCrowiを使っていると文書のバックアップが取りたくなることがあります。GitlabなどのGithubクローンではWiki機能をgitで管理できたりしますが、Crowiでもバックアップやローカルでの編集ができれば便利ですよね。そこで、今回はCrowiのAPIを使って記事を編集するツールを作成します。エンハンスされたcrowi-plus/Growiでも同じものが使えるようですね。複雑になるわりに私はあまり使わないので、基本的な本文のアップロード・ダウンロードが出来るようにし、添付やコメントなどの操作は考えないことにします。動作を確認しています。仕様が若干変わったようなので新しい方にも対応できるよう修正しました。スクリプト今回もまずはスクリプトを記載しておきます。Webクライアントはrequestsモジュールを使っていますので、なければインストールする必要があります。基本はスクリプトで定義しているCrClientクラスを使います。設定を渡してインスタンス化したのち、各メソッドを呼びます。エラーハンドリングはしていないので、問題があれば例外を出して止まるはずです。アドレス(解決できる場合はホスト名)、およびローカルの作業ディレクトリへのパス、がここでの設定項目になっています。メソッド__urlを変更して下さい。当該ユーザが作成したページとを同期する、というものになっています。ローカルの作業ディレクトリについては、パスは相対パスでも絶対パスでも構いませんが、スクリプト実行時に実在する必要があります。等で管理しておくと便利だと思います。ファイル(とディレクトリ構造)のみなので、その他のファイルがあっても一切無視されます。以降に詳細を記載しておきます。本家Crowiのソースで言うと、routeを見れば定義されているAPIがわかります。記事(ページ)一覧の取得CrClient.fetch()メソッドで、Crowiに作成されているページ一覧を取得できます。一覧として取得できるのは指定したユーザが作成した記事のみのようです。この動作は以降の操作でも同じなようで、例えば、試していませんが、他のユーザが既に作成してしまっているページと同じ名前のページを作ろうとするとエラーになるはず。ページ一覧が返ってきます。ページを作成している場合には結構ツライかも。取り出しているだけです。後ほどアップロード時の変更管理に使うため、ハッシュ(MD5)も計算しています。ダウンロードCrClient.fetch()メソッドの引数にdownload=Trueを渡すと、ダウンロードの動作になります。コンストラクタに渡したパスをローカルの作業ディレクトリとし、Crowiサーバから作業ディレクトリへ、取得したページ本文のみをツリー構造そのままにダウンロードします。作業ディレクトリに配置する場合は拡張子.mdが付きます。ファイルがあった場合には、上書きされますので注意。設定に依存)ので、存在する場合は”(portal).md”の名前でカテゴリの直下にダウンロードされます。逆に、この仕様では”(portal)”という名前の記事を作成することはできません。CrClient.__write()メソッドを使ってファイル保存を実行するか否かのみ異なります。markdownファイルを書き込む際に、ファイルパスを計算します。何やらゴニョゴニョやっていますが、URLをローカルのパス+.mdに直したり、ポータルページのファイル名を指定する処理をしています。メモ帳では開かないほうが無難です。編集する分には困らない、、、はず。アップロードCrClient.upload()メソッドがアップロードを実装しています。同じパスへアップロードします。同じパスに記事が存在する場合は更新、存在しない場合は新規作成になります。新規作成でAPIを投げ分けなければいけないところ。URI(API)を使う必要があります。ID("page_id")を指定しなければなりません。スクリプト中で呼んで指定します。更新の有無はハッシュを計算し、比較することで判別します。MD5ですがまあ実用上は十分でしょう。data=payload_,params=self.params_)ダウンロード時と同じく、ポータルページは”(portal).md”という名前のファイルとして管理されます。このアップロードの操作は、ローカルのファイルでCrowi側のページを上書きします。ダウンロード時と異なりCrowi自身がページの変更履歴を管理しているので、うっかり想定外の上書きをしても(手動で)復元はできます。(1803)ですが、我が家...記事を読むGitで始めるバージョン管理もはやバージョン管理と言えばGitですね。これさえ覚えておけば、という頻出のコマンド例をメモしておきます。バー...記事を読むUbuntu16にCrowiをインストールするMarkdownで書けるWikiサーバ、Crowiをインストールします。最近、複数台立ち上げる必要に迫られたので、シェルスクリプトで書い...記事を読むUbuntu18にGrowiをインストールするGrowiをインストールしたときのメモ。~二代目の帰朝~別記事の続きです。データの登録と検索について記載します。物理NICはひとつしかない、でもサブネットを多重化したい。そんなときに便利なのがタグVLANですね。家庭用(アンマネージドスイッチ)...記事を読むPythonでなんちゃってディスク空き容量取得サイズの大きいファイルを書き出すスクリプトなど、実行中の環境でディスクの空き容量を取得したいときがあります。StorageをPythonから操作する、前記事の続きです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。