恒星間ボトルメール

Interstellar Message in a Bottle

BBC NEWSまとめ記事をExcelファイルから自動作成するPythonスクリプトを書いた

f:id:emrdkn:20220411165335j:plain
Python

本ブログの「英語・外国語」カテゴリで毎週、1週間分のBBC NEWSをまとめた記事を作成している。

emrdkn.hatenablog.com

emrdkn.hatenablog.com

emrdkn.hatenablog.com

毎日、記事を見つけExcelファイルに書き足しながら記録している。

毎回フォーマットがほぼ一定であるので、Excelファイルから自動的に記事ファイルを作成するスクリプトPythonで書いた。

なお、Excelファイルの内容は次の画像で示した。

f:id:emrdkn:20220411165519p:plain
Excel File

Pythonスクリプト

# 必要モジュールの読み込みとExcelファイルの読み込み

import openpyxl
import datetime

wb = openpyxl.load_workbook("C:/Users/Public/Workspace/Essays/supplements_long/English_news.xlsx")
ws = wb["Sheet1"]
## どの日から始まる一週間を記事にするかを入力してもらって、必要な情報を計算する

start_str = input("Write start date in this format. YYYYMMDD\n")
start_datetime = datetime.datetime.strptime(start_str, "%Y%m%d")
start_date = datetime.date(start_datetime.year, start_datetime.month, start_datetime.day)

the_oldest_datetime = ws.cell(row=2, column=1).value

difference = start_datetime - the_oldest_datetime

start_row = difference.days + 2
## 記事のパーツを作成する関数の定義

def one_day(i):
    output = "## " + (start_date + datetime.timedelta(days=i)).strftime('%Y/%m/%d') + "\n\n"
    output += ws.cell(row=start_row+i, column=4).value + "\n\n"
    output += "[" + ws.cell(row=start_row+i, column=5).value + ":embed:cite]" + "\n\n"
    if ws.cell(row=start_row+i, column=9).value:
        output += ws.cell(row=start_row+i, column=9).value + "\n\n"
    return output

def make_one_day_word_list(i):
    english = ws.cell(row=start_row+i, column=7).value
    japanese = ws.cell(row=start_row+i, column=8).value
    output = "|" + english + "|" + japanese + "|" + "\n"
    return output
# 記事の自動生成

base_str = "この1週間のBBC NEWSまとめ(" + start_date.strftime('%Y/%m/%d') + " - " + (start_date + datetime.timedelta(days=6)).strftime('%Y/%m/%d') + ")\n\n"

base_str += "この1週間のBBC NEWSをまとめて紹介します。\n\n"

for i in range(7):
    base_str += one_day(i)

base_str += "## 雑感\n\n" 

base_str += "## 単語\n\n" + "|keyword|meaning|\n" + "|---|---|\n"

for i in range(7):
    base_str += make_one_day_word_list(i)
    
print(base_str)
# 記事をmdファイルとして保存

tdate = datetime.date.today().strftime("%Y%m%d")

path = "C:/Users/Public/Workspace/Essays/Essays/" + tdate + "_bbc_news_from_" + start_str + ".md"

with open(path, mode='w', encoding='utf-8') as f:
    f.write(base_str)