4 changed files with 68 additions and 58 deletions
File diff suppressed because one or more lines are too long
@ -1,41 +1,38 @@ |
|||
import xml.etree.ElementTree as ET |
|||
import datetime |
|||
|
|||
# Function to generate the outline for a given week |
|||
def ordinal(n): |
|||
if 11 <= n % 100 <= 13: |
|||
suffix = 'th' |
|||
else: |
|||
suffix = {1: 'st', 2: 'nd', 3: 'rd'}.get(n % 10, 'th') |
|||
return str(n) + suffix |
|||
|
|||
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) |
|||
day_date = start_date |
|||
weekday = day_date.strftime('%A') |
|||
week_outline = ET.Element( |
|||
"outline", |
|||
text=f"2025 Week {week_num}", |
|||
_note=f"<time startYear='2025' startMonth='{day_date.month}' startDay='{day_date.day}'> {weekday[:3]}, {day_date.strftime('%b')} {day_date.day}, 2025</time>" |
|||
) |
|||
empty = ET.SubElement(week_outline, "outline", text="") |
|||
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>", |
|||
text=f"<b><span class='colored c-{get_color(weekday)}'>{weekday} {ordinal(day_date.day)} {day_date.strftime('%b')}</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", |
|||
@ -48,33 +45,22 @@ def get_color(weekday): |
|||
} |
|||
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 |
|||
for week_num in range(1, 53): |
|||
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() |
|||
|
|||
|
Loading…
Reference in new issue