
    Zyit]                         d dl Z d dl T d dlZd dlZd Zd ZddZd Zd	 Zdd
ZddZ	d Z
ddZddZddZddZd Zd ZddZddZddZd ZdS )    N)*c                  >   d} d}t                               | |ddd          j        }t                              |          }t          |d                    t          dd	          5 }|                    |d                    d d d            d S # 1 swxY w Y   d S )
Nz#https://ext-api.vasttrafik.se/tokenzgrant_type=client_credentialsz!application/x-www-form-urlencodedzRBasic TVNvTTBacjJvcjIyNU5sMk5Gdzd4TDN6TVRvYTppSFlJOF80ZlhveWQ3VkhRZjJMMjhRY0dYOU1h)Content-TypeAuthorizationdataheadersaccess_tokenvt_token.txtw)requestsposttextjsonloadsprintopenwrite)urlmsgr   ps       Uc:\Users\computer\Desktop\notes\tskylt4.0\server\20260128 - new GTFS loader\sweden.pyvt_get_new_tokenr      s    
/C
-C==3Ad  wK  1L  1L=  M  M  RD::dD	$~
	nc	"	" &a	^$%%%& & & & & & & & & & & & & & & & & &s   )BBBc                  ~    t          dd          5 } |                                 cd d d            S # 1 swxY w Y   d S )Nr   r)r   read)r   s    r   vt_load_tokenr      s~    	nc	"	" avvxx                 s   266slsec           	      R   d }d                     t          j        t          j        d                    dz   }t
                              t          t          j	        d         d         t          j	        d         d         t          |           z   d	z   |z   
                    }i }g t                              t                                                    d|| <   	 | t          j        j        v r	 n3#  |d         d         d         d         t          j        j        | <   Y nxY w|d         D ]0}|d         rqdt          t!          |d                             v r|d         d         |d<   d                     |d         d                                                   }d|v rd|vr| ||d                   t                              t                                                    k    rp|d         d         |d         d<   ||          d                             |d                             dd          |d         |d         |d         |d         d           2t)          ||          d                   dk    r!||          t          j        |         |         | <   ||          S )Nc                 t   t                               t                               t          | d d                   t          | dd                   t          | dd                   t          | dd                   t          | dd	                   t          | d
d                   dddf	                    S )N            
                     r   )timemktimestruct_timeint)tss    r   converttimez'sl_load_departures.<locals>.converttime   s    D,<,<c"RaR&kk#bQRSTQTg,,WZ[]^_`b^b[cWdWdehiklnoqlqiresestwxz{}  A  |A  yB  uC  uC  DG  HJ  KM  NP  KP  HQ  DR  DR  ST  UW  XZ  >[  -\  -\  !]  !]  ]     r&   )kz=true
departuresr      z/departures?)hostargsr7   	timestamp	stop_areaname
deviationslistmessageu	   inställdu
   inställdaexpectedlinedesignationiddestinationu   NÄRTRAFIKENu   Närtrf.direction_coderF   rG   rB   rC   r?   )joinrandomchoicesstringascii_lettersr   r   
fetch_datavserversstrr.   r/   	localtimesiteidssiteIdtypelowerappendreplacelen	operators)	siteidoperatorcountryr3   random_stringfetched_datatemp_departuresins	            r   sl_load_departuresrc      s    ]  ]  ]GGFN6+?2FFFGG'QM::jai.Ea.HqyYeOfghOilopvlwlwOw  {I  PI  LY  PY  Z  Z  Z  [  [LO,.T[[IYIY=Z=Z\\OFZQY%%%Y|L'A!'D['QRX'YAIV$$$,' 3 3\? 	DT!L/223333qWXGYQ|_,	23399;;Aa(9(98;q}%%DNN4D4D(E(EEEi6AfIdOF#L188-HXH`H`aopzH{H{%&'7%8 }V9!"<	:2 :2 3 3 3
 ?6"<011A551@1HGX&v.6""s   C4 4.D$c                    t                               t                                                     t          j        |          |         |         d         t          j        z   k     rd S dt                               t                                                     it          j        |          |         |<   t          d           t                              t          t          j
        d         d         t          j
        d         d         d                    }g }g }|D ]}|d         d	         |d         d
         z  |d         d         z  }	 |d         d         D ]}|                    |d                    |} n#  Y nxY w|dk    rY	 |d         d         d         d         dz   |d         d         d         z   }	d|	v r|	|vr|                    |	           #  Y xY w|S )Nr<   OKr?   r   r8   P   )r9   r:   portpriorityimportance_levelinfluence_levelurgency_levelscope
stop_areasr>   linesz: message_variantsheaderu   Närtrafiken)r.   r/   rR   rO   rZ   deviations_update_delayr   r   r   rN   rP   rW   )
r]   r\   stationr   deviations_listtestra   
importanceii_deviation_messages
             r   sl_get_deviationsrx   1   s   {{4>>##$$q{7';H'Eg'N{'[^_^w'wwwyy/:4;;t~~GWGW;X;X.YAK"7+	$KKK::jai&=a&@qyQ]G^_`GahjkkkllDOD  z]#56:GX9YY\]^h\ijy\zz
	j.  BvJ''' 	>>%&wZ%8%;F%Cd%JQOaMbcdMefnMo%o"!%777)_<<#**+=>>>DD  s   .E<<F 
6GGGc                      t                                                     }t          t          | fd|D                                 }|S )Nc                      g | ]
}|         S  r{   ).0key
dictionarys     r   
<listcomp>z%sort_dict_by_keys.<locals>.<listcomp>M   s    (P(P(PSC(P(P(Pr4   )sortedkeysdictzip)r~   sorted_keyssorted_dicts   `  r   sort_dict_by_keysr   K   sL    **++Ks;(P(P(P(PK(P(P(PQQRRKr4   c                    d| z   dz   }t                               d|ddi          }t                              |j                  }g }t          |d         d                   D ]I\  }}|d	         D ];}	| |	d
         v r/|                    |	d                             dd                     <J|t          j	        |         |         |          d<   |S )Nz<REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='TrainMessage' schemaversion='1.3'>
    <FILTER>
    <IN name='AffectedLocation' value='zL'/>
    </FILTER>
    <EXCLUDE>Deleted</EXCLUDE>
    </QUERY>
    </REQUEST>3https://api.trafikinfo.trafikverket.se/v2/data.jsonr   text/xmlr   RESPONSERESULTTrainMessageAffectedLocationExternalDescription
 r?   )
r   r   r   r   r   	enumeraterW   rX   rO   rZ   )
rr   r\   r]   r   responser?   resultsx	deviationra   s
             r   sj_load_deviationsr   P   s   + ,3	34	C }}RY\gu  xB  gC}  D  DHHM**JG!*Z"8"BCC K K9>* 	K 	KA1/011q!67??SIIJJJ		K =DAK"7+L9Nr4   c                 b   t          d|            | dk    rd} t                              dd                              d          } n#  Y nxY wd}t          j                                        }|                    d          }d}t                              d	
          }	 t          t          j
        |         |         |          d                   dk     rt                              d	
          }n"#  t                              d
          }Y nxY wt          d|           ||z   }|                    d          }d}d|z   dz   |z   dz   |z   dz   | z   dz   }t                              |          }	t                              |	                              d          }t                              dd|ddi          }
t                               |
j                  }t          t'          |          d d                    g }|D ]}||         d         d         d         D ]}|d         d d         }n	#  d}Y nxY w|d         }t          |          d k    r	|d!         }n|d         d         }t)          t          j                                                  t)          t          j                                                                      |                   }n<#  	 |                    d"d#          }|                    dd$          }n#  Y nxY wY nxY w	 |d%         d d&         }t          d'           n&#  |d(         d d&         }t          d)           Y nxY w|d         d d         }|d*         }|d+z   |z   }|d||d,d-g d.}|s|                    |           t          d/t          |                     t          |          rW| dk    rd} |t6                              t6                                                    d0t          j
        |         |         | <   |S d S )1Nz
Stations: VbVbcutf-8rX   r   %H:%M:%S$dateadd(00:00:00)r$   hoursr7   r"   ) --------------------------------------- $dateadd(03:00:00)a  <REQUEST>
                <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0' />
                <QUERY objecttype='TrainAnnouncement' orderby='AdvertisedTimeAtLocation' schemaversion='1'>
                    <FILTER>
                    <AND>
                        <OR>
                            <AND>
                                <GT name='AdvertisedTimeAtLocation' value='zP' />
                                <LT name='AdvertisedTimeAtLocation' value='zn' />
                            </AND>
                            <GT name='EstimatedTimeAtLocation' value='z_' />
                        </OR>
                        <EQ name='LocationSignature' value='a7  ' />
                        <EQ name='ActivityType' value='Avgang' />
                    </AND>
                    </FILTER>
                    <INCLUDE>InformationOwner</INCLUDE>
                    <INCLUDE>Canceled</INCLUDE>
                    <INCLUDE>AdvertisedTimeAtLocation</INCLUDE>
                    <INCLUDE>TrackAtLocation</INCLUDE>
                    <INCLUDE>FromLocation</INCLUDE>
                    <INCLUDE>EstimatedTimeAtLocation</INCLUDE>
                    <INCLUDE>ToLocation</INCLUDE>
                </QUERY>
                </REQUEST>r   r   r   timeoutr   r	   i^  r   r   TrainAnnouncementInformationOwner   0
ToLocationr8   r-   Mcu   Malmö Cz	Varberg CEstimatedTimeAtLocationr,   z- ================== DELAYED =================AdvertisedTimeAtLocation	SCHEDULEDCanceledr   TRAINrE   transport_moderH   RESULTSr;   )r   r   encodedecodedatetimenowstrftime	timedeltarY   rO   rZ   ET
fromstringtostringr   r   r   r   r   rQ   r@   sj_stationsr   valuesindexrX   rW   r.   r/   rR   )rr   r\   r]   r   now_strr   later	later_strr   rootr   r7   r   ra   rv   rC   rF   _time__line	_canceled__destination_and_linedepartures_dicts                         r   sj_load_departuresr   g   s   	,   $%88GY//66w??DDG




!
!Cll:&&G"GQ''E1q{7#H-g6|DEEIIS[SeSelmSeSnSn50X''a'00UUU	
5e<<<%KEz**I$IO RYY\OO QZZ\J
J MT
TW@@ CJJMC2 ==D
++d


"
"7
+
+C}}R[\cfq  BL  qM}  N  NHHM**J	#j//$3$
   G !> !>Q-)!,-@A  	>  	>B-.rr23DDD\*K;!##;r?[[ "< 0 3+#AM$6$6$8$899$q}?S?S?U?U:V:V:\:\]h:i:ij"-"5"5d:"F"FK"-"5"5eK"H"HKK#45crc:EFFFF#56ss;k""""" *+BQB/F:I%03%6%?"-803+0.2W'M'M,.	0 0O
 =gnn_===A 	>F 
)c'll###
7|| etWBIY]YdYdeieseseueuYvYv2w2wGX&w/	 sU   .A A"AC3 3D)H::I 5A-K##L&,LLL	L M  !M#c                     d} t                               d| ddi          }t                              |j                  }i }|D ]4}||         d         d         d         D ]}|d	         }|d
         }|||<   5t          dd          5 }|                    t                              |                     d d d            n# 1 swxY w Y   |S )Na*  <REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='TrainStation' schemaversion='1'>
    <FILTER/>
    <INCLUDE>Prognosticated</INCLUDE>
    <INCLUDE>AdvertisedLocationName</INCLUDE>
    <INCLUDE>LocationSignature</INCLUDE>
    </QUERY>
    </REQUEST>r   r   r   r   r   r   TrainStationAdvertisedLocationNameLocationSignaturezsj_stations.txtr   )r   r   r   r   r   r   r   dumps)	r   r   stationsstations_dictra   rv   r>   
short_namefs	            r   sj_load_stationsr      s3   C }}RY\gu  xB  gC}  D  DHzz(-((HM - -1+h'*>: 	- 	-B./D/0J",M$		-
 
	%	% +	

=))***+ + + + + + + + + + + + + + +s   
.CCCc                     t           j        }i }|D ]\}|d d                                         |                                v r*|}||         }|t           j        |         |          |<   |||<   ]|S )Nr#   )rO   r   rV   sitesr\   rr   r]   r   search_listr   r>   	shortnames           r   	sj_lookupr      s}     } 	. 	.Hrr{  ""hnn&6&666 N	3< *40$-D!r4   c                     t          |           |                    dd          }|                    dd                              dd                              dd          }|                    dd	                              d
d                              dd          }d}d|z   dz   }t          |d|          }n'# t          $ r}t          d|           Y d }~nd }~ww xY wt          |           	 t                              |          }i }|d         D ]L}|d         dz   |d         d         z   }	|d         dd          }
|
t          j        |         |          |	<   |
||	<   M|S # t          $ r}t          d|           Y d }~d S d }~ww xY w)Nr   %20   öo   äa   å   ÖO   Ä   Å journeyplanner.integration.sl.sez/v2/stop-finder?name_sf=z &any_obj_filter_sf=2&type_sf=anyrf   Error. 	locationsdisassembledNamez, parentr>   rE   Error: r   rX   rN   	Exceptionr   r   rO   r   )r\   rr   r]   url1url2r   er   r   r>   r[   s              r   	sl_lookupr      s   	'NNNooc5))GoodC((00c::BB4MMGoodC((00c::BB4MMG-D%/2TTDD"d++...5A.........	$KKKzz$[) 	' 	'H./$6(9KF9SSDd^BCC(F/5AGGX&t, &K    is1   ,B> >
C"CC"5A2E( (
F2FFc                    t          |           |                    dd          }t          ddd|z             }n'# t          $ r}t          d|           Y d }~nd }~ww xY wt          |           	 t                              |          }i }|d         D ]:}|d         }|d	         d
d          }|t          j        |         |          |<   |||<   ;|S # t          $ r}t          d|           Y d }~d S d }~ww xY w)Nr   r   r   rf   zE/v1/typeahead.json?key=2ab4d947683c4a60b1a90fd2324eb4c5&searchstring=r   ResponseDataNameSiteIdr   r   r   )	r\   rr   r]   r   r   r   r   r>   r[   s	            r   
_sl_lookupr   	  sC   	'NNNooc5))G>  EL  OV  EV  W  W...5A.........	$KKKzz$^, 	' 	'HF#Dh',F/5AGGX&t, &K   is.   ; 
AAA2A C 
C8C33C8c           	         d}d| z   dz   }t                               |ddt          j        z   d          j        }t
                              |          }d|v rEd	|d         d
         v r5t                       t                      t          _        t          d           |d         }g }d}|D ]}	 	 	 |d         rn#  Y nxY w	 |d         d d         }t          d           n&#  |d         d d         }t          d           Y nxY w|d         d         d         d||d         d         d         
                    dd          |d         d         d         
                    dd                                          dg d }	|                    |	           # t          $ r}
t          d!|
           Y d }
~
 d S d }
~
ww xY wt          |          r2|t          j        |         |         |          d"<   t          d#           |S d S )$Nr   z/https://ext-api.vasttrafik.se/pr/v4/stop-areas/zM/departures?timeSpanInMinutes=60&limit=110&maxDeparturesPerLineAndDirection=5
text/plainBearer acceptr   r	   faultInvaliddescription*-----------------Invalid token------------r   r   isCancelledestimatedTimer,   	ESTIMATEDplannedTimePLANNEDserviceJourneydirectionDetailsshortDirectionr   rC   	shortName-.transportModeferryshipr   rH   r   r7   Success)r   getrO   tokenr   r   r   r   r   r   rX   upperrW   r   rY   rZ   )gidr\   r]   r   r   r   counterr7   available_time
new_recordr   s              r   vt_load_departuresr  !  s   G @#
E  I\  \C<<iZ[ZaNa%b%b<cchD::dD$Wm444#ooAG>???	?DGG # #
"	.m,6h6DD!!+O!<SbS!Ak""""!!+M!:3B3!?i     *45E*FGY*Z[k*l+.%3(23C(DV(L[(Y(a(abefi(j(j  ~H  IY  ~Z  [a  ~b  cr  ~s  ~{  ~{  |C  DJ  ~K  ~K  ~Q  ~Q  ~S  ~S  "T  "T&(	* *J NN:&&&&  	 	 	)QFFFFFF	 7|| <CGX&s+L9i sI   1F3B=<F=C?FC%$F%!DBF
G&F==Gc                 d   d| z   dz   }t                               |ddt          j        z   d          j        }t
                              |          }d|v rTt          d           d	|d         d
         v r5t                       t                      t          _        t          d           |d         }i }i }|D ]u}	 | d d         
                                |d         
                                v r|d         }|d         }|||<   O# t          $ r}t          d|           Y d }~nd }~ww xY w|S )Nz8https://ext-api.vasttrafik.se/pr/v4/locations/by-text?q=z&limit=30&offset=0r   r   r   r   r   FAULTr   r   r   r   r#   r>   r  r   )r   r  rO   r  r   r   r   r   r   r   rV   r   )	_stringr   r   r   r   stopsr>   r  r   s	            r   	vt_lookupr  [  sH   
H7
RUm
mC<<iZ[ZaNa%b%b<cchD::dD$gWm444#ooAG>???	?DGK 3 3	3rr{  ""eFm&9&9&;&;;; =D,C(+K%222uY222222222s   =AD		
D-D((D-c                  ^   d} t                               d| ddi          }t                              |j                  }|d         d         d         }|d	         }i }|D ]v}t          |d
         d         d                   }|d
         d         d         }t          |d
         d         d                   }|d
         d         d         }	|||<   |||	<   wt          dd          5 }
|
                    t                              |                     d d d            n# 1 swxY w Y   |S )Nz<REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='FerryRoute' schemaversion='1.2'>
    <FILTER/>
    <INCLUDE>Harbor</INCLUDE>
    
    
    </QUERY>
    </REQUEST>r   r   r   r   r   r   r   
FerryRouteHarborIdr   r8   zferries_stations.txtr   )	r   r   r   r   r   rQ   r   r   r   )r   r   r   stationlistr   ra   id0name0id1name1r   s              r   ferries_load_stationsr#  q  sv   C }}RY\gu  xB  gC}  D  DHzz(-((H:&x03Kl+KM # #!H+a.&''(Av&!H+a.&''(Av&"e"e 
$c	*	* +a	

=))***+ + + + + + + + + + + + + + +s   (.D""D&)D&c                     t          d|           t                      }i }|D ]A}|d d                                         |                                v r|}||         }|||<   Bt          |           |S )Nz	Station: r#   )r   r#  rV   r   s           r   ferries_lookupr%    s    k7### &'' 	. 	.Hrr{  ""hnn&6&666 N	 %.D!kr4   fec                 b   t           j                                         }|                    d          }d}t                               d          }t                               d          }t	          d|           ||z   }|                    d          }d}d|z   d	z   |z   d
z   }t
                              |          }	t
                              |	                              d          }t          
                    dd|ddi          }
t                              |
j                  }|d         d         d         d         }g }|D ]h}t          |d         d                   | k    rG|d         r*|d         d d         }|d         d         }|d|dddg d}|                    |           it	          d|t!          |                     t!          |          rO|t"                              t"                                                    d t(          j        |         |         | <   |S d S )!Nr   r   r$   r   r"   r   r   aV  <REQUEST>
                <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0' />
                <QUERY objecttype='FerryAnnouncement' schemaversion='1.2'>
                <FILTER>
                    <AND>
                        <OR>
                            <AND>
                                <GT name='DepartureTime' value='zE' />
                                <LT name='DepartureTime' value='a  ' />
                            </AND>
                        </OR>
                        
                    </AND>
                    </FILTER>
    
               <INCLUDE>Deleted</INCLUDE>
               <INCLUDE>DepartureTime</INCLUDE>
                <INCLUDE>FromHarbor</INCLUDE>
                <INCLUDE>ToHarbor</INCLUDE>
                </QUERY>
                </REQUEST>r   r   r   r   r   r   r   r   FerryAnnouncement
FromHarborr  DeletedDepartureTimer,   ToHarborr   r   SHIPr   rH   r   r;   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   rW   rY   r.   r/   rR   rO   rZ   )rr   r\   r]   r   r   r   r   r   r   r   r   r7   r   ra   r   rF   r   s                    r   ferries_load_departuresr.    s\    



!
!Cll:&&G"GQ''EQ''E	
5e<<<%KEz**I$ID GNNQDD FOOQC* ==D
++d


"
"7
+
+C}}R[\cfq  BL  qM}  N  NHHM**JJ'1!45HIJG , ,qt$%%00|%Xo&ss+EJ-/K .903+0.1F'K'K,.	0 0O
 NN?+++ 
)gs7||,,,
7|| BIY]YdYdeieseseueuYvYv2w2wGX&w/ r4   c                    d}d|z   dz   |z   }t                               |          j        }	 t                              |          }|d         }n'# t
          $ r}t          |           Y d }~dS d }~ww xY wt          |           i }|D ]J}	 |d         d         }	|d         d         }
|
||	<   %# t
          $ r}t          |           Y d }~Cd }~ww xY w|S )	N$f915361c-f370-4ee6-a371-2110e6a79b92z1https://api.resrobot.se/v2.1/location.name?input=&format=json&accessId=stopLocationOrCoordLocationr   StopLocationr>   extId)r   r  r   r   r   r   r   )r\   rr   r]   r}   r   r   r   r   r   r>   r[   s              r   resrobot_lookupr5    s   
0C
=
GJb
beh
hC<<!Dzz$12   asssss 
$KKKK  	N+F3Dn-g6F &K 	 	 	!HHHHHHHH	s/   "A 
A5A00A5!B00
C:CCc                    d}d}d| z   dz   |z   }t                               |          j        }	 t                              |          }n'# t
          $ r}t          |           Y d }~dS d }~ww xY wt          |           |}g }t          |           |d         D ]}		 t          |	d         d                   }
t          |	d	                   }|	d
                             d          d         }t          |	d                   }|dz   |z   }t          |
||           n&# t
          $ r}t          |           Y d }~nd }~ww xY w|d||
ddg d}|	                    |           t          d|t          |                     t          |          rO|t                              t                                                    dt          j        |         |         | <   |S d S )Nr   r0  z/https://api.resrobot.se/v2.1/departureBoard?id=r1  r   	DepartureProductAtStopdisplayNumberr.   	direction(r   dateTBUSr   rH   r   r;   )r   r  r   r   r   r   r   rQ   splitrW   rY   r.   r/   rR   rO   rZ   )rr   r\   r]   r}   r   r   r   r7   r   ra   rE   r   r:  _dater   s                  r   resrobot_load_departuresrA    s   G
0C
;G
CD\
\_b
bC<<!Dzz$   asssss 
$KKKJG	*$ ( (		Q'899B&	NNE+,,S11!4I&	NNECK%'E"eY'''' 	 	 	!HHHHHHHH	 *3-0(-+-$F$F)+	- -
 	'''' 
)gs7||,,,
7|| BIY]YdYdeieseseueuYvYv2w2wGX&w/ s0   A 
A/A**A/A?D
E)D==E)r   r   )r   )r&  r   )rO   rJ   rL   r   r   rc   rx   r   r   r   r   r   r   r   r  r  r#  r%  r.  r5  rA  r{   r4   r   <module>rB     s            & & &  
# # # #8  4  
   .\ \ \ \@  .       6   08 8 8 8t  ,  B   $< < < <|   .1 1 1 1 1r4   