16
22

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 3 years have passed since last update.

【Python】ホワイトボードツールMiroのAPI叩いてめっちゃ付箋貼る

Last updated at Posted at 2021-06-16

最近、ホワイトボードツール「Miro」を知り、仕事でブレストに使用しています。

↓ボードのテンプレートの例。
スクリーンショット 2021-06-17 1.15.00.png

付箋を貼り付ける他にもマインドマップを作ったりプレゼンテーションができたりなど、非常に機能が豊富です。複数人で作業しててもストレスなくぬるぬる動きます。Miroを使うとオンラインでも楽しくブレストができます。

CSVから付箋を作成できたら便利なので、PythonでAPIを叩いてみました。Mac OS11.3.1(Big Sur)、Python3.9で実行しています。

###参考:

https://developers.miro.com/reference
https://developers.miro.com/reference#sticker

APIキーは無料で取得できます。取得方法は上のQiitaがまとまっています。

##準備

APIキーは別で保存しましょう。

Miro_API_KEY.txt
ここにAPIキーを書く

CSVファイルは「データ.csv」というファイル名で、カラム3つのUTF-8でエンコードされているファイルを想定しています。(この記事では触れませんがCSVをMacで操作しようとすると文字コードの壁がありますよね。。)今回使うCSVは最初の行に百人一首の歌が入っています。

MiroのボードのIDが必要になります。ボードをブラウザで開いたときにURLで (略)app/board/ の次に入っている文字列です。

##コード本文

miro_create_widget.py
import csv
import json
import requests
import time

with open('Miro_API_KEY.txt') as f:
    access_token = f.read()

headers = {'Authorization': 'Bearer {}'.format(access_token)}
BOARD_ID = "<ここにボードのIDが入ります。>"
url_create_widget = "https://api.miro.com/v1/boards/{}/widgets".format(BOARD_ID)

my_csv = "データ.csv"

my_data = []

with open(my_csv,encoding="UTF-8") as f:
    csv_reader = csv.reader(f)
    for row in csv_reader:
        my_data.append([row[0],row[1],row[2]])


for i, data_line in enumerate(my_data):

    data = {}

    data["type"] = "sticker"
    data["x"] = 100
    data["y"] = 0 + 114*i
    # data["height"] = 228
    # data["width"] = 199

    data_style = {}
    data_style["backgroundColor"] = "#f5d128"
    # data_style["fontFamily"] = "Noto Sans"
    data_style["fontSize"] = 40
    data_style["textAlign"] = "left"
    data_style["textAlignVertical"] = "top"
    data["style"] = data_style
    text_in_sticker = data_line[0]
    data["text"] = "<p>{}</p>".format(text_in_sticker)


    with open('load_data_tmp.json', 'w') as f:
        json.dump(data, f)

    json_open = open('load_data_tmp.json')
    json_data = json.load(json_open)

    response = requests.post(url_create_widget,json=json_data,headers=headers)

    print(response.text)

    time.sleep(1)

スクリーンショット 2021-06-17 1.52.10.png

スクリーンショット 2021-06-17 1.53.19.png

普通のREST APIなのですが、ペイロードを書くにあたり、引っかかった事がいくつかありました。
・付箋の大きさは自由に指定できません。"height"は199,228,350のどれかを指定できます。それから1でもずれると400エラー(ペイロードの中身の形式が間違ってるよ、という内容)になります。
・"scale"と"fontFamily"は指定しようとすると400エラーになっちゃいました。理由はわかりません。上のコードではコメントアウトしています。
・上のコードではJSONをファイルとして一旦出力して再度それを読み込んでいます。この無駄なプロセスがないと、やはり400エラーを吐かれました。JSONの扱いに関する問題だと思いますが...わかる方いらっしゃいましたらコメントお願いします。

##感想
ちょっと引っ掛かるポイントはありましたが、概ね使いやすい印象です。CSVデータの2列目にデータの属性を入れて、その値によって付箋を色分けする。3列目の数値によって付箋の大きさを変える、など、Miroならではの使い方をすると有り難みが出てきそうですね。

この記事がブレストの一助になれば幸いです。よきMiroライフを!

16
22
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
16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?