Python3を使って、esaに記事を投稿する

サーモン大好き横山です。 今回は、markdownで情報共有出来るサービスの esaにPython3を使って、記事を投稿する小ネタをご紹介します。
2018.07.07

サーモン大好き横山です。

今回は、markdownで情報共有出来るサービスの esa にPython3を使って、記事を投稿する小ネタをご紹介します。

Tokenの準備

APIを利用するためのTokenを取得します。

1.右上の自アイコンをクリック



2.Applicationsのタブをクリック



3.「Personal Access Token」の「Generate new token」をクリック



4.「Token Description」に適当な名称をいれ、Select scopeでRead/Write両方にチェックをいれて作成



5.Tokenが作成されるので、忘れずメモします。忘れた場合は再度作成から始めます。


esaに記事をPOSTする

公式サイトのv1 #noexpand を参考に作成していきます。 Tokenの使用方法は RequestのHeaderに入れる方法とURLにQuery Stringを使ってリクエストする方法2種類ありますが、今回はRequestのHeaderに入れる方法を紹介します。

venv環境を準備

venvの環境を作成し、 requests をインストールします。

$ python3 -m venv venv
$ . venv/bin/activate
$ pip install requests

コード

TOKENには先程取得したTokenを設定します。また、TEAM_NAMEは投稿したいチーム名を記入してください。

main.py

#!/usr/bin/env python

TOKEN = '11decxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd790'
TEAM_NAME = 'チーム名'

import requests
from requests.auth import AuthBase
import json


class AuthEsa(AuthBase):

    def __call__(self, r):
        r.headers['Authorization'] = 'Bearer {}'.format(TOKEN)
        return r


# requests instance
session = requests.session()
session.auth = AuthEsa()
session.headers['Content-Type'] = 'application/json'

api_endpoint = 'https://api.esa.io'


# md
md = """名前|食べたいもの
--------|----------
横山| サーモン
横山| かつお
横山| プリン
"""

# post body
body = dict(post=dict(name="投稿テスト",
                      body_md=md,
                      category='hoge/fuga',
                      wip=False))


# post
resp = session.post('{}/v1/teams/{}/posts'.format(api_endpoint, TEAM_NAME),
                    data=json.dumps(body).encode('utf-8'))


print('response status: {}'.format(resp.status_code))

実行

$ python main.py
response status: 201


まとめ

API経由でesaに投稿するスクリプトが簡単に作成することができました。
これを利用して日次、週次のエビデンスをesaに貼り付けるということも簡単にできそうです。