User:Mibble92/python bot scripts/update maindate.py
Appearance
import sys
import datetime
import urllib.request as request
import re
CALENDAR = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
]
def daterange(start_date, end_date):
for day in range(int((end_date - start_date).days)):
yield start_date + datetime.timedelta(day)
def fetch_maindate(date):
date_url_string = date.strftime('%B_%-d,_%Y')
maindate_all_string = date_url_string.replace('_', ' ')
page_name = 'https://en.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_featured_article/' + date_url_string + '&action=raw'
page = request.urlopen(page_name)
if ((resp_code := page.getcode()) != 200):
return (resp_code, page.msg)
for line in page.readlines():
line_str = line.decode('utf-8')
if ('TFAFULL|' in line_str):
article_title = re.sub('.*TFAFULL\|', '', line_str)
article_title = re.sub('\}\}.*', '', article_title)
article_title = re.sub('\|.*', '', article_title)
return (maindate_all_string + '||' + article_title)
return ''
def update_maindate():
today = datetime.date.today()
cur_year = today.year
cur_month = today.month - 1
cur_day = today.day
cur_month_name = CALENDAR[cur_month]
# figure out last day in maindate.all
with open('maindate.all') as file:
final_line = None
for line in file:
if (line != '\n'):
final_line = line
# add from that day to tdoay
date = final_line.split('||')[1].replace(',', '').split()
latest_article_date = datetime.date(int(date[2]), CALENDAR.index(date[0]) + 1, int(date[1]))
with open('maindate.all', 'a') as maindate_file:
if (int((today - latest_article_date).days) > 1):
first_missing_date = latest_article_date + datetime.timedelta(days=1)
for missing_date in daterange(first_missing_date, today):
missing_article = fetch_maindate(missing_date)
if (missing_article != '' and not isinstance(missing_article, tuple)):
print ('MAINDATE||' + missing_article, file=maindate_file)
# add today's featured article
print ('MAINDATE||' + fetch_maindate(today), file=maindate_file)
maindate_file.close()
# check for unfeatured articles in maindate
# eventually write maindate to Wiki
if __name__ == '__main__':
update_maindate()