ó
Qâ[c           @   s«   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z d Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d S(
   iÿÿÿÿN(   t   datetime(   t	   timedeltat   ke5cc5vnjczre7pr6rsw8pszc         C   sá   d } i t  d 6|  d 6| d 6} g  } t j | ƒ } | d | } t j | ƒ } y t j | ƒ } Wn t j k
 r} | SX| j ƒ  }	 t j	 |	 ƒ }
 xA |
 D]9 } t
 j ƒ  } | d | _ | d | _ | j | ƒ q  W| S(   Ns#   http://data.tmsapi.com/v1.1/lineupst   api_keyt   countryt
   postalCodet   ?t   lineupIdt   name(   t   apiKeyt   urllibt	   urlencodet   urllib2t   Requestt   urlopent   URLErrort   readt   jsont   loadst   epg_dbt   Providert   idR   t   append(   R   R   t   urlt   valuest	   providerst   datat   fullurlt   reqt   rawResponset   responseJsont	   gnLineupst   gnLineupt   provider(    (    s   /var/www/epg/epg_grace.pyt   getProviders   s&    
c         C   sV  d j  |  ƒ } i t d 6} t j | ƒ } | d | } t j | ƒ } y t j | ƒ } Wn t j k
 rr g  SX| j ƒ  } t	 j
 | ƒ } g  }	 d }
 d } x¯ | D]§ } d | k r%d | k r%d | k r%t j ƒ  } | d | _ | d | _ |
 | _ t t | d ƒ ƒ | _ | | _ n  d | k rA| d | _ n  |	 j | ƒ q§ W|	 S(	   Ns/   http://data.tmsapi.com/v1.1/lineups/{}/channelsR   R   t    t	   stationIdt   callSignt   channelt   affiliateCallSign(   t   formatR	   R
   R   R   R   R   R   R   R   R   R   t   ChannelR   R%   R   t   strt   intt   numbert   imageUrlR'   R   (   t
   providerIdR   R   R   R   R   R   R   t   providerChannelst   channelsR   R-   t   providerChannelR&   (    (    s   /var/www/epg/epg_grace.pyt   getProviderChannels/   s4    $	c         C   sç  d j  |  ƒ } i t d 6} t j ƒ  } t j | ƒ } | d | } t j | ƒ } t j	 d ƒ y t j
 | ƒ } Wn- t j k
 r£ } t j	 d j  | ƒ ƒ | SX| j ƒ  }	 t j |	 ƒ }
 d | _ d |
 d k rì |
 d d | _ n  d | _ d	 |
 d k rÖ|
 d d	 d
 } | d k rÖd | | _ t j j | j ƒ sÓt j j | j ƒ } t j j | ƒ s|t j | ƒ n  t j	 d ƒ t | ƒ } y t j | | j ƒ WqÐt j	 d ƒ d | _ | SXqÓqÖn  t j	 d ƒ | S(   Ns'   http://data.tmsapi.com/v1.1/stations/{}R   R   s1   EPG_GRACE.PY: getChannelInfo getting channel infou)   EPG_GRACE.PY: getChannelInfo Web ERROR {}t   unavailableR   i    t   preferredImaget   uriR#   s   art/channelIcons/s1   EPG_GRACE.PY: getChannelInfo getting Channel icons9   EPG_GRACE.PY: getChannelInfo Channel icon download faileds#   EPG_GRACE.PY: getChannelInfo return(   R(   R	   R   R)   R
   R   R   R   t   loggingt   debugR   R   R   R   R   R   R-   t   ost   patht   existst   dirnamet   makedirst   getFullImageUrlt   urlretrieve(   t	   channelIdR   R   R&   R   R   R   R   t   eR   t   responseR-   R9   (    (    s   /var/www/epg/epg_grace.pyt   getChannelInfoX   sH    			c         C   s   d |  d t  S(   Ns   http://developer.tmsimg.com/s	   ?api_key=(   R	   (   R   (    (    s   /var/www/epg/epg_grace.pyR=   ‡   s    c         C   s•  t  d d ƒ } t  d d ƒ } t j ƒ  | } t j ƒ  | } d j |  ƒ } i t d 6| j d ƒ d 6| j d ƒ d 6} t j | ƒ } | d	 | } t j	 d
 j | ƒ ƒ t
 j | ƒ }	 y t
 j |	 d d ƒ}
 WnY t
 j k
 r} t j	 d j | ƒ ƒ g  St j k
 r0} t j	 d j | ƒ ƒ g  SX|
 j ƒ  } t j	 d ƒ g  } y t j | ƒ } Wn" t j k
 r‡t j	 d ƒ g  SXg  } xót d t | ƒ ƒ D]Ü} t j ƒ  } | | d d | _ | | d | _ | | d | _ d | | d k r| | d d n d | _ d | _ d | | d k rO| | d d d n d } | d k rd | | _ t j j | j ƒ st j j  | j ƒ } t j j | ƒ sºt j! | ƒ n  t" | ƒ } y t j# | | j ƒ Wq t j	 d ƒ d | _ q Xqn  d | | d k r2d j$ | | d d ƒ n d | _% d | | d k rjd j$ | | d d ƒ n d | _& | j' | ƒ q¤Wt j	 d  ƒ | S(!   Nt   hoursi   i'   s/   http://data.tmsapi.com/v1.1/stations/{}/airingsR   s   %Y-%m-%dT%H:%MZt   startDateTimet   endDateTimeR   u,   EPG_GRACE.PY: getProgram grace fetch url: {}t   timeouti
   u/   EPG_GRACE.PY: getPrograms: grace fetch error={}u+   EPG_GRACE.PY: getPrograms: grace timeout={}s)   EPG_GRACE.PY: getProgram grace fetch dones*   EPG_GRACE.PY: getProgram Json decode errori    t   programt   titlet	   startTimet   durationt   longDescriptionR#   R3   R4   R5   s   art/programIcons/s/   EPG_GRACE.PY: getProgram: icon downloaded errort   genrest   ,t   topCasts0   EPG_GRACE.PY: getProgram grace fetch images done((   R   R    t   utcnowR(   R	   t   strftimeR
   R   R6   R7   R   R   R   R   t   socketRF   R   R   R   t   JSONDecodeErrort   ranget   lenR   t   ProgramRH   RI   t   durationMinst   descriptionR-   R8   R9   R:   R;   R<   R=   R>   t   joinRL   t   castR   (   R?   t   beforeHourst
   afterHourst	   startDatet   endDateR   R   R   R   R   R   R@   R   RA   t   programst   iRG   R-   R9   (    (    s   /var/www/epg/epg_grace.pyt   getPrograms‹   sl    
/	088(   R8   RQ   R6   R
   R   R   R   R    R   R	   R"   R2   RB   R=   R`   (    (    (    s   /var/www/epg/epg_grace.pyt   <module>   s   		)	/	