kopia lustrzana https://github.com/sq9atk/sr0wx
				
				
				
			
		
			
				
	
	
		
			109 wiersze
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			109 wiersze
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/python -tt
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| import urllib
 | |
| import logging
 | |
| import socket
 | |
| 
 | |
| from PIL import Image
 | |
| from pprint import pprint
 | |
| 
 | |
| from sr0wx_module import SR0WXModule
 | |
| 
 | |
| class PropagationSq9atk(SR0WXModule):
 | |
|     """Klasa pobierająca dane kalendarzowe"""
 | |
| 
 | |
|     def __init__(self,language,service_url):
 | |
|         self.__service_url = service_url
 | |
|         self.__language = language
 | |
|         self.__logger = logging.getLogger(__name__)
 | |
|         self.__pixels = {
 | |
|             # niepotrzebne pasma można zaremowac znakiem '#'
 | |
|             160 : {'day' :{'x':50, 'y':60},  'night':{'x':100, 'y':60}},
 | |
|             80 : {'day' :{'x':50, 'y':95},  'night':{'x':100, 'y':95}},
 | |
|             40 : {'day' :{'x':50, 'y':140}, 'night':{'x':100, 'y':140}},
 | |
|             20 : {'day' :{'x':50, 'y':185}, 'night':{'x':100, 'y':185}},
 | |
|             10 : {'day' :{'x':50, 'y':230}, 'night':{'x':100, 'y':230}},
 | |
|             6 : {'day' :{'x':50, 'y':270}, 'night':{'x':100, 'y':270}},
 | |
|         }
 | |
| 
 | |
|         self.__levels = {
 | |
|             '#17e624':'warunki_podwyzszone', # zielony
 | |
|             '#e6bc17':'warunki_normalne', # żółty
 | |
|             '#e61717':'warunki_obnizone', # czerwony
 | |
|             '#5817e6':'pasmo_zamkniete', #fioletowy
 | |
|         }
 | |
| 
 | |
|     def rgb2hex(self, rgb):
 | |
|         return '#%02x%02x%02x' % rgb
 | |
| 
 | |
|     def downloadImage(self, url):
 | |
|         try:
 | |
|             self.__logger.info("::: Odpytuję adres: " + url)
 | |
|             webFile = urllib.URLopener()
 | |
|             webFile.retrieve(url, "propagacja.png")
 | |
|             return Image.open("propagacja.png",'r')
 | |
|         except urllib2.URLError, e:
 | |
|             print e
 | |
|         except socket.timeout:
 | |
|             print "Timed out!"
 | |
|         return ""
 | |
| 
 | |
|     def collectBandConditionsFromImage(self, image, dayTime):
 | |
|         imageData = image.load()
 | |
|         data = list()
 | |
|         for band in sorted(self.__pixels):
 | |
|             x = self.__pixels[band][dayTime]['x']
 | |
|             y = self.__pixels[band][dayTime]['y']
 | |
|             rgba = imageData[x,y]
 | |
|             color = self.rgb2hex(( rgba[0],rgba[1],rgba[2] ));
 | |
| 
 | |
|             # można zaremowac wybraną grupę aby nie podawać info o konkretnych warunkach
 | |
|             if self.__levels[color] == 'warunki_podwyzszone':
 | |
|                 string = str(band) + '_metrow' + ' ' + self.__levels[color]
 | |
|                 data[:0] = [string]
 | |
| 
 | |
|             if self.__levels[color] == 'warunki_normalne':
 | |
|                 string = str(band) + '_metrow' + ' ' + self.__levels[color]
 | |
|                 data[:0] = [string]
 | |
| 
 | |
|             if self.__levels[color] == 'warunki_obnizone':
 | |
|                 string = str(band) + '_metrow' + ' ' + self.__levels[color]
 | |
|                 data[:0] = [string]
 | |
| 
 | |
|             if self.__levels[color] == 'pasmo_zamkniete':
 | |
|                 string = str(band) + '_metrow' + ' ' + self.__levels[color]
 | |
|                 data[:0] = [string]
 | |
| 
 | |
|         return data
 | |
| 
 | |
| 
 | |
|     def get_data(self):
 | |
| 
 | |
|         image = self.downloadImage(self.__service_url)
 | |
| 
 | |
|         self.__logger.info("::: Przetwarzam dane...\n")
 | |
| 
 | |
|         message = " ".join([
 | |
|             " _ informacje_o_propagacji ",
 | |
|             " _ dzien _ ",
 | |
|             " _ pasma _ ",
 | |
|             " _ " .join( self.collectBandConditionsFromImage(image, 'day') ),
 | |
|             " _ noc _ ",
 | |
|             " _ pasma _ ",
 | |
|             " _ " .join( self.collectBandConditionsFromImage(image, 'night') ),
 | |
|             " _ "
 | |
|         ])
 | |
| 
 | |
|         return {
 | |
|             "message": message,
 | |
|             "source": "noaa",
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |