システム運用管理者の徒然日記

日々勉強、日々仲間に助けられ、何とか過ごしております。

日々勉強、日々仲間に助けられ、何とか過ごしております。

python

Teams メッセージ投稿で空白/改行が入る(改善)

ニュースや株価などの情報をプッシュ型で取得したいため、pythonによるWebスクレイピングを行った結果を Teams Incoming Webhook を利用して定期的に Teams メッセージに投稿しているのですが、スクリプト内で空白や改行などの削除を行っても、メッセージの最後の空白/改行が入ってしまう事象が改善できませんでした。

Teams メッセージ改行

結論から言うと、機種変更(iPhone XS → iPhone 13 pro)で改善。。
前の機種でも、Teams アプリのアップデートは実施していたのですが全く改善されず、もちろん .pyファイル側のスクリプトは何も修正していないので、機種変更の恩恵を受けた形です。

デスクトップ版のアプリでは発生していなかったので、iPhone アプリの再インストールを行えば直ったのかな?
英語サイトを含めて、Webの情報は何も無かったので、とりあえず改善して何よりでした。


以上
 

データ使用量を通知するスクリプト

スマホのデータ通信量を Teams Incoming Webhook を利用して Teams のチャネルに投稿するスクリプトを作成してみました。

本記事は、こちらの記事(データ通信残量をLINE通知してくれるスクリプトをつくってみた)を参考にさせていただきました。
My Softbank の整形部分はhtml部分が変更となったため修正していますが、スクレイピングの内容は一緒で、LINEではなくTeams連携に変更している形です。


・環境 / モジュール

 - Windows 10
 - Python 3系
 - requests(pip3 install requests)
 - buautifulsoup(pip3 install BeautifulSoup4)
 - pymsteams(pip3 install pymsteams)

Microsft 365 Personal でも、Teams サインインの際に 「仕事と組織向け」 を選択すればチーム・チャネルの管理やコネクタの追加等は利用できました。


・コード

import re				# 標準ライブラリに組み込んである正規表現を行うモジュール
import requests				# HTTP通信ライブラリ
import pymsteams			# MS Teams連携ライブラリ
from bs4 import BeautifulSoup as bs

MyNumber = '携帯番号'
MyPass = 'ログインパスワード'
TeamsURL = 'Teams Webhook URL'

def login():
    s = requests.Session()
    r = s.get('https://my.softbank.jp/msb/d/webLink/doSend/MSB020063')
    soup = bs(r.text,'html.parser')
    ticket = soup.find('input',type='hidden').get('value')
    payload = {
        'telnum': MyNumber,
        'password': MyPass,
        'ticket':ticket
    }
    s.post('https://id.my.softbank.jp/sbid_auth/type1/2.0/login.php', data=payload)
    return s

def get_data(s):
    r = s.get('https://my.softbank.jp/msb/d/webLink/doSend/MRERE0000')
    soup = bs(r.text,'html.parser')
    auth_token = soup.find_all('input')
    payload = {
        'mfiv': auth_token[0].get('value'),
        'mfsb': auth_token[1].get('value'),
    }
    req = s.post('https://re11.my.softbank.jp/resfe/top/', data=payload)
    data = bs(req.text,'html.parser')
    return data


data = get_data(login())

period = data.find(class_="top-period").text
period = re.sub(r"[\r\n]", "", period.replace('利用期間', ''))
period = period.strip()

used = data.find(class_="dara right").text
used = re.sub(r"[\r\n]", "", used.replace('GB', ''))
used = used.strip()

total = data.find(class_="data right").text
total = re.sub(r"[\r\n]", "", total.replace('GB', ''))
total = total.strip()

nocount = data.find(class_="data-capacity").text
nocount = re.sub(r"[\r\n]", "", nocount.replace('GB', ''))
nocount = nocount.strip()


items = [period, used, total, nocount]


Title = '期間:{}'.format(items[0])
# Teamsへ送信する際、改行する場合は 「半角スペース2つ + \n」 を記入
Msg = 'データ通信量:{}GB / {}GB ({:.2f}%) \nギガノーカウント使用量:{}GB'
.format(items[1],items[2],float(items[1])/float(items[2])*100,items[3])
 ↑ 表示の関係で改行していますが、改行せずに記載 ↑

myTeamsMessage = pymsteams.connectorcard(TeamsURL) myTeamsMessage.title(Title) myTeamsMessage.text(Msg) myTeamsMessage.send()


・タスクスケジューラへの登録

「コンピュータの管理」- 「タスクスケジューラ」 -「基本タスクの作成」 から作成したスクリプトを登録します。
「操作:プログラムの開始」 で設定する値は、以下のとおりです。

---------------
プログラム/スクリプト :python.exeのパス (※ python3系のパスを指定)
引数の追加 :実行するpyファイル名
開始 :pyファイルまでの絶対パス (※ 末尾の ¥ は不要)
---------------




スクリプトが正しく実行されると、以下のようなメッセージが通知されます。






以上

スポンサードリンク