GROWI APIを簡単に使ってみる
概要
前回の記事で、GROWI のAPIを使い、GROWI記事の更新を試してみました。
curl コマンドを使用してAPIのコールを行っていましたが、少々コマンドの組み立てが大変でした。
growi-client
という便利なgemがあるので、今回はこれを使ってもうちょっと簡単にAPIを呼んでみようと思います。
https://github.com/ryu-sato/growi-client
API Tokenの生成
APIを利用するには、まず API Token の生成が必要です。
すでにAPI Tokenが生成済みの場合は、この手順は対応不要です。
右上 ユーザー名 > ユーザー設定 を開きます。
「API設定」タブを開きます。
「API Tokenを更新」ボタンをクリックします。
インストール・準備
ターミナルを起動し、下記コマンドでgemをインストールします。
$ gem install growi-client
.bash_profile
などに環境変数で API Token と GROWI.cloud のURLを設定します。
export GROWI_ACCESS_TOKEN=0123456789abcdef0123456789abcdef0123456789ab export GROWI_URL=https://*****.growi.cloud/
設定したら、 source
コマンドで適用します。
$ source ~/.bash_profile
irb
を起動し、GrowiClientインスタンスを準備します。
$ irb irb(main):001:0> require 'growi-client' => true irb(main):002:0> growi_client = GrowiClient.new(growi_url: ENV['GROWI_URL'], access_token: ENV['GROWI_ACCESS_TOKEN']) => #<GrowiClient:0x00007fe022906f00 @growi_url="https://*****.growi.cloud", @access_token="0123456789abcdef0123456789abcdef0123456789ab", @rest_client_param={}, @cp_entry_point="https://*****.growi.cloud/_api/">
APIを使ってみる
1. ページの一覧を取得する [GApiRequestPagesList]
ページの一覧の取得は、 GApiRequestPagesList
でリクエストパラメータを準備し、 growi_client.request(req)
を実行することで取得できます。
irb(main):003:0> req = GApiRequestPagesList.new path_exp: '/' => #<GApiRequestPagesList:0x00007fe0218af670 @entry_point="/_api/pages.list", @method="GET", @param={:path=>"/"}> irb(main):004:0> growi_client.request(req) => #<GApiReturn:0x00007fe021bf51e0 @ok=true, @data=[#<GrowiPage:0x00007fe021a8d348 @_id="5d9bfe5fab394d00510c39ae", @redirectTo=nil, @updatedAt=#<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,957000000n),+0s,2299161j)>, @lastUpdateUser=#<GrowiUser:0x00007fe022942e10 @_id="5d53b1e3403080003a491d6c", @email="email", @username="username", @name="name", @admin=true, @createdAt=#<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @status=2, @lang="ja", @isGravatarEnabled=false, @isEmailPublished=true>, @creator="5d53b1e3403080003a491d6c", @path="/path/", @__v=1, @revision=#<GrowiPageRevision:0x00007fe0229415d8 @_id="5d9bfe5fab394d00510c39af", @author=nil, @body=nil, @path=nil, @__v=0, @createdAt="", @format="">, @createdAt=#<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,748000000n),+0s,2299161j)>, @commentCount=0, @seenUsers=["5d53b1e3403080003a491d6c"], @liker=[], @grantedUsers=[], @grant=1, @status="published", @grantedGroup=nil, @id="5d9bfe5fab394d00510c39ae">, #<GrowiPage:0x00007fe021a84888 @_id="5d831e595799980050f87f64", @redirectTo=nil, @updatedAt=#<DateTime: 2019-10-04T04:57:32+00:00 ((2458761j,17852s,540000000n),+0s,2299161j)>, @lastUpdateUser=#<GrowiUser:0x00007fe0221673f8 @_id="5d53b1e3403080003a491d6c", @email="email", @username="username", @name="name", @admin=true, @createdAt=#<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @status=2, @lang="ja", @isGravatarEnabled=false, @isEmailPublished=true>, @creator="5d53b1e3403080003a491d6c", @path="/path/", @__v=1, @revision=#<GrowiPageRevision:0x00007fe0221661d8 @_id="5d96d13c00830e00457918df", @author=nil, @body=nil, @path=nil, @__v=0, @createdAt="", @format="">, @createdAt=#<DateTime: 2019-09-19T06:21:13+00:00 ((2458746j,22873s,448000000n),+0s,2299161j)>, @commentCount=0, @seenUsers=["5d53b1e3403080003a491d6c"], @liker=[], @grantedUsers=[], @grant=1, @status="published", @grantedGroup=nil, @id="5d831e595799980050f87f64">]>
2. 指定したページの情報を取得する [GApiRequestPagesGet]
GApiRequestPagesGet
のリクエストパラメータ page_id
に、「1. ページの一覧を取得する [GApiRequestPagesList]」で取得した GrowiPage._id
を指定します。
すると、下記のように指定した page_id の本文を含む情報が取得できます。
irb(main):007:0> req = GApiRequestPagesGet.new page_id: '5d9bfe5fab394d00510c39ae' => #<GApiRequestPagesGet:0x00007fe022981fe8 @entry_point="/_api/pages.get", @method="GET", @param={:page_id=>"5d9bfe5fab394d00510c39ae"}> irb(main):008:0> pp growi_client.request(req) #<GApiReturn:0x00007fe02218c5e0 @data= #<GrowiPage:0x00007fe0221853f8 @__v=1, @_id="5d9bfe5fab394d00510c39ae", @commentCount=0, @createdAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,748000000n),+0s,2299161j)>, @creator= #<GrowiUser:0x00007fe02218f920 @_id="5d53b1e3403080003a491d6c", @admin=true, @createdAt= #<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @email="email", @isEmailPublished=true, @isGravatarEnabled=false, @lang="ja", @name="name", @status=2, @username="username">, @grant=1, @grantedGroup=nil, @grantedUsers=[], @id="5d9bfe5fab394d00510c39ae", @lastUpdateUser= #<GrowiUser:0x00007fe022184520 @_id="5d53b1e3403080003a491d6c", @admin=true, @createdAt= #<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @email="email", @isEmailPublished=true, @isGravatarEnabled=false, @lang="ja", @name="name", @status=2, @username="username">, @liker=[], @path="/path/", @redirectTo=nil, @revision= #<GrowiPageRevision:0x00007fe02218e548 @__v=0, @_id="5d9bfe5fab394d00510c39af", @author=nil, @body="本文本文本文本文本文本文", @createdAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,954000000n),+0s,2299161j)>, @format="markdown", @path="/path/">, @seenUsers=["5d53b1e3403080003a491d6c"], @status="published", @updatedAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,957000000n),+0s,2299161j)>>, @ok=true>
3. 画像をアップロードする [GApiRequestAttachmentsAdd]
画像のアップロードは、 GApiRequestAttachmentsAdd
で行います。
リクエストパラメータには、 page_id
と file
を指定します。
file
は File.open('/path/to/image.jpg', 'r')
の形式でローカルに保存されている画像ファイルのパスを指定します。
APIを呼ぶと、下記のように指定したページに画像がアップロードされます。
irb(main):011:0> req = GApiRequestAttachmentsAdd.new page_id: '5d9bfe5fab394d00510c39ae', file: File.open('/path/to/image.jpg', 'r') => #<GApiRequestAttachmentsAdd:0x00007fe0211253c8 @entry_point="/_api/attachments.add", @method="POST", @param={:page_id=>"5d9bfe5fab394d00510c39ae", :file=>#<File:/path/to/image.jpg>}> irb(main):012:0> pp growi_client.request(req) #<GApiReturn:0x00007fe0220586d8 @data= {:page=> #<GrowiPage:0x00007fe021187af0 @__v=1, @_id="5d9bfe5fab394d00510c39ae", @commentCount=0, @createdAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,748000000n),+0s,2299161j)>, @creator="5d53b1e3403080003a491d6c", @grant=1, @grantedGroup=nil, @grantedUsers=[], @id="5d9bfe5fab394d00510c39ae", @lastUpdateUser="5d53b1e3403080003a491d6c", @liker=[], @path="/path/", @redirectTo=nil, @revision= #<GrowiPageRevision:0x00007fe021195f88 @__v=0, @_id="5d9bfe5fab394d00510c39af", @author=nil, @body=nil, @createdAt="", @format="", @path=nil>, @seenUsers=["5d53b1e3403080003a491d6c"], @status="published", @updatedAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,957000000n),+0s,2299161j)>>, :attachment=> #<GrowiAttachment:0x00007fe02204ace0 @__v=0, @_id="5d9c91b2ab394d00510c39b3", @createdAt= #<DateTime: 2019-10-08T13:40:02+00:00 ((2458765j,49202s,350000000n),+0s,2299161j)>, @creator="5d53b1e3403080003a491d6c", @downloadPathProxied="/download/5d9c91b2ab394d00510c39b3", @fileFormat="image/jpeg", @fileName="image.jpg", @filePath=nil, @filePathProxied="/attachment/5d9c91b2ab394d00510c39b3", @fileSize=65987, @id="5d9c91b2ab394d00510c39b3", @originalName="image.jpg", @page="5d9bfe5fab394d00510c39ae", @url="">}, @ok=true>
4. ページを編集する [GApiRequestPagesUpdate]
ページの編集は、 GApiRequestPagesUpdate
で行います。
「2. 指定したページの情報を取得する [GApiRequestPagesGet]」で取得した本文を書き換え、「3. 画像をアップロードする [GApiRequestAttachmentsAdd]」でアップロードしたファイルを、記事内から参照できるようにしてみます。
リクエストパラメータは下記のように指定します。
- page_id: 「2. 指定したページの情報を取得する [GApiRequestPagesGet]」のレスポンスにある
GrowiPage._id
を指定します。 - body: 更新する内容の本文を記載します。今回は、
本文\\n\\n![画像](/attachment/5d9c91b2ab394d00510c39b3)
としました。 - revision_id: 「2. 指定したページの情報を取得する [GApiRequestPagesGet]」のレスポンスにある
GrowiPageRevision._id
を指定します。 - grant: 「2. 指定したページの情報を取得する [GApiRequestPagesGet]」のレスポンスにある
GrowiPage.grant
を指定します。
APIを呼ぶと、下記のように指定したページの本文を更新することができます。
irb(main):015:0> req = GApiRequestPagesUpdate.new page_id: '5d9bfe5fab394d00510c39ae', body: "本文\n\n![画像](/attachment/5d9c91b2ab394d00510c39b3)", revision_id: '5d9bfe5fab394d00510c39af', grant: 1 => #<GApiRequestPagesUpdate:0x00007fe0212af770 @entry_point="/_api/pages.update", @method="POST", @param={:body=>"本文\n\n![画像](/attachment/5d9c91b2ab394d00510c39b3)", :page_id=>"5d9bfe5fab394d00510c39ae", :revision_id=>"5d9bfe5fab394d00510c39af", :grant=>1}> irb(main):016:0> pp growi_client.request(req) #<GApiReturn:0x00007fe0212fe898 @data= #<GrowiPage:0x00007fe0212e7cb0 @__v=1, @_id="5d9bfe5fab394d00510c39ae", @commentCount=0, @createdAt= #<DateTime: 2019-10-08T03:11:27+00:00 ((2458765j,11487s,748000000n),+0s,2299161j)>, @creator= #<GrowiUser:0x00007fe0212ef898 @_id="5d53b1e3403080003a491d6c", @admin=true, @createdAt= #<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @email="email", @isEmailPublished=true, @isGravatarEnabled=false, @lang="ja", @name="name", @status=2, @username="username">, @grant=1, @grantedGroup=nil, @grantedUsers=[], @id="5d9bfe5fab394d00510c39ae", @lastUpdateUser= #<GrowiUser:0x00007fe0212e5ff0 @_id="5d53b1e3403080003a491d6c", @admin=true, @createdAt= #<DateTime: 2019-08-14T07:01:55+00:00 ((2458710j,25315s,366000000n),+0s,2299161j)>, @email="email", @isEmailPublished=true, @isGravatarEnabled=false, @lang="ja", @name="name", @status=2, @username="username">, @liker=[], @path="path", @redirectTo=nil, @revision= #<GrowiPageRevision:0x00007fe0212ef780 @__v=0, @_id="5d9c948fab394d00510c39b4", @author=nil, @body="本文\n\n![画像](/attachment/5d9c91b2ab394d00510c39b3)", @createdAt= #<DateTime: 2019-10-08T13:52:15+00:00 ((2458765j,49935s,542000000n),+0s,2299161j)>, @format="markdown", @hasDiffToPrev=true, @path="path">, @seenUsers=["5d53b1e3403080003a491d6c"], @status="published", @updatedAt= #<DateTime: 2019-10-08T13:52:15+00:00 ((2458765j,49935s,546000000n),+0s,2299161j)>>, @ok=true>
下記のように、画像をアップロードして、本文を更新することができました。