o
    Zyit]                     @   s   d dl Z d dl T d dlZd dlZdd Zdd Zd*d	d
Zdd Zdd Zd+ddZd+ddZ	dd Z
d+ddZd+ddZd+ddZd+ddZdd Zdd  Zd+d!d"Zd,d$d%Zd+d&d'Zd(d) ZdS )-    N)*c                  C   st   d} d}t j| |ddddj}t|}t|d  tdd	}||d  W d    d S 1 s3w   Y  d S )
Nz#https://ext-api.vasttrafik.se/tokenzgrant_type=client_credentialsz!application/x-www-form-urlencodedzRBasic TVNvTTBacjJvcjIyNU5sMk5Gdzd4TDN6TVRvYTppSFlJOF80ZlhveWQ3VkhRZjJMMjhRY0dYOU1h)Content-TypeAuthorizationdataheadersZaccess_tokenvt_token.txtw)requestsposttextjsonloadsprintopenwrite)urlmsgr   p r   UC:\Users\computer\Desktop\notes\tskylt4.0\server\20260128 - new GTFS loader\sweden.pyvt_get_new_token   s   
"r   c                  C   s6   t dd} |  W  d    S 1 sw   Y  d S )Nr   r)r   read)r   r   r   r   vt_load_token   s   $r   slsec           	   	   C   s  dd }d tjtjddd }tttj	d d tj	d d	 t
|  d
 | d}i }g tt d|| < z	| tjjv rB	 W n   |d d d d tjj| < Y |d D ]`}|d rdt
t|d v rr|d d |d< d |d d  }d|v rd|vrqZ||d tt kr|d d |d d< ||  d |d dd|d |d |d |d d qZt||  d dkr||  tj| | | < ||  S )Nc                 S   sj   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)tsr   r   r   converttime   s   j z'sl_load_departures.<locals>.converttime r!   )kz=true
departuresr      z/departures?)hostargsr1   	timestampZ	stop_areaname
deviationslistmessageu	   inställdu
   inställdaexpectedlineZdesignationiddestinationu   NÄRTRAFIKENu   Närtrf.direction_coder>   r?   r;   r<   r8   )joinrandomchoicesstringascii_lettersr   r   
fetch_datavserversstrr)   r*   	localtimesiteidssiteIdtypelowerappendreplacelen	operators)	siteidoperatorcountryr.   Zrandom_stringZfetched_dataZtemp_departuresinr   r   r   sl_load_departures   s6   6$$rX   c           
      C   sH  t t  tj|  | | d tj k rd S dt t  itj|  | |< td tt	tj
d d tj
d d dd}g }g }|D ]\}|d d	 |d d
  |d d  }z|d d D ]}||d  |}q`W n   Y |dkrz%|d d d d d |d d d  }	d|	v rW qE|	|vr||	 W qE   Y qEqE|S )Nr6   OKr8   r   r2   P   )r3   r4   portpriorityimportance_levelinfluence_levelurgency_levelscopeZ
stop_areasr7   linesz: message_variantsheaderu   Närtrafiken)r)   r*   rJ   rG   rR   deviations_update_delayr   r   r   rF   rH   rO   )
rU   rT   stationr   deviations_listtestrV   
importanceii_deviation_messager   r   r   sl_get_deviations1   s0   . ($(

	rk   c                    s,   t   }tt| fdd|D }|S )Nc                    s   g | ]} | qS r   r   ).0key
dictionaryr   r   
<listcomp>M   s    z%sort_dict_by_keys.<locals>.<listcomp>)sortedkeysdictzip)ro   Zsorted_keysZsorted_dictr   rn   r   sort_dict_by_keysK   s   ru   c           
      C   s   d|  d }t jd|ddid}t|j}g }t|d d D ]\}}|d	 D ]}	| |	d
 v r;||	d dd q(q |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RESULTZTrainMessageZAffectedLocationZExternalDescription
 r8   )
r
   r   r   r   r   	enumeraterO   rP   rG   rR   )
re   rT   rU   r   responser8   resultsxZ	deviationrV   r   r   r   sj_load_deviationsP   s    	r   c                 C   s  t d|  | dkrd} ztddd} W n   Y d}tj }|d}d}tjd	d
}ztt	j
| | |  d dk rEtjd	d
}W n
   tjdd
}Y t d| || }|d}d}d| d | d | d |  d }t|}	t|	d}tjdd|ddid}
t|
j}t t|d d  g }|D ]}|| d d d D ]}z
|d d d }W n   d}Y |d }t|d kr|d! }n|d d }ztt	j tt	j | }W n   z|d"d#}|dd$}W n   Y Y z|d% d d& }t d' W n   |d( d d& }t d) Y |d d d }|d* }|d+ | }|d||d,d-g d.}|sB|| qqt d/t| t|rj| dkrWd} |tt d0t	j
| | | < |S d S )1Nz
Stations: ZVbVbcutf-8rP   r   %H:%M:%S$dateadd(00:00:00)r   hoursr1   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>rv   r   rw   timeoutr   r   i^  ry   r   ZTrainAnnouncementZInformationOwner   0Z
ToLocationr2   r(   Mcu   Malmö Cz	Varberg CZEstimatedTimeAtLocationr'   z- ================== DELAYED =================ZAdvertisedTimeAtLocationZ	SCHEDULEDZCanceledr{   TRAINr=   transport_moder@   RESULTSr5   )r   r   encodedecodedatetimenowstrftime	timedeltarQ   rG   rR   ET
fromstringtostringr
   r   r   r   r   rI   r9   sj_stationsrr   valuesindexrP   rO   r)   r*   rJ   )re   rT   rU   r   now_strr   later	later_strr   rootr}   r1   r~   rV   ri   r<   r>   _timeZ__lineZ	_canceledZ__destination_and_linedepartures_dictr   r   r   sj_load_departuresg   s   


*




(
#
"r   c            	      C   s   d} t jd| ddid}t|j}i }|D ]}|| d d d D ]}|d	 }|d
 }|||< q"qtdd}|t| W d    |S 1 sKw   Y  |S )Na*  <REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='TrainStation' schemaversion='1'>
    <FILTER/>
    <INCLUDE>Prognosticated</INCLUDE>
    <INCLUDE>AdvertisedLocationName</INCLUDE>
    <INCLUDE>LocationSignature</INCLUDE>
    </QUERY>
    </REQUEST>rv   r   rw   r   ry   r   ZTrainStationZAdvertisedLocationNameZLocationSignaturezsj_stations.txtr	   )r
   r   r   r   r   r   r   dumps)	r   r}   stationsstations_dictrV   ri   r7   Z
short_namefr   r   r   sj_load_stations   s    	

r   c                 C   sV   t j}i }|D ]!}|d d  | v r(|}|| }|t j| |  |< |||< q|S )Nr   )rG   r   rN   sitesrT   re   rU   r   search_listr   r7   	shortnamer   r   r   	sj_lookup   s   r   c              
   C   s:  t | |dd}|dddddd}|dd	d
ddd}d}d| d }zt|d|}W n tyM } zt d| W Y d }~nd }~ww t | z2t|}i }|d D ]#}|d d |d d  }	|d dd  }
|
tj| |  |	< |
||	< q^|W S  ty } zt d| W Y d }~d S d }~ww )Nr{   %20   öo   äa   å   ÖO   Ä   Å journeyplanner.integration.sl.sez/v2/stop-finder?name_sf=z &any_obj_filter_sf=2&type_sf=anyrZ   Error. Z	locationsZdisassembledNamez, parentr7   r=   Error: r   rP   rF   	Exceptionr   r   rG   r   )rT   re   rU   url1Zurl2r   er   r   r7   rS   r   r   r   	sl_lookup   s0   $ 

r   c           	   
   C   s   t | |dd}z
tddd| }W n ty+ } zt d| W Y d }~nd }~ww t | z*t|}i }|d D ]}|d }|d	 d
d  }|tj| |  |< |||< q<|W S  tyr } zt d| W Y d }~d S d }~ww )Nr{   r   r   rZ   zE/v1/typeahead.json?key=2ab4d947683c4a60b1a90fd2324eb4c5&searchstring=r   ResponseDataNameZSiteIdr   r   r   )	rT   re   rU   r   r   r   r   r7   rS   r   r   r   
_sl_lookup	  s(   $ 

r   c                 C   s  d}d|  d }t j|ddtj ddj}t|}d|v r2d	|d d
 v r2t  t t_t	d |d }g }d}|D ]w}z\	 z	|d rHW W q<W n   Y z|d d d }t	d W n   |d d d }t	d Y |d d d d||d d d 
dd|d d d 
dd dg d }	||	 W q< ty }
 zt	d!|
 W Y d }
~
 d S d }
~
ww t|r|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   ZisCancelledZestimatedTimer'   Z	ESTIMATEDZplannedTimeZPLANNEDZserviceJourneyZdirectionDetailsZshortDirectionr   r<   Z	shortName-.ZtransportModeZferryZshipr   r@   r   r1   ZSuccess)r
   getrG   tokenr   r   r   r   r   r   rP   upperrO   r   rQ   rR   )gidrT   rU   r   r   r~   counterr1   Zavailable_time
new_recordr   r   r   r   vt_load_departures!  sR   

4

r   c           	      C   s   d|  d }t j|ddtj ddj}t|}d|v r4td d	|d d
 v r4t  t	 t_td |d }i }i }|D ]5}z| d d 
 |d 
 v r[|d }|d }|||< W q> tys } ztd| W Y d }~q>d }~ww |S )Nz8https://ext-api.vasttrafik.se/pr/v4/locations/by-text?q=z&limit=30&offset=0r   r   r   r   r   ZFAULTr   r   r   r~   r   r7   r   r   )r
   r   rG   r   r   r   r   r   r   r   rN   r   )	_stringr   r   r~   r   stopsr7   r   r   r   r   r   	vt_lookup[  s.   
$ r   c                  C   s   d} t jd| ddid}t|j}|d d d }|d	 }i }|D ].}t|d
 d d }|d
 d d }t|d
 d d }|d
 d d }	|||< |||	< q"tdd}
|
t| W d    |S 1 sjw   Y  |S )Nz<REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='FerryRoute' schemaversion='1.2'>
    <FILTER/>
    <INCLUDE>Harbor</INCLUDE>
    
    
    </QUERY>
    </REQUEST>rv   r   rw   r   rx   ry   r   Z
FerryRouteZHarborIdr   r2   zferries_stations.txtr	   )	r
   r   r   r   r   rI   r   r   r   )r   r}   r   Zstationlistr   rV   Zid0Zname0Zid1Zname1r   r   r   r   ferries_load_stationsq  s&   	

r   c                 C   sV   t d| t }i }|D ]}|d d  | v r$|}|| }|||< qt | |S )Nz	Station: r   )r   r   rN   r   r   r   r   ferries_lookup  s   
r   fec                 C   s^  t j  }|d}d}t jdd}t jdd}td| || }|d}d}d| d	 | d
 }t|}	t|	d}t	j
dd|ddid}
t|
j}|d d d d }g }|D ]/}t|d d | kr|d roq^|d d d }|d d }|d|dddg d}|| q^td|t| t|r|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   rv   r   rw   r   rx   ry   r   ZFerryAnnouncementZ
FromHarborr   ZDeletedZDepartureTimer'   ZToHarborr   r   SHIPr   r@   r   r5   )r   r   r   r   r   r   r   r   r   r
   r   r   r   r   rI   rO   rQ   r)   r*   rJ   rG   rR   )re   rT   rU   r   r   r   r   r   r   r   r}   r1   r~   rV   r   r>   r   r   r   r   ferries_load_departures  sT   






"r   c                 C   s   d}d| d | }t |j}zt|}|d }W n ty2 } zt| W Y d }~dS d }~ww t| i }|D ]*}z|d d }	|d d }
|
||	< W q; tye } z
t| W Y d }~q;d }~ww |S )	N$f915361c-f370-4ee6-a371-2110e6a79b92z1https://api.resrobot.se/v2.1/location.name?input=&format=json&accessId=ZstopLocationOrCoordLocationr   ZStopLocationr7   ZextId)r
   r   r   r   r   r   r   )rT   re   rU   rm   r   r   r   r   r   r7   rS   r   r   r   resrobot_lookup  s.   
r   c                 C   sn  d}d}d|  d | }t |j}zt|}W n ty0 } zt| W Y d }~dS d }~ww t| |}g }t| |d D ]T}	z+t|	d d }
t|	d	 }|	d
 dd }t|	d }|d | }t|
|| W n ty } z
t| W Y d }~nd }~ww |d||
ddg d}|	| qAtd|t
| t
|r|tt dtj| | | < |S d S )Nr   r   z/https://api.resrobot.se/v2.1/departureBoard?id=r   r   Z	DepartureZProductAtStopZdisplayNumberr)   	direction(r   dateTBUSr   r@   r   r5   )r
   r   r   r   r   r   r   rI   splitrO   rQ   r)   r*   rJ   rG   rR   )re   rT   rU   rm   r   r   r   r1   r~   rV   r=   r   r   _dater   r   r   r   resrobot_load_departures  sN   "r   )r   r   )r   )r   r   )rG   rB   rD   r   r   rX   rk   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s*    



`



:
!

>