New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Участник:JaroslavleffBot/JaroslavleffBot-dates-ru.py — Википедия

Участник:JaroslavleffBot/JaroslavleffBot-dates-ru.py

Материал из Википедии — свободной энциклопедии

# -*- coding: utf-8 -*-

# Добавляет в начало статей о датах чего-нибудь

import sys, os
import time, datetime
import codecs
import socket
import re

import wikipedia, config

site=None

monthNameGen = [
                None,
                u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня',
                u'июля', u'августа', u'сентября', u'октября', u'ноября', u'декабря'
               ]

monthDaysAmount = [
                    None,
                    31,29,31,30,31,30,
                    31,31,30,31,30,31
                  ]

monthDaysAmountNormal = [
                            0,
                            31, 28, 31, 30, 31, 30,
                            31, 31, 30, 31, 30, 31
                        ]

monthDaysAmountLeap =   [
                            0,
                            31, 29, 31, 30, 31, 30,
                            31, 31, 30, 31, 30, 31
                        ]

#

def report(text = ""):
    wikipedia.output(text)

def getDatePageTitle(dd, mm):
    return "%d %s" % (dd, monthNameGen[mm])

def checkIfAlreadyContainsHeader(text, dd, mm):
#    regexp = getDatePageTitle(dd, mm) + "[\s ]|( )"
#    if (re.compile(getDatePageTitle(dd, mm) + "( | )" + "—|-" +
    report(u"Checking for \"" + getDatePageTitle(dd, mm) + u"\" in article text...")
    regexp = u"(''')" + \
             getDatePageTitle(dd, mm) + \
             u"(''')" + \
             u"([\s ]|( ))((-)|(—))([\s ]|( ))"
    return re.compile(regexp).search(text)

def addHeader(text, dd, mm):
    return compileHeader(dd, mm) + u"\n\n" + text

def isLeapDay(dd, mm):
    if (dd == 29) and (mm == 2):
        return True
    else:
        return False

def isBeforeLeapDay(dd, mm):
    if isLeapDay(dd, mm):
        return False
    else:
        if mm > 2:
            return False
        else:
            return True

def getRightForm(number, formSingle, formDouble, formPlural):
    if ((number%100) > 10) and ((number%100) < 20):
        return formPlural
    else:
        if ((number%10) == 1):
            return formSingle
        else:
            if ((number%10) >= 2) and ((number%10) <= 4):
                return formDouble
            else:
                return formPlural

def getEnding(number):
    if ((number%100) > 10) and ((number%100) < 20):
        return u"ый"
    else:
        if ((number%10) == 1):
            return u"ый"
        if ((number%10) == 2):
            return u"ой"
        if ((number%10) == 3):
            return u"ий"
        if ((number%10) == 4):
            return u"ый"
        if ((number%10) == 5):
            return u"ый"
        if ((number%10) == 6):
            return u"ой"
        if ((number%10) == 7):
            return u"ой"
        if ((number%10) == 8):
            return u"ой"
        if ((number%10) == 9):
            return u"ый"
        if ((number%10) == 0):
            if ((number%100) == 0):
                return u"ый"
            if ((number%100) == 10):
                return u"ый"
            if ((number%100) == 20):
                return u"ый"
            if ((number%100) == 30):
                return u"ый"
            if ((number%100) == 40):
                return u"ой"
            if ((number%100) == 50):
                return u"ый"
            if ((number%100) == 60):
                return u"ый"
            if ((number%100) == 70):
                return u"ый"
            if ((number%100) == 80):
                return u"ый"
            if ((number%100) == 90):
                return u"ый"

def compileHeader(dd, mm):
    dayOfTheYearNormal = 0
    dayOfTheYearLeap = 0
    daysRemainsNormal = 365
    daysRemainsLeap = 366

    for i in range(1, mm, 1):
        dayOfTheYearNormal += monthDaysAmountNormal[i]
        dayOfTheYearLeap   += monthDaysAmountLeap[i]
        daysRemainsNormal  -= monthDaysAmountNormal[i]
        daysRemainsLeap    -= monthDaysAmountLeap[i]

    dayOfTheYearNormal += dd
    dayOfTheYearLeap   += dd
    daysRemainsNormal  -= dd
    daysRemainsLeap    -= dd

# '''1 января''' - 1-ый день года в [[Григорианский календарь|григорианском календаре]].
# До конца года остаётся 364 дня (365 дней - в [[Високосный год|високосные годы]]).

# '''31 декабря''' - 365-ый день года (366-ой день в [[Високосный год|високосные годы]]). До конца года остаётся 0 дней.

    header = u"'''" + \
             getDatePageTitle(dd, mm) + \
             u"'''" + \
             u" " + u"—" + u" " + \
             str(dayOfTheYearNormal) + \
             u"-" + getEnding(dayOfTheYearNormal) + \
             u" день года"

    if isLeapDay(dd, mm):
        header += u" в [[Григорианский календарь|григорианском календаре]]. До конца года остаётся " + \
                  str(daysRemainsLeap) + u" " + getRightForm(daysRemainsLeap, u"день", u"дня", u"дней") + \
                  u"."
    else:
        if isBeforeLeapDay(dd, mm):
            header += u" в [[Григорианский календарь|григорианском календаре]]. До конца года остаётся " + \
                      str(daysRemainsNormal) + u" " + getRightForm(daysRemainsNormal, u"день", u"дня", u"дней") + \
                      u" (" + \
                      str(daysRemainsLeap) + u" " + getRightForm(daysRemainsLeap, u"день", u"дня", u"дней") + \
                      u" " + u"—" + u" " + \
                      u"в [[Високосный год|високосные годы]])."
        else:
            header += u" (" + \
                      str(dayOfTheYearLeap) + u"-" + getEnding(dayOfTheYearLeap) + \
                      u" в [[Високосный год|високосные годы]]) в [[Григорианский календарь|григорианском календаре]]." + \
                      u" До конца года остаётся " + \
                      str(daysRemainsNormal) + u" " + getRightForm(daysRemainsNormal, u"день", u"дня", u"дней") + \
                      u"."

    return header

def main():
#    wikipedia.output(u"utf-8")
#    wikipedia.output(u"Starting: " + str(datetime.datetime.now()))

    ddStart = 1
    mmStart = 1

    for arg in sys.argv[1:]:
        arg = wikipedia.argHandler(arg, 'JaroslavleffBot-dates-ru')
        if arg:
            if arg.startswith('-dd:'):
                ddStart = int(arg[4:])
            elif arg.startswith('-mm:'):
                mmStart = int(arg[4:])
            else:
                report(u"Unknown argument: " + arg)
                wikipedia.stopme()
                sys.exit(1)

    if not config.never_log:
        wikipedia.activateLog('dates-ru.log')

    site=wikipedia.getSite()

# check if logged in
#
#    if site.loggedin():
#        report(u"Logged in (%s)" % repr(site))
#    else:
#        report(u"Not logged in (%s)" % repr(site))
#        os.exit(2)

    firstRun = True

    print "ddStart=%d"%(ddStart)
    print "mmStart=%d"%(mmStart)

    for mm in range(1,len(monthNameGen),1):
        for dd in range(1,monthDaysAmount[mm]+1,1):
            if firstRun:
                if (dd == ddStart) and (mm == mmStart):
                    firstRun = False
                else:
                    continue

            datePageTitle = getDatePageTitle(dd, mm)
            report("Trying to get page with title = \"" + datePageTitle + "\"")
            datePage = wikipedia.Page(site, title = datePageTitle)
            datePageText = datePage.get()

            global textfile
            textfile = None

            try:
                textfile = codecs.open('dates/%s.txt.old' % datePageTitle, 'w', 'utf-8')
            except IOError:
                pass

            textfile.write(datePageText)
            textfile.flush()

            if checkIfAlreadyContainsHeader(datePageText, dd, mm):
                report(u"Ok, skipping...")
            else:
                report(u"Adding header and saving it...")
                textfile2 = None
                try:
                    textfile2 = codecs.open('dates/%s.txt.new' % datePageTitle, 'w', 'utf-8')
                except IOError:
                    pass
                datePageText2 = addHeader(datePageText, dd, mm)
                textfile2.write(datePageText2)
                textfile2.flush()

                try:
                    status, reason, data = datePage.put(newtext = datePageText2, comment = u"Robot: n-ый день года")
                except wikipedia.EditConflict, error:
                    wikipedia.output(u'ERROR putting page: %s. Giving up.' % error)
                except (socket.error, IOError, wikipedia.PageNotSaved), error:
                    wikipedia.output(u'ERROR putting page: %s. Giving up.' % error)
                else:
                    print status, reason
                    continue

#            break

#        wikipedia.stopme()
#        break

if __name__ == "__main__":
    try:
        main()
    except:
        wikipedia.stopme()
        raise
    else:
        wikipedia.stopme()

    wikipedia.stopme()

 

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu