LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-02-09

#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()

Original by Github issue

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1