2018年8月20日月曜日

Patreon REST API を Ruby から使ってみた

概要

タイトルのとおりです
UI を構築するわけではないので OAuth を使ったログイン画面などは作成しません
今回は自身のアカウントの情報を取得してみたいと思います

環境

  • macOS 10.13.5
  • patreon-ruby 0.5.0
  • Ruby 2.5.1p57

クライアントアプリの登録

https://www.patreon.com/portal/registration/register-clients から登録しましょう
patreon_api1.png

アプリの必要な情報を入力します
patreon_api2.png

アイコンの URL プライバシーポリシーの URL、規約の URL は必須ではありません
以下のように作成できれば OK です
patreon_api3.png

今回は「Creator's Access Token」を使います

Patrons を取得するサンプルコード

Patrons は要するに支援してくれている方々です

require 'patreon'
require 'cgi'

access_token = 'creators_access_token'
api_client = Patreon::API.new(access_token)

campaign_response = api_client.fetch_campaign()
campaign_id = campaign_response.data[0].id

all_pledges = []
cursor = nil
while true do
  page_response = api_client.fetch_page_of_pledges(campaign_id, { :count => 25, :cursor => cursor })
  all_pledges.concat page_response.data
  next_page_link = page_response.links[page_response.data]['next']
  if next_page_link
    parsed_query = CGI::parse(next_page_link)
    cursor = parsed_query['page[cursor]'][0]
  else
    break
  end
end

puts all_pledges.map{ |pledge| { full_name: pledge.patron.full_name, amount_cents: pledge.amount_cents } }

Creator's Access Token を使って API クライアントを作成します
まず fetch_campaign()campaign_id を取得します
campaign_id はいわゆるユーザ ID みたいなものです

次にその ID を元に fetch_page_of_pledges() をコールします
ページネートしながら Patrons を取得することができます
次のページは page_response.links[page_response.data]['next'] で取得しています
これが nil であれば終了してそうでなければ次のページの URL をパースして cursol 情報を取得します

あとは最後に保存した配列の情報 (all_pledges) を map で必要なフィールドだけ取得して表示しています
map しているだけなのでそのまま puts しても OK です

おまけ

ちなみに今回の API であれば curl で簡単に呼べます

curl -XGET \
  -H 'Authorization: Bearer [creators_access_token]' \
  'https://www.patreon.com/api/oauth2/api/campaigns/[campaign_id]/pledges'

最後に

Patreon の REST API を Ruby でコールしてみました
今回はアプリを作成したユーザ自身の情報をしか取得しなかったのでログイン画面を作成しませんでした
もしログインしたユーザの情報を取得したい場合はログイン画面を作成して OAuth 認証してトークンをちゃんと取得して API をコールしてください

参考サイト

1 件のコメント:

  1. Creator's Access Token は 1 ヶ月くらいすると自動的に expired になってしまうのでリフレッシュが必要です

    返信削除