https://github.com/syui/medium.zsh

公式ドキュメントを読めばだいたいわかりますが、まずは試しに動かしてみます。クライアントはとりあえずShell Scriptで書きました。

まずは、クライアントIDなどを取得するために以下のページからアプリを追加。

https://medium.com/me/applications

追加後は、それらを使ってブラウザから権限を許可します。許可後はデフォルトではURLのcode=で指定された値を取ります。Macの場合は以下のような感じです。

$ export url="https://medium.com/m/oauth/authorize?client_id=$id&scope=basicProfile,publishPost&state=$s&response_type=code&redirect_uri=$r"
$ open -a Google\ Chrome $url
$ code=`osascript -e 'tell application "Google Chrome" to get URL of active tab of first window'`
$ code=${code##*=}
$ echo $code

次に、アクセストークンを取得します。取得したものは50日間有効です。

curl -sL \
	-d client_id=$id \
	-d client_secret=$sec \
	-d redirect_uri=$r \
	-d grant_type=authorization_code \
	-d code=$code \
	https://api.medium.com/v1/tokens

それ以降は先程取得した情報のうちのリフレッシュトークンを使って再度アクセストークンを取得する処理を書いて終わり。

curl -sL \
	-d refresh_token=$ref \
	-d client_id=$id \
	-d client_secret=$sec \
	-d grant_type=refresh_token \
	https://api.medium.com/v1/tokens

ここでは自分のユーザー情報の取得と記事ポストを実行してみました。

$ medium.zsh h
$ medium.zsh m
$ medium.zsh p
# me
url=https://api.medium.com/v1/me
curl -sL -H "Authorization: Bearer $access_token" $url

# post
url=https://api.medium.com/v1/users/$author_id/posts
body='
{
  "title": "Liverpool FC",
  "contentFormat": "html",
  "content": "<h1>Liverpool FC</h1><p>You’ll never walk alone.</p>",
  "canonicalUrl": "http://jamietalbot.com/posts/liverpool-fc",
  "tags": ["football", "sport", "Liverpool"],
  "publishStatus": "public"
}
'
curl -sL \
	-H "Authorization: Bearer $access_token" \
	-H "Content-type: application/json" \
	-X POST -d "$body" \
	$url