Jump to content

User:Mibble92/python bot scripts/update maindate.py

From Wikipedia, the free encyclopedia
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()