Alergias - Grafica de Polen

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
juantxo
Hacker del Foro
Mensajes: 78
Registrado: 02 Abr 2008, 13:36

Alergias - Grafica de Polen

Mensaje por juantxo »

Hola!!!

Como me interesa personalmente el tema de los niveles de polen en el ambiente, por tema de alergias y me cansé un poco de ir a la pagina de la "Sociedad Española de Alergología e Inmunología Clínica" , http://www.seaic.org/(aunque agradezco su labor), y me apetecia investigar un poco el tema de las Expresiones Regulares y la extraccion de datos de paginas WEB me lance a preparar un Script que ha ido creciendo, desde una simple ventanita con los valores numericos, a una ventana grafica.

Creo que puede ser mejorada, y ampliada, asi que aqui adjunto el codigo fuente:

Seguro que tiene varias cosas mejorables, pero os agradeceria si podeis echar un vistazo a la parte de la grafica, ya que a veces no la dibuja, o al minimizar y volver a maximizar, se 'borra' los graficos...


A ver que os parece! :smt030 :smt027

Código: Seleccionar todo

#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=Icono.ico
#AutoIt3Wrapper_outfile=Datos_SEAIC.exe
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

	AutoIt Version: 3.3.6.1
	Author:         Juantxo V

	Script Function: Lee los datos correspondientes a PAMPLONA de la pagina de la Sociedad Española de Alergología e Inmunología Clínica y crea un grafico...
					Para buscar la correspondiente a otra ciudad, Ir a http://www.polenes.com/ y seleccionar los valores (no testado)
					
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <string.au3>
#include <array.au3>
#include <Date.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>


#region ### Ejecucion en exclusiva
; Poner al inicio del script
Dim $g_szVersion
$g_szVersion = "Alergias"
If WinExists($g_szVersion) Then
	MsgBox(16, "En ejecucion", "La aplicacion ya esta en ejecucion", 2)
	WinActivate($g_szVersion)
	; **  _EscribeLOG("Ya esta en ejecucion") ; Guarda registro en LOGs
	Exit ; Ya está en ejecución
EndIf
AutoItWinSetTitle($g_szVersion)
#endregion ### Ejecucion en exclusiva



Global $Debug = 0 ; Variable para depuracion. Poner a 1 para depurar.
Global $SoloGraf = 0 ; Si =1 solo saca el grafico con los valores actuales
If @Compiled Then
	$Debug = 0 ; Si esta compilado, no muestra las tablas.
	$SoloGraf = 0 ; no muestra SOLO el grafico y sale.
EndIf


Dim $Archivo_INI = @ScriptDir & "\SEAIC.ini"
$URL = "http://www.polenes.com/graficos/jsp/ImgGrafico.jsp?chkPolenes=GRAMI&selEstacion=PAM|2004|2005|2006|2007|2009|2010|2011|2012|&selAnioTrimes=&selPeriodo=USE&txtFDesde=01%2F01%2F2012&txtFHasta=09%2F05%2F2012&prov=PAM&hidPolen=%26polen%3DGRAMI&hidCheckSel=&mostrarGraf=S&hidPolenSolo=N&hidAgradecimientos=Dra+Marta+Orta&hidMailProv=morta%40imqnavarra.com&hidWebProv=&hidCalPolinico=&hidPagHtmlGraf=&idio=ES&numPolenesSeleccionados=1&hidAniosEstacion=&primero=true" ;URL para obtener la informacion
;URL por defecto. La concreta la toma del INI.




$URL_Base = IniRead($Archivo_INI, "URL", "Web", $URL)
$HTML_Error = "<html><head><title>Apache Tomcat/5.5.20 - Error report</title><style>"
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1") ; Creamos una instancia de un objeto que nos permitirá realizar una peticion HTTP
$oHTTP.Open("GET", $URL_Base) ; Peticion tipo GET, tambien podríamos utilizar un POST
$oHTTP.Send() ; Realizamos la peticion
$HTMLSource = $oHTTP.Responsetext ; Obtenemos el HTML
Dim $Cont_Error = 0 ; Controlamos los intentos de acceder a la pagina. Si hay mas de 10, sale con un error.
While (StringLeft($HTMLSource, StringLen($HTML_Error)) = $HTML_Error) And $Cont_Error < 11
	Sleep(500)
	;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $HTML_Error = ' & $HTML_Error & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	$oHTTP.Open("GET", $URL_Base) ; Peticion tipo GET, tambien podríamos utilizar un POST
	$oHTTP.Send() ; Realizamos la peticion
	$HTMLSource = $oHTTP.Responsetext ; Obtenemos el HTML
	$Cont_Error += 1
WEnd
If $Cont_Error < 10 Then

	#region Boletin De comentarios
	;--------------------------------------------------------------------------
	; En esta parte sacamos los datos del boletin en texto, para un futuro uso.
	;--------------------------------------------------------------------------

	$Antes = 'Comentario para: Pamplona</p></td></tr>' ; Cadena inicio para la extraccion de StringRegExp
	$Despues = '</p>' ; Cadena fin para la extraccion de StringRegExp

	$sBoletin = StringRegExp($HTMLSource, $Antes & "(?s)(.*?)" & $Despues, 3) ; Extrae todo el texto del 'boletin' en el elemento [0] del Array
	If Not @error Then ; Si encuentra los datos
		$sBoletin = StringRegExp($sBoletin[0], "-(.*)", 3) ;Separamos el texto en un Array para cada dato.
		For $x = 0 To UBound($sBoletin) - 1 ;quitamos los espacios en blanco al final de las cadenas.
			$sBoletin[$x] = StringStripWS($sBoletin[$x], 3)
			If $Debug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sBoletin[$x] = ' & $sBoletin[$x] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
		Next
		If $Debug = 1 Then _ArrayDisplay($sBoletin)
		#region Fecha
		; ----------
		; Convertimos la fecha 11-17 DE JUNIO DE 2012  en SEMANA 11-17/06/2012
		; ------------------
		$sBoletin[0] = StringReplace($sBoletin[0], " DE ", "/")
		$sBoletin[0] = StringReplace($sBoletin[0], ":", "")
		$sBoletin[0] = StringReplace($sBoletin[0], "ENERO", "01")
		$sBoletin[0] = StringReplace($sBoletin[0], "FEBRERO", "02")
		$sBoletin[0] = StringReplace($sBoletin[0], "MARZO", "03")
		$sBoletin[0] = StringReplace($sBoletin[0], "ABRIL", "04")
		$sBoletin[0] = StringReplace($sBoletin[0], "MAYO", "05")
		$sBoletin[0] = StringReplace($sBoletin[0], "JUNIO", "06")
		$sBoletin[0] = StringReplace($sBoletin[0], "JULIO", "07")
		$sBoletin[0] = StringReplace($sBoletin[0], "AGOSTO", "08")
		$sBoletin[0] = StringReplace($sBoletin[0], "SEPTIEMBRE", "09")
		$sBoletin[0] = StringReplace($sBoletin[0], "OCTUBRE", "10")
		$sBoletin[0] = StringReplace($sBoletin[0], "NOVIEMBRE", "11")
		$sBoletin[0] = StringReplace($sBoletin[0], "DICIEMBRE", "12")
		; Escribimos en el .INI el boletin.
		If IniRead($Archivo_INI, $sBoletin[0] & "_tx", "Num", "No") = "No" Then; si no existe
			IniWrite($Archivo_INI, $sBoletin[0] & "_tx", "Num", UBound($sBoletin) - 1) ; Guarda el nº de lineas que contiene el boletin.
			For $x = 0 To UBound($sBoletin) - 1 ;Guarda las lineas de informacion.
				IniWrite($Archivo_INI, $sBoletin[0] & "_tx", $x, $sBoletin[$x])
			Next
		Else ; si lee un valor anterior, hacemos la comparacion.
			;Primero si el nº de elementos es igual:
			If (UBound($sBoletin) - 1) = IniRead($Archivo_INI, $sBoletin[0] & "_tx", "Num", "No") Then ; hay el mismo nº de elementos. Comparamos cada elemento.
				For $x = 0 To UBound($sBoletin) - 1
					If IniRead($Archivo_INI, $sBoletin[0] & "_tx", $x, "") <> $sBoletin[$x] And $sBoletin[$x] <> "" Then ; si son distintos y hay dato.
						; Escribimos
						If $Debug Then MsgBox(0, 0, "Escribe", 5)
						IniWrite($Archivo_INI, $sBoletin[0] & "_tx", $x, $sBoletin[$x])
					Else ; Si estan los mismos datos.
						If $Debug Then MsgBox(0, 0, "No Escribe", 5)
						;nada
					EndIf
				Next
			Else ; si no hay el mismo nº de elementos.
				;borramos todos los del INI de esa seccion.
				For $x = 0 To IniRead($Archivo_INI, $sBoletin[0] & "_tx", "Num", "No")
					IniDelete($Archivo_INI, $sBoletin[0] & "_tx", $x)
				Next
				IniDelete($Archivo_INI, $sBoletin[0] & "_tx")
				;cargamos los nuevos datos.
				IniWrite($Archivo_INI, $sBoletin[0] & "_tx", "Num", UBound($sBoletin) - 1)
				For $x = 0 To UBound($sBoletin) - 1
					IniWrite($Archivo_INI, $sBoletin[0] & "_tx", $x, $sBoletin[$x])
				Next
			EndIf
		EndIf
		#endregion Fecha
	Else ; SI hay error al coger los datos de la WEB.
		#region --- CodeWizard generated code Start ---
		;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Warning, Timeout=5 ss
		If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
		$iMsgBoxAnswer = MsgBox(48, "Error de Boletín", "Se ha producido un error al obtener los datos del boletín..." & @CRLF & @CRLF & "Se seguirán buscando los datos numéricos.", 5)
		#endregion --- CodeWizard generated code Start ---
		ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $HTMLSource = ' & $HTMLSource & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
		ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Antes & "(?s)(.*?)" & $Despues = ' & $Antes & "(?s)(.*?)" & $Despues & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
		ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : @error = ' & @error & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	EndIf
	#endregion Boletin De comentarios

	#region Obtener Valores diarios
	$Antes = '<td><p class="p">' ; Cadena inicio para la extraccion de StringRegExp
	$Despues = "</td>" ; Cadena fin para la extraccion de StringRegExp

	$sTablaResultados_Codigos = StringRegExp($HTMLSource, $Antes & "(?s)(.*?)" & $Despues, 3) ;Obtenemos los valores en un Array

	Dim $sTablaResultados2[UBound($sTablaResultados_Codigos)][2] ;preparamos un 2º Array para limpiar los codigos.

	For $x = 0 To UBound($sTablaResultados_Codigos, 1) - 1
		$sTablaResultados2[$x][0] = $sTablaResultados_Codigos[$x] ; en la columna 0, guardamos el original.
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados_Codigos[$x], "[^[:alnum:] áéíóú,<. "" = />]", " ") ;quitamos todo lo que no sea necesario
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "  ", " ") ;Quitamos los espacios existentes reemplazando 2 espacios por uno.
		While @extended ; Mientras encuente espacios dobles, ejecutar.
			$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "  ", " ") ;Quitamos los espacios existentes reemplazando 2 espacios por uno.
		WEnd
		$sTablaResultados2[$x][1] = StringStripWS(StringRegExpReplace($sTablaResultados2[$x][1], "</p>", " "), 3) ; Quitar etiqueta </p>
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "á", "a") ;Quitamos tildes
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "é", "e");Quitamos tildes
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "í", "i");Quitamos tildes
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "ó", "o");Quitamos tildes
		$sTablaResultados2[$x][1] = StringRegExpReplace($sTablaResultados2[$x][1], "ú", "u");Quitamos tildes
	Next

	If $Debug = 1 Then _ArrayDisplay($sTablaResultados2, "Resultados", -1, 0, "", "", "Nº|Original|Limpio")
	#endregion Obtener Valores diarios
	#region Extraemos y relacionamos los datos diarios con la fecha
	Dim $sTablaAlmacen[8][2] ; Preparamos una tabla para guardar el par Fecha-Valor.
	Dim $Primero, $Ultimo
	;tipos
	$sTablaAlmacen[0][0] = $sTablaResultados2[0][1] ; El primer dato, va directo (Polen/Fecha)
	; Miramos hasta donde son Fecha:
	For $x = 0 To UBound($sTablaResultados_Codigos) - 1
		If StringInStr($sTablaResultados2[$x][1], "Lunes") Or _
				StringInStr($sTablaResultados2[$x][1], "Martes") Or _
				StringInStr($sTablaResultados2[$x][1], "Miercoles") Or _
				StringInStr($sTablaResultados2[$x][1], "Jueves") Or _
				StringInStr($sTablaResultados2[$x][1], "Viernes") Or _
				StringInStr($sTablaResultados2[$x][1], "Sabado") Or _
				StringInStr($sTablaResultados2[$x][1], "Domingo") Then
			If $Primero = 0 Then $Primero = $x
			$Ultimo = $x
		EndIf
	Next

	;Fechas
	If UBound($sTablaAlmacen) >= $Ultimo + 2 Then
		If $Debug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Primero = ' & $Primero & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
		If $Debug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : UBound($sTablaAlmacen) = ' & UBound($sTablaAlmacen) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
		Dim $i = 1
		For $x = $Primero To $Ultimo ; Guardamos las fechas
			$sTablaAlmacen[$i][0] = $sTablaResultados2[$x][1]
			$i += 1
		Next
		$sTablaAlmacen[0][1] = $sTablaResultados2[$Ultimo + 1][1] ;Guardamos el dato tipo de polen ('Gramineas') en la columna1

		; datos para la fecha.
		$i = 1
		For $x = $Ultimo + 2 To $Ultimo + ($Ultimo - $Primero) + 2
			$sTablaAlmacen[$i][1] = $sTablaResultados2[$x][1]
			$i += 1
		Next
		If $Debug = 1 Then _ArrayDisplay($sTablaAlmacen, "Resultados")
		#endregion Extraemos y relacionamos los datos diarios con la fecha

		Escribe_INI($sTablaAlmacen)
		Grafico()
	Else ; Si la pagina esta 'rara'
		If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
		$iMsgBoxAnswer = MsgBox(16, "Error de Acceso", "La tabla de la pagina no esta correctametne formada... Esperar a otro momento." & @CRLF & @CRLF & StringLeft($URL, 25) & "..." & @CRLF & @CRLF, 10)
		ShellExecuteWait($URL_Base)
;~ _ArrayDisplay($sTablaAlmacen)
	EndIf
Else ; si ha habido mas de 10 intentos.
	#region --- CodeWizard generated code Start ---
	;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical, Timeout=10 ss
	If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
	$iMsgBoxAnswer = MsgBox(16, "Error de Acceso", "No se ha podido acceder a la pagina solicitada." & @CRLF & @CRLF & StringLeft($URL, 25) & "..." & @CRLF & @CRLF, 10)
	#endregion --- CodeWizard generated code Start ---

EndIf

Exit


#cs
	Modelo de datos en INI:
	[Datos Polen/Fecha-Gramineas]
	Jueves 10/5/2012=0
	Viernes 11/5/2012=0
	Sabado 12/5/2012=0
	Domingo 13/5/2012=12
	Lunes 14/5/2012=0
	Martes 15/5/2012=1
	Miercoles 16/5/2012=3
#ce
;----------------------------------------------------
;----------------------------------------------------
;----------------------------------------------------
#region Funciones de proceso
;----------------------------------------------------
;----------------------------------------------------
;----------------------------------------------------
#region Escribe INI
Func Escribe_INI(ByRef $sTablaAlmacen)
	;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Escribe_INI = ' &  @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
	For $x = 1 To UBound($sTablaAlmacen) - 1
		If IniRead($Archivo_INI, "Datos " & $sTablaAlmacen[0][0] & "-" & $sTablaAlmacen[0][1], $sTablaAlmacen[$x][0], '') = '' Then ; si no existe el dato.
			If $sTablaAlmacen[$x][0] And $sTablaAlmacen[$x][1] Then ; si hay datos.
				IniWrite($Archivo_INI, "Datos " & $sTablaAlmacen[0][0] & "-" & $sTablaAlmacen[0][1], $sTablaAlmacen[$x][0], $sTablaAlmacen[$x][1])
				;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sTablaAlmacen[$x][0], $sTablaAlmacen[$x][1] = ' & $sTablaAlmacen[$x][0] & "  " & $sTablaAlmacen[$x][1] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
			EndIf ; si hay datos.
		EndIf ; si no existe.
	Next
	If $Debug = 1 Then _ArrayDisplay($sTablaAlmacen)

	If Not @Compiled And $Debug Then
		Run("notepad.exe C:\Documents and Settings\n854750\Mis documentos\AutoIT\jxo\Alergias\SEAIC.ini", @ScriptDir)
	Else
		#region --- CodeWizard generated code Start ---
		;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Info, Timeout=2 ss, Miscellaneous=Top-most attribute
		If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
		$iMsgBoxAnswer = MsgBox(262208, "Datos SEAIC", "Se han recogido los datos.", 2)
		#endregion --- CodeWizard generated code Start ---

	EndIf
EndFunc   ;==>Escribe_INI
#endregion Escribe INI
#region graficas
Func Grafico()
	;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Grafico = ' &  @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

	#region Formulario
;~ 	$Debug = 0 ; Cambiar si se quiere depurar solo el grafico.
	Dim $f_Alto = 500
	Dim $f_Ancho = 600
	Global $Form1 = GUICreate("Evolucion", $f_Ancho, $f_Alto)
;~ Dim $Graf1= GUICtrlCreateGraphic(50,50,$f_Ancho,$f_Alto,$SS_BLACKFRAME)
;~ Dim $hPen = _GDIPlus_PenCreate (0xF5F8FD,10,1)

	_GDIPlus_Startup()
	Dim $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
	Global $hPen = _GDIPlus_PenCreate(0x55F0F4F9, 1, 2)
	;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hPen @Error= ' & @error & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	GUISetState(@SW_SHOW)
	#endregion Formulario
	#region Carga Valores
	$TablaValores = IniReadSection($Archivo_INI, "Datos Polen/Fecha-Gramineas")
	If $Debug Then _ArrayDisplay($TablaValores, "Valores en INI")
	$Ancho_Series = $f_Ancho / UBound($TablaValores) - 1
	;	ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : UBound($TablaValores) = ' & UBound($TablaValores) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
	#endregion Carga Valores
	#region Linea de datos
	Dim $xPos0 = $Ancho_Series
	Dim $yPos0 = $f_Alto - (($TablaValores[1][1] + 1) * 2) - 1
	Dim $xPos, $yPos
	For $x = 1 To UBound($TablaValores) - 1
		$xPos = $Ancho_Series * $x
		$yPos = $f_Alto - (($TablaValores[$x][1] + 1) * 2) - 1
		_GDIPLUS_GraphicsDrawLine($hGraphic, $xPos0, $yPos0, $xPos, $yPos)
		$xPos0 = $xPos
		$yPos0 = $yPos
	Next
	#endregion Linea de datos
	#region Lineas de ejes
	; Lineas Horizontales
	For $i = 0 To $f_Alto Step $f_Alto / 10
		_GDIPlus_GraphicsDrawLine($hGraphic, 0, ($f_Alto - $i), $f_Ancho, ($f_Alto - $i), $hPen)
		GUICtrlCreateLabel($i / 2, 0, $f_Alto - $i + 3, 17, 17) ; Escala de Y
	Next
	; Lineas Verticales
	For $i = 1 To UBound($TablaValores) - 1
		_GDIPlus_GraphicsDrawLine($hGraphic, ($f_Ancho - $i * $Ancho_Series), 0, ($f_Ancho - $i * $Ancho_Series), $f_Alto, $hPen)
		Display_Rotated_Text($Form1, $TablaValores[$i][0], $f_Ancho - ($f_Ancho - ($i - 1) * $Ancho_Series) + $Ancho_Series, 120, 90, 20, 14)

;~ 		GUICtrlCreateLabel($TablaValores[$i][0], $f_Ancho - ($f_Ancho - ($i-1) * $Ancho_Series) + $Ancho_Series, 0, 50, 50) ;Escala de X
		GUICtrlCreateLabel($TablaValores[$i][1], $f_Ancho - ($f_Ancho - ($i - 1) * $Ancho_Series) + $Ancho_Series, $f_Alto - 180, 50, 50) ;Valor del punto
	Next
	#endregion Lineas de ejes
	$ir_Web = GUICtrlCreateButton("Ir al WEB", $f_Ancho - 60, $f_Alto / 2)
	Do
;~ 		_WinAPI_RedrawWindow ($Form1)
		$nMsg = GUIGetMsg()
		If $nMsg = $ir_Web Then ShellExecuteWait($URL_Base)
	Until $nMsg = $GUI_EVENT_CLOSE
	_GDIPlus_PenDispose($hPen)
	_GDIPlus_GraphicsDispose($hGraphic)
	_GDIPlus_ShutDown()
	Exit
EndFunc   ;==>Grafico
#endregion graficas
#region Texto en Vertical
Func Display_Rotated_Text($hGUI, $text, $px, $py, $angle = 90, $tw = 400, $th = 12, $tcolor = 0x000000, $bcolor = 0xF0F0F0, $font = 'Arial', $transparent = True)
	Local $tRect, $rotate, $RotateMe, $rFont, $hDC
	; Create RECT-structure, fill data
	$tRect = DllStructCreate($tagRECT)
	DllStructSetData($tRect, 'Left', $px)
	DllStructSetData($tRect, 'Top', $py)
	; Set rotation
	$rotate = $angle * 10
	; Create structure for rotate text, fill data
	$RotateMe = DllStructCreate($tagLOGFONT)
	DllStructSetData($RotateMe, 'Escapement', $rotate)
	DllStructSetData($RotateMe, 'Weight', $tw)
	DllStructSetData($RotateMe, 'Height', $th)
	DllStructSetData($RotateMe, 'FaceName', $font)
	; Creates a logical font that has specific characteristics
	$rFont = _WinAPI_CreateFontIndirect($RotateMe)
	; Retrieves a handle of a display device context for the client area a window
	$hDC = _WinAPI_GetDC($hGUI)
	; Set text- and back color
	_WinAPI_SetTextColor($hDC, $tcolor)
	_WinAPI_SetBkColor($hDC, $bcolor)
	If $transparent Then _WinAPI_SetBkMode($hDC, $transparent)

	; Selects an object into the specified device context
	_WinAPI_SelectObject($hDC, $rFont)
	; Draws formatted text in the specified rectangle
	_WinAPI_DrawText($hDC, $text, $tRect, $DT_NOCLIP + $DT_NOPREFIX)
	$tRect = 0
EndFunc   ;==>Display_Rotated_Text
#endregion Texto en Vertical
;----------------------------------------------------
;----------------------------------------------------
;----------------------------------------------------
#endregion
;----------------------------------------------------
;----------------------------------------------------
;----------------------------------------------------
La app crea un archivo INI llamado SEAIC.ini en @ScriptDir & "\SEAIC.ini" (configurable en el codigo) con los datos historicos, y los representa graficamente.

Este es un modelo del .INI guardado:

Código: Seleccionar todo

[Datos Polen/Fecha-Gramineas]
Jueves 10/5/2012=0
Viernes 11/5/2012=0
Sabado 12/5/2012=0
Domingo 13/5/2012=12
Lunes 14/5/2012=0
Martes 15/5/2012=1
Miercoles 16/5/2012=3
Jueves 17/5/2012=3
Viernes 18/5/2012=8
Sabado 19/5/2012=1
Domingo 20/5/2012=0
Lunes 21/5/2012=0
Martes 22/5/2012=0
Miercoles 23/5/2012=7
Jueves 24/5/2012=1
Viernes 25/5/2012=20
Sabado 26/5/2012=1
Domingo 27/5/2012=0
Lunes 28/5/2012=8
Martes 29/5/2012=0
Miercoles 30/5/2012=6
Jueves 31/5/2012=9
Viernes 1/6/2012=0
Sabado 2/6/2012=0
Domingo 3/6/2012=0
Lunes 4/6/2012=0
Martes 5/6/2012=1
Miercoles 6/6/2012=1
Jueves 7/6/2012=1
Viernes 8/6/2012=6
Sabado 9/6/2012=8
Domingo 10/6/2012=1

[20/05/2012_tx]
Num=4
0=20/05/2012
1=GRAMINEAS: niveles BAJOS, con 1-2 granos/m3 de aire
2=OLIVO: niveles BAJOS, con 0-1 granos/m3 de aire
3=QUERCUS: niveles BAJOS, con 1-2 granos/m3 de aire
4=PINUS: niveles BAJOS, con 0-1 granos/m3 de aire
[27/05/2012_tx]
Num=4
0=27/05/2012
1=Niveles BAJOS de polen de GRAMINEAS, con media de 3 granos/m3 de aire
2=Niveles BAJOS de polen de OLIVO, con media de 1 granos/m3 de aire
3=Niveles BAJOS de polen de QUERCUS, con media de 2 granos/m3 de aire
4=Niveles BAJOS de polen de PINUS, con media de 2 granos/m3 de aire
[3 06_tx]
Num=4
0=3 06
1=Niveles MEDIOS de PINUS, con 11 granos/m3 de aire.
2=Niveles MEDIOS de GRAMINEAS: con 3 granos/m3 de aire, que junto con las predicciones meteorologicas para la semana proxima, la fecha y los sintomas de pacientes en la actual, hacen prever que los niveles estaran mas altos.
3=Niveles BAJOS de OLIVO, con 0-1 granos/m3 de aire.
4=Niveles BAJOS de PLANTAGO, con 0-1 granos/m3 de aire.
[10/06/2012_tx]
Num=4
0=10/06/2012
1=Niveles MEDIOS de polen de GRAMINEAS (POA), con media de 7 granos/m3 de aire
2=Niveles MEDIOS de polen de PINUS, con media de 8 granos/m3 de aire
3=Niveles BAJOS de polen de OLIVO, con media de 1-3 granos/m3 de aire
4=Niveles BAJOS de polen de PLANTAGO, con media de 1 granos/m3 de aire
[06, con importante precipitacion y bajada/temperaturas._tx]
Num=0
0=06, con importante precipitacion y bajada/temperaturas.
[SEMANA 11-17/06/2012_tx]
Num=4
0=SEMANA 11-17/06/2012
1=Niveles MEDIOS de gramíneas con media de 2 granos/m3 de aire.
2=Niveles MEDIOS de pino, con media de 3 granos/m3 de aire.
3=Niveles BAJOS de olivo con media de 1 grano/m3 de aire.
4=Niveles BAJOS de Plantago, con media de 1 grano/m3 de aire.
Adjuntos
ParsearWEB.au3
Codigo Fuente.
(4.21 KiB) Descargado 185 veces
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2099
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Alergias - Grafica de Polen

Mensaje por BasicOs »

Gracias por el aporte, y salud con las alergias..
Salu22:)
Responder