17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

matplotlibのグラフをローカルに一時保存せずにslackへ送信するサンプルコード

Last updated at Posted at 2018-11-02

モチベ

やりたいこと

定期的にDBのデータをグラフ化してslackに投げたい。

なぜこの方法か

  • redashの定額プランを払うほど使わない。
  • lambdaやcloud functionsを使って費用を節約するつもりだが、ローカルに一時保存ができなさそう。

本題

概要

ざっくりいうと

  • pyplotのグラフをio.BytesIO()を用いてメモリ上へ一時保存する。
  • そのバイト列をslack api のリクエストに入れる。
  • slackに投稿される。

サンプルコード

sample.py
import matplotlib.pyplot as plt
import numpy as np
import seaborn; seaborn.set() # for plot style
import io
import requests

# 適当なグラフを作成
rand = np.random.RandomState(42)

mean = [0, 0]
cov = [[1, 2], [2, 5]]
X = rand.multivariate_normal(mean, cov, 100)

fig = plt.figure()
plt.scatter(X[:, 0], X[:, -1])

# io を用いてメモリ上に保存
format = "png"
sio = io.BytesIO()
plt.savefig(sio, format=format)

# グラフの出力をしない
plt.close(fig)


# slackのアクセストークン
accessToken ='<YOUR_SLACK_ACCESS_TOKEN>'
channel_id = '<YOUR_SLACK_CHANNEL_ID>'

# ファイルに直接バイトを入れる
files = {'file': sio.getvalue()}
param = {'token': accessToken, 'channels': channel_id}
res = requests.post(url="https://slack.com/api/files.upload",params=param, files=files)

print(res.content)

参考サイト

17
13
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
17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?