a
    yiH[                     @   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d0ddZdd Zdd  Zd1d!d"Zd2d$d%Zd3d&d'Zd(d) ZdS )4    N)*c                  C   sr   d} d}t j| |ddddj}t|}t|d  tdd	}||d  W d    n1 sd0    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   /var/www/html/sweden.pyvt_get_new_token   s    
r   c                  C   s6   t dd} |  W  d    S 1 s(0    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 rW n(   |d d d d tjj| < Y n0 |d D ]}|d rdt
t|d v r|d d |d< d |d d  }d|v rd|vrq||d tt kr|d d |d d< ||  d |d dd|d |d |d |d d qt||  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       z'sl_load_departures.<locals>.converttime r!   )kz=true
departuresr      z/departures?)hostargsr2   	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=   r9   )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   s2    6(
$
rY   c           
      C   sR  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  |}qW n   Y n0 |dkrzN|d d d d d |d d d  }	d|	v r(W q|	|vr<||	 W q   Y q0 q|S )Nr7   OKr9   r   r3   P   )r4   r5   portpriorityimportance_levelinfluence_levelurgency_levelscopeZ
stop_areasr8   linesz: message_variantsheaderu   Närtrafiken)r)   r*   rK   rH   rS   deviations_update_delayr   r   r   rG   rI   rP   )
rV   rU   stationr   deviations_listtestrW   
importanceii_deviation_messager   r   r   sl_get_deviations1   s*    . ($
(
rl   c                    s,   t   }tt| fdd|D }|S )Nc                    s   g | ]} | qS r   r   ).0key
dictionaryr   r   
<listcomp>M   r/   z%sort_dict_by_keys.<locals>.<listcomp>)sortedkeysdictzip)rp   Zsorted_keysZsorted_dictr   ro   r   sort_dict_by_keysK   s    rv   c           
      C   s   d|  d }t jd|ddid}t|j}g }t|d d D ]8\}}|d	 D ]&}	| |	d
 v rP||	d dd qPq@|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
 r9   )
r
   r   r   r   r   	enumeraterP   rQ   rH   rS   )
rf   rU   rV   r   responser9   resultsxZ	deviationrW   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 n0 d}tj }|d}d}tjd	d
}z.tt	j
| | |  d dk rtjd	d
}W n   tjdd
}Y n0 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 ]B}z|d d d }W n   d}Y n0 |d }t|d kr|d! }n|d d }z&tt	j tt	j | }W n6   z|d"d#}|dd$}W n   Y n0 Y n0 z|d% d d& }t d' W n$   |d( d d& }t d) Y n0 |d d d }|d* }|d+ | }|d||d,d-g d.}|s`|| q`qFt d/t| t|r| dkrd} |tt d0t	j
| | | < |S d S )1Nz
Stations: ZVbVbcutf-8rQ   r   %H:%M:%S$dateadd(00:00:00)r   hoursr2   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>rw   r   rx   timeoutr   r   i^  rz   r   ZTrainAnnouncementZInformationOwner   0Z
ToLocationr3   r(   Mcu   Malmö Cz	Varberg CZEstimatedTimeAtLocationr'   z- ================== DELAYED =================ZAdvertisedTimeAtLocationZ	SCHEDULEDZCanceledr|   TRAINr>   transport_moderA   RESULTSr6   )r   r   encodedecodedatetimenowstrftime	timedeltarR   rH   rS   ET
fromstringtostringr
   r   r   r   r   rJ   r:   sj_stationsrs   valuesindexrQ   rP   r)   r*   rK   )rf   rU   rV   r   now_strr   later	later_strr   rootr~   r2   r   rW   rj   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 ]6}|| d d d D ]}|d	 }|d
 }|||< qDq,tdd }|t| W d    n1 s0    Y  |S )Na*  <REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='TrainStation' schemaversion='1'>
    <FILTER/>
    <INCLUDE>Prognosticated</INCLUDE>
    <INCLUDE>AdvertisedLocationName</INCLUDE>
    <INCLUDE>LocationSignature</INCLUDE>
    </QUERY>
    </REQUEST>rw   r   rx   r   rz   r   ZTrainStationZAdvertisedLocationNameZLocationSignaturezsj_stations.txtr	   )r
   r   r   r   r   r   r   dumps)	r   r~   stationsstations_dictrW   rj   r8   Z
short_namefr   r   r   sj_load_stations   s    	.r   c                 C   sV   t j}i }|D ]B}|d d  | v r|}|| }|t j| |  |< |||< q|S )Nr   )rH   r   rO   sitesrU   rf   rV   r   search_listr   r8   	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y } zt d| W Y d }~n
d }~0 0 t | zdt|}i }|d D ]F}|d d |d d  }	|d dd  }
|
tj| |  |	< |
||	< q|W S  ty8 } zt d| W Y d }~n
d }~0 0 d S )N   öo   äa   å   ÖO   Ä   År|   %20 journeyplanner.integration.sl.sez/v2/stop-finder?name_sf=z &any_obj_filter_sf=2&type_sf=anyr[   Error. Z	locationsZdisassembledNamez, parentr8   r>   Error: r   rQ   rG   	Exceptionr   r   rH   r   )rU   rf   rV   url1Zurl2r   er   r   r8   rT   r   r   r   	sl_lookup   s(    .

r   c           	   
   C   s   t | |dd}ztddd| }W n. tyV } zt d| W Y d }~n
d }~0 0 t | zTt|}i }|d D ]6}|d }|d	 d
d  }|tj| |  |< |||< qx|W S  ty } zt d| W Y d }~n
d }~0 0 d S )Nr|   r   r   r[   zE/v1/typeahead.json?key=2ab4d947683c4a60b1a90fd2324eb4c5&searchstring=r   ResponseDataNameZSiteIdr   r   r   )	rU   rf   rV   r   r   r   r   r8   rT   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 rdd	|d d
 v rdt  t t_t	d |d }g }d}|D  ]}zz|d rW W qxW n   Y n0 z|d d d }t	d W n$   |d d d }t	d Y n0 |d d d d||d d d 
dd|d d d 
dd dg d }	||	 W qx typ }
 zt	d!|
 W Y d }
~
 d S d }
~
0 0 qxt|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   rA   r   r2   ZSuccess)r
   getrH   tokenr   r   r   r   r   r   rQ   upperrP   r   rR   rS   )gidrU   rV   r   r   r   counterr2   Zavailable_time
new_recordr   r   r   r   vt_load_departures!  sJ    

4


r   c           	      C   s   d|  d }t j|ddtj ddj}t|}d|v rhtd d	|d d
 v rht  t	 t_td |d }i }i }|D ]l}z8| d d 
 |d 
 v r|d }|d }|||< W q| ty } ztd| W Y d }~q|d }~0 0 q||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   r8   r   r   )r
   r   rH   r   r   r   r   r   r   r   rO   r   )	_stringr   r   r   r   stopsr8   r   r   r   r   r   	vt_lookup[  s(    
0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 }	|||< |||	< qDtdd }
|
t| W d    n1 s0    Y  |S )Nz<REQUEST>
    <LOGIN authenticationkey='63ea83cd2cce48c79eaebf475818b7d0'/>
    <QUERY objecttype='FerryRoute' schemaversion='1.2'>
    <FILTER/>
    <INCLUDE>Harbor</INCLUDE>
    
    
    </QUERY>
    </REQUEST>rw   r   rx   r   ry   rz   r   Z
FerryRouteZHarborIdr   r3   zferries_stations.txtr	   )	r
   r   r   r   r   rJ   r   r   r   )r   r~   r   Zstationlistr   rW   Zid0Zname0Zid1Zname1r   r   r   r   ferries_load_stationsq  s     	
.r   c                 C   sV   t d| t }i }|D ]0}|d d  | v r|}|| }|||< qt | |S )Nz	Station: r   )r   r   rO   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 rq|d d d }|d d }|d|dddg d}|| qt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   rw   r   rx   r   ry   rz   r   ZFerryAnnouncementZ
FromHarborr   ZDeletedZDepartureTimer'   ZToHarborr   r   SHIPr   rA   r   r6   )r   r   r   r   r   r   r   r   r   r
   r   r   r   r   rJ   rP   rR   r)   r*   rK   rH   rS   )rf   rU   rV   r   r   r   r   r   r   r   r~   r2   r   rW   r   r?   r   r   r   r   ferries_load_departures  sP    






"r   c                 C   s   d}d| d | }t |j}zt|}|d }W n. tyd } zt| W Y d }~dS d }~0 0 t| i }|D ]V}z$|d d }	|d d }
|
||	< W qv ty } zt| W Y d }~qvd }~0 0 qv|S )	N$f915361c-f370-4ee6-a371-2110e6a79b92z1https://api.resrobot.se/v2.1/location.name?input=&format=json&accessId=ZstopLocationOrCoordLocationr   ZStopLocationr8   ZextId)r
   r   r   r   r   r   r   )rU   rf   rV   rn   r   r   r   r   r   r8   rT   r   r   r   resrobot_lookup  s&    
 r   c                 C   sr  d}d}d|  d | }t |j}zt|}W n. ty` } zt| W Y d }~dS d }~0 0 t| |}g }t| |d D ]}	zVt|	d d }
t|	d	 }|	d
 dd }t|	d }|d | }t|
|| W n. ty
 } zt| W Y d }~n
d }~0 0 |d||
ddg d}|	| qtd|t
| t
|rn|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   rA   r   r6   )r
   r   r   r   r   r   r   rJ   splitrP   rR   r)   r*   rK   rH   rS   )rf   rU   rV   rn   r   r   r   r2   r   rW   r>   r   r   _dater   r   r   r   resrobot_load_departures  sD    

"r   )r   r   )r   )r   )r   )r   )r   )r   )r   )r   r   )r   )rH   rC   rE   r   r   rY   rl   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s(   



`



:!

>
