# -*- coding: utf-8 -*-
# wymagana wersja pythona >=2.4 <3.0
import urllib2, re, codecs, time
from operator import itemgetter
def getPrzystanekId(przystanek):
global przystankiId
global autoId
przystanek = ' '.join(przystanek.split()) # usuwanie nadmiarowych spacji
if przystanek.endswith(u' NŻ') : # usuwanie NŻ
przystanek = przystanek[:-3]
if przystanek.endswith(u' (NŻ)') : # usuwanie (NŻ)
przystanek = przystanek[:-5]
try :
id = przystankiId[przystanek]
except KeyError:
przystankiId[przystanek]=autoId
id = autoId
autoId += 1
#raise KeyError('nie znaleziono przystanku: ', arg, '->', przystanek)
return (unicode(id), przystanek)
def sortedDictByVal(adict):
return sorted(adict.items(), key = itemgetter(1))
def rozkladyOut (fname, rozklady, first, last) :
global godziny1Re
global godziny2Re
global godziny3Re
global godziny4Re
global godziny5Re
global godziny6Re
global godziny7Re
global powszedniRe
global sobotyRe
global swietaRe
global waznRe
global sourceEncoding
global przystankiId
f = codecs.open(fname, 'w', targetEncoding)
f.write(linia+'\n')
f.write(first+'\n')
f.write(last+'\n')
for r in rozklady : # dla kazdego przystanku danej linii w danym kierunku
id = getPrzystanekId(unicode(r.group('przystanek'),sourceEncoding))[0]
f.write( id + unicode('\n') )
html = urllib2.urlopen(baseurl+dir+r.group('url')).read()
pow = powszedniRe.match(html)
sob = sobotyRe.match(html)
sw = swietaRe.match(html)
ptSobSw = ptSobSwRe.match(html)
czwPtSobSw = czwPtSobSwRe.match(html)
if (czwPtSobSw is not None) :
ptSobSw = pow = sob = sw = None
if (pow is not None) & (sob is None) & (sw is None) : # powszednie
regExp = godziny1Re
elif (pow is not None) & (sob is None) & (sw is not None) : # powszednie i swieta
regExp = godziny2Re
elif (pow is not None) & (sob is not None) & (sw is not None) : #powszednie, soboty i swieta
regExp = godziny3Re
elif (pow is None) & (sob is None) & (sw is not None) : # swieta
regExp = godziny4Re
elif (pow is None) & (sob is not None) & (sw is not None) : # soboty i swieta
regExp = godziny5Re
elif (pow is not None) & (sob is not None) & (sw is None) : # powszednie i soboty
regExp = godziny6Re
elif (pow is None) & (sob is not None) & (sw is None) : # soboty
regExp = godziny7Re
elif (ptSobSw is not None) : # soboty i swieta (613)
regExp = godziny4Re # wyrazenie dla swiat
elif (czwPtSobSw is not None) :
regExp = godziny3Re # wyrazenie dla powszednie, soboty i swieta
else :
raise NameError('inna tablica rozkladow:', pow, sob, sw)
godziny = regExp.finditer(html)
wazn = waznRe.search(html)
wazn = wazn.group('data')
powszednie = []
soboty = []
swieta = []
for g in godziny :
try :
for minuty in g.group('m_pow').split() :
if (minuty != '-' ) :
#przypis = minuty[2:] # na przyszlosc...
powszednie.append((g.group('h_pow') + minuty[:2]).zfill(4))
except IndexError:
pass
try :
for minuty in g.group('m_sob').split() :
if (minuty != '-' ) :
#przypis = minuty[2:]
soboty.append((g.group('h_sob')+minuty[:2]).zfill(4))
except IndexError:
pass
try :
for minuty in g.group('m_sw').split() :
if (minuty != '-' ) :
#przypis = minuty[2:]
swieta.append((g.group('h_sw')+minuty[:2]).zfill(4))
except IndexError:
pass
powszednie.sort()
soboty.sort()
swieta.sort()
powszednie = ','.join(powszednie)
soboty = ','.join(soboty)
swieta = ','.join(swieta)
if not powszednie :
powszednie = 'BRAK'
if not soboty :
soboty = 'BRAK'
if not swieta :
swieta = 'BRAK'
if (pow is None) & (sob is None) & (sw is None) & (ptSobSw is not None) : #613 - wyrazenie dla swiat, a rozklad wspolny dla sobot i swiat
soboty = swieta
f.write(powszednie+"\n")
f.write(soboty+"\n")
f.write(swieta+"\n")
print '.',
f.write(getPrzystanekId(last)[0])
f.close()
return time.strptime(wazn,'%d.%m.%Y')
baseurl = 'http://rozklady.mpk.krakow.pl/'
dir = ''
file = ''
sourceEncoding = 'iso-8859-2"'
targetEncoding = 'utf-8'
anchorUrlRe = re.compile('[^\"]*)\".*>(?P