You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.1 KiB
80 lines
3.1 KiB
import xml.etree.ElementTree as ET
|
|
import datetime
|
|
|
|
# Function to generate the outline for a given week
|
|
def generate_weekly_opml(week_num, year=2025):
|
|
# Start of the week (Sunday)
|
|
start_date = datetime.date(year, 1, 1) + datetime.timedelta(weeks=week_num-1)
|
|
|
|
# Adjust to get the Sunday of the week (since Python's datetime module uses Monday as the start of the week)
|
|
start_date = start_date - datetime.timedelta(days=start_date.weekday() + 1)
|
|
# monday_date = start_date + datetime.timedelta(days=1)
|
|
|
|
# Create the root element for the week outline with Sunday date as a note
|
|
# week_outline = ET.Element("outline", text=f"2025 Week {week_num}", _note=f"<time startYear='2025' startMonth='{monday_date.month}' startDay='{monday_date.day}'>Monday, {monday_date.strftime('%b')} {monday_date.day}, 2025</time>")
|
|
week_outline = ET.Element("outline", text=f"2025 Week {week_num}")
|
|
# ET.SubElement(week_outline, "outline")
|
|
|
|
# Loop through the days of the week (Sunday to Saturday)
|
|
for i in range(7):
|
|
day_date = start_date + datetime.timedelta(days=i)
|
|
weekday = day_date.strftime('%A')
|
|
|
|
# Create the day outline with a link for tasks
|
|
|
|
day_outline = ET.SubElement(
|
|
week_outline,
|
|
"outline",
|
|
text=f"<b><span class='colored bc-{get_color(weekday)}'>{weekday}</span></b>",
|
|
_note=f"<time startYear='2025' startMonth='{day_date.month}' startDay='{day_date.day}'> {weekday[:3]}, {day_date.strftime('%b')} {day_date.day}, 2025</time>"
|
|
)
|
|
|
|
# Example of activities (these can be customized)
|
|
if weekday in ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']:
|
|
outline = ET.SubElement(day_outline, "outline", text="")
|
|
|
|
return week_outline
|
|
|
|
# Function to return a color based on the weekday (for styling)
|
|
def get_color(weekday):
|
|
colors = {
|
|
"Sunday": "purple",
|
|
"Monday": "red",
|
|
"Tuesday": "teal",
|
|
"Wednesday": "pink",
|
|
"Thursday": "green",
|
|
"Friday": "yellow",
|
|
"Saturday": "sky"
|
|
}
|
|
return colors.get(weekday, "gray")
|
|
|
|
# Function to create OPML for all weeks in 2025 and the first week of 2026
|
|
def create_opml_for_year_and_first_week_2026():
|
|
root_opml = ET.Element("opml", version="2.0")
|
|
head = ET.SubElement(root_opml, "head")
|
|
owner_email = ET.SubElement(head, "ownerEmail")
|
|
owner_email.text = "[email protected]"
|
|
|
|
body = ET.SubElement(root_opml, "body")
|
|
|
|
# Generate OPML for each week of 2025
|
|
for week_num in range(1, 53): # There are 52 weeks in 2025
|
|
week_opml = generate_weekly_opml(week_num)
|
|
body.append(week_opml)
|
|
|
|
# Now, handle the first week of 2026
|
|
week_2026_opml = generate_weekly_opml(1, year=2026)
|
|
body.append(week_2026_opml)
|
|
|
|
# Generate the final tree
|
|
tree = ET.ElementTree(root_opml)
|
|
return tree
|
|
|
|
# Create the OPML file
|
|
def save_opml_to_file(filename="diary.opml"):
|
|
tree = create_opml_for_year_and_first_week_2026()
|
|
tree.write(filename, encoding="utf-8", xml_declaration=True)
|
|
|
|
# Call the function to create the OPML
|
|
save_opml_to_file()
|
|
|
|
|