MS Teamsにメッセージを送る方法を模索していましたが、意外に簡単にできたので、”表形式”で送ることにも挑戦してみました。
私は特定の株の前日から1週間分を取得して、所有株価との差分を出すことにしました。
Teamsへメッセージを送るのは、以下の手順が必要です。
Teamsのチャネルに”Incoming-Webhook”の”コネクター”を追加します。
コネクタURLに向けて、送りたいメッセージをPostします。
また、表形式にするには、HTMLタグをつけた形式でメッセージを作る必要があります。実は改行コードも解釈されないので<BR>などをつけて上げる必要があります。
コネクタURLへメッセージを送る
今回はPythonを利用しましたが、参考資料は以下のサイトです。
https://learn.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL
使用するパッケージは「pymsteams」です。参考にしたサイトは以下のURLですが、ほぼそのまま使えます(笑)
https://algorithm.joho.info/programming/python/pymsteams-install/
こんな感じです。簡単です。先人に感謝!!
import pymsteams
def sendTeamsMessage(teams_url, send_message_title, send_message_body):
# メッセージを送信
teams = pymsteams.connectorcard(teams_url)
teams.title(send_message_title)
teams.text(send_message_body)
teams.send()
表形式のメッセージを送る
Teamsへ送る”pymsteams”のメッセージにはいろいろな形式を送ることができますが、敢えて少し難しい方で対応してみます。
使用するパッケージ
BeautifulSoup4
利用するメソッド
new.tag()
append()
想定する利用シーン
CSVファイル形式の変数を引数として、要素を一つずつ取り出して、表形式に変換します。
import bs4
def covertToHtmlTable(df):
# soupオブジェクトを作成
soup = bs4.BeautifulSoup('', 'html.parser')
# tableタグを作成
table_tag = soup.new_tag('table border="2"')
# 行ごとに取り出す
for index, data in df.iterrows():
# trタグの用意
tr_tag = soup.new_tag('tr')
# 行ごとのデータに対するループ
for d in data:
# 一番上の行はthタグに収める
if index == 0:
th_tag = soup.new_tag('th')
th_tag.string = d
tr_tag.append(th_tag)
else:
td_tag = soup.new_tag('td')
tr_tag.append(td_tag)
# trタグをtableに追加
table_tag.append(tr_tag)
# tableをsoupに追加
soup.append(table_tag)
# 文字列に変換して戻す
return str(soup)
参考にしたサイトは以下のとおりです。ほぼそのままです(笑)
https://kiironomidori.hatenablog.com/entry/beautifulsoup-csv-table
この関数の戻り値をそのままTeamsに送れば、表形式で表示されます。
Comments