現職エンジニアなもんで、プログラミングを使ってサボることは得意だったりします。
挨拶ツイートを毎日行っているわけですが(執筆次点2日目で書いてますが!)
やはりこれが毎日できるのかというのは疑問です。
そこで、ある程度自動化すれば何とかならないかと考えたのです。
唐突にQiitaのような記事になります!
※もちろんその日毎のトピックも書きますし、ちゃんと愛とパワーを込めてます!
ツイッターはこちら! > ツイッター @nimanimatw
やりたいこと
ある程度の挨拶テンプレ部分を自動作成支援するスクリプトを書きたい
つかうもの
Python(3系)
しょうさい
この4つをある程度のパターンに則って算出するスクリプトを作ります
日付
今日を取得したうえで、こちらを書式に基づいて変換します。
ただ、祝日表記を行いたいという(謎の)こだわりがあるので、日本の祝日周りの処理が行える「jpholiday」を用いて祝日判定を行います。
※ jpholiday は「pip install jpholiday」する。
import jpholiday
import datetime
dt_now = datetime.datetime.now()
datestr = dt_now.strftime('%Y/%m/%d') + GetWeekStr(dt_now)
def GetWeekStr(dt):
w_list = ['月', '火', '水', '木', '金', '土', '日']
holidaymes = ''
# 祝日なら.
if jpholiday.is_holiday(dt):
holidaymes = '・祝'
try:
return w_list[dt.weekday()] + holidaymes
except:
return ''
また、曜日文字列の取得ですが、「locale」を使い日本語化する方法もありましたが、今回はリスト内からの取得を採用しています。
天気
気象庁API から天気予報を取得することが可能なようなので、そちらを利用します
こちらのQiita記事を参考にしています。
(外部サイト)
初めに
ダッシュボード作成のために、天気予報をAPIにて取得する。
1年くらい前の気象庁のHPが大幅リニューアルし、非公式ながらAPIが発見された。そのAPIを用い「天気予報」を取得したいと思う。気象庁 にて使用されているAPIを使...
def GetTokyoWeather():
# 気象庁データの取得
jma_url = "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json"
jma_json = requests.get(jma_url).json()
# 取得したいデータを選ぶ
jma_weather = jma_json[0]["timeSeries"][0]["areas"][0]["weathers"][0]
# 全角スペースの削除
jma_weather = jma_weather.replace(' ', '')
return jma_weather
def StrToEmoji(str):
emoji = str
if str == '晴れ':
emoji = '☀'
return emoji
APIから取得したものは日本語文字列のため、絵文字へ変換する関数を挟みます。
ここでは晴れしか書いてないです。
おはよう・いのり
どちらもテンプレがら1つピックアップしているだけなので、やっていることは変わらないです。
おはようの方だけ記載しておきます。
def GetMorningCall():
# 前か後ろどちらかに絵文字・顔文字を配置する.
w1_list = [
'おはようございます%s%s',
'%sおっはよーございます!%s',
'%sおはよーございます!%s',
'皆様おはようございます%s%s',
]
w2_list = [
'😆',
'😍',
'💖',
'💕',
r'ヽ(。ゝω・)ノ',
r'"ヽ( ゚ω゚)ノ"',
r"(っ'ヮ'c)",
]
index1 = random.randint(0, len(w1_list) - 1)
index2 = random.randint(0, len(w2_list) - 1)
str1 = ''
str2 = ''
if random.randint(0, 1) == 0:
str1 = w2_list[index2]
else:
str2 = w2_list[index2]
str = w1_list[index1] % (str1, str2)
return str
まず、おはようメッセージ候補、装飾候補のリストを作っておき、ランダムに1つ選びます。
おはようメッセージの絵文字の位置をばらけさせることでバリエーションを盛りたいので、1/2の確率でばらけるようにしています。
メッセージの結合
「Jinja2」を使ってテンプレに落とし込みます。
Jinja2はPythonのテンプレートエンジンになります。
※ Jinja2 は「pip install Jinja2」する。
from jinja2 import Environment, FileSystemLoader
#テンプレート読み込み
env = Environment(loader=FileSystemLoader('./', encoding='utf-8'))
tmpl = env.get_template('morningmes.tpl')
str = datestr + weatherstr # 日付 + 天気.
params = {
'date': str,
'morning': GetMorningCall(), # おはよう.
'end': GetEndMessage() # よい一日でありますように.
}
# レンダリングして出力.
rendered_s = tmpl.render(params)
print(rendered_s)
print('---')
str_len = len(rendered_s)
print(f'str_length : {str_len}, rest : { 140 - str_len }')
<morningmes.tpl>
⛩️ {{date}}
⛩️ {{morning}}
⛩️ とぴっく
⛩️ {{end}}
現在の文字数を出しておけば自分で書く部分の目安になるかなと思ったり。
出力は以下みたいな感じ。
=======================
⛩️ 2022/11/03木・祝☀
⛩️ おはようございます😍
⛩️ とぴっく
⛩️ 今日も皆様素敵な一日が訪れますように💕
---
str_length : 71, rest : 69
=======================
ここからとぴっくとか微修正加えていけば多分楽です、たぶん。
おまけ
おは戦タグの自動生成スクリプト(こっちの方が需要ありそう)
def MakeOhaSenTag(dt):
# dt = datetime.datetime.now()
# 令和~年に変換.
reiwa = dt.year - 2018
w_list = ['g🌛', 'k🔥', 's🌊', 'm🌴', 'f🍺', 'd🍩', 'n🍨']
m_list = [None, 'j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd']
str = f'#おは戦{ reiwa }{ dt.strftime("%m%d") }{ m_list[dt.month] }{ w_list[dt.weekday()] }'
return str
今回公開ソースから実用分はちょこちょこ手を加えてます。
応用でLINEの適当な返事選定とかにも使えるスクリプトだと思います。
< ちゃんと愛とパワーを込めるためのサボりです!
↓よければ応援してください



ツイッター @nimanimatw