#Github issue を作成すると #Medium #API で新規ポストする自動連携の例。Zapierを利用。

Github issue を作成すると #Medium #API で新規ポストする自動連携の例。Zapierを利用。

結果の例

タグも指定できている

なんと画像は自動的にコンバートされて、Mediumにホスティングしてくれている、すげえ、画像をポストするAPIを別途叩く必要がないみたいだ

image

Medium API の取得

Mediumユーザーの設定ページから 項目がなければサポートに連絡して有効化してもらう

Github issue の作成がトリガー

image

Code by Zapier の python 実行をアクションにする

title content url

にそれぞれ Github issue のデータを入れる

token には直接 Medium API Application トークンを入れる

image image

Script

なんと format を指定すると、markdownのままポスト出来る 最初は Zapier の Formatter で Markdown to HTML 変換をしようと思ったが、必要なかった

タイトルのハッシュタグをパースして、Mediumのタグとして扱っている

# -*- coding: utf-8 -*-

import requests
import re

# Get me author id
me_api_url = 'https://api.medium.com/v1/me'

me_api_headers = {
 'Authorization': 'Bearer {}'.format(input['token'])
}

me_api_res = requests.get(me_api_url, headers=me_api_headers)
author_id = me_api_res.json()['data']['id']


# Post Story
# https://github.com/Medium/medium-api-docs#33-posts

url = 'https://api.medium.com/v1/users/{author_id}/posts'.format(author_id=author_id)

headers = {
 'Authorization': 'Bearer {}'.format(input['token']),
 'Content-Type': 'application/json',
}

# タイトルからハッシュタグを抽出してQiita API 用に整形
title_hashtags = re.findall(r'#([^\s]+)', input['title'])
medium_tags = []
for title_hashtag in title_hashtags:
    medium_tags.append(title_hashtag)

# タイトルでハッシュタグが見つからなかった時
if not medium_tags:
    medium_tags = []


json = {
  "title": input['title'],
  "contentFormat": "markdown",
  "content": input['content'],
  "canonicalUrl": input['url'],
  "tags": medium_tags,
  "publishStatus": "public"
}

res = requests.post(url, headers=headers, json=json)

output = res.json()

https://github.com/YumaInaura/YumaInaura/issues/569