Meteoclimatic
Software => Tu Web meteorológica => Mensaje iniciado por: kocher en 12 de Marzo de 2021, 10:55:51
-
Saludos a todos los amigos de Meteoclimatic.
Llevo pensando desde hace un tiempo, cual puede ser la mejor manera para, de forma grafica y sencilla, poder mostrar en nuestra web los avisos de AEMET para nuestra zona.
Hasta hace unos meses, funcionaban unos scripts en PHP, que tomaban los datos de:
http://www.meteoalarm.eu/es_ES/0/0/ES-Espana.html (http://www.meteoalarm.eu/es_ES/0/0/ES-Espana.html)
Además de responder muy lentamente, tengo noticias de que están remodelando totalmente sus sistema de avisos; el caso es que todos aquellos scripts han dejado de funcionar.
Todos los foros que he visitado, se encuentran con el mismo problema, sin haber encontrado la solución hasta el momento. :;
Creo que La mejor manera, en estos momentos, de obtener nuestra información, se encuentra en AEMET, aunque no conozco la forma de llevarlo a cabo; con la dificultad añadida de disponer de 2 tipos de avisos en las zonas que disponen de costa:
http://www.aemet.es/es/eltiempo/prediccion/avisos (http://www.aemet.es/es/eltiempo/prediccion/avisos)
- Avisos Costeros
- Avisos del interior
Espero que alguien más hábil que yo, pueda hacer la luz en este asunto. *+*
Muchas gracias
-
Seria viable el tomar los datos de los xml que genera aemet con los avisos ? es que no se tampoco que pagna se generaba antes con los script que comentas para ver la viabilidad del dato en xml..
-
Ocurrió hace creo que un año +- lo mismo con AEMET.... tenía unos avisos que parseaban sus tres páginas de avisos de una zona (hoy, mañana y pasado mañana) e hicieron la nueva web.... ahora es más fácil el sistema de avisos.... se han subido al moderno sistema de jsons y una vez lo tienes es sacar su contenido y crear una tabla más o menos elaborada *-* *-*
Os pongo mi script PHP por si os viene bien en el adjunto. Lee el json de AEMET configurando eso sí previamente la zona del aviso.
Esas zonas tienen un número de 6 cifras y en el script se pone la zona en codigozona en las opciones de configuración a principio del script.
Si hay avisos en la zona ese dígito se puede sacar del final de la URL donde está el aviso en AEMET entrando en los avisos y yendo a la zona, lo malo es que si no hay aviso en la zona no se puede entrar a esa URL. Por ejemplo si entramos en http://www.aemet.es/es/eltiempo/prediccion/avisos?l=752001&r=1 entramos en la zona de avisos de AEMET de Gipuzkoa litoral, pero no es accesible al no tener avisos activos.
Para los costeros, no hay que preocuparse ya que vienen con el código de la zona de aviso terrestre, de hecho el código lleva una C al final del número.
Sólo he encontrado el PDF de AEMET donde están todos los municipios con sus códigos y las zonas de avisos por CCAA y sus provincias:
http://www.aemet.es/documentos/es/eltiempo/prediccion/avisos/plan_meteoalerta/detalle_municipios_zonas_meteorologicas.pdf
Por ejemplo mi zona es la Vega del Segura y su código es el 733003. Ese es el que hay que poner.
Los otros dos campos son el nombre de la zona del aviso y la provincia.
La tabla resultante estará dividida en días y si el aviso está activo estará con fondo rojizo y con la palabra ACTIVO parpadeando.
Los estilos están al final, si sabéis editarlos podéis ponerle los colores que queráis a la tabla. La tabla no tiene anchura así que ocupará todo el ancho del contenedor en que la pongáis.
Eso sí.... cuidado en San Sebastián.... se te puede llenar a veces entre costeros y no costeros la página entera de avisos *+* *+* *+*
Probadlo y a ver qué tal.
-
Buenas noches a todos.
Saludos Zapal y jmviper ("el mago") jjjjj
#zapal: La mayoría de los aficionados han utilizado las plantillas de Leuven y Saratoga con sus propios sistemas de avisos basados en Meteoalarm.eu; a estos me refiero al decir que ya no funcionan:
https://support.leuven-template.eu/ (https://support.leuven-template.eu/)
https://saratoga-weather.org/scripts-EUwarning.php#EUwarning (https://saratoga-weather.org/scripts-EUwarning.php#EUwarning)
#jmviper
Eso sí.... cuidado en San Sebastián.... se te puede llenar a veces entre costeros y no costeros la página entera de avisos *+* *+* *+*
Definitivamente, eres un mago O:-)
Efectivamente. tu código funciona de maravilla:
http://kocher.es/Alertas_Avisos/avisosaemet.php (http://kocher.es/Alertas_Avisos/avisosaemet.php)
En mi caso no parpadea, quizás se daba a que, el suceso, debe ocurrir mañana
Apreciado jmviper , eres un genio apla3 apla3 apla3
Saludos desde San Sebastian
-
¿Sería factible imprimir tan solo el rectángulo con su color pertinente?
Me refiero a que, solo se mostrara el color del aviso y tan solo apareciera el texto resultante al pinchar en dicho rectángulo o en el signo +
-
Perfecto kocher :) :)
Aunque sería poner en tu caso Gipuzkoa litoral como nombre de la zona y Gipuzkoa la provincia, por lo menos para salir como están en AEMET, si no, parece que son los avisos de todo el País Vasco *+* *+*
¿Sería factible imprimir tan solo el rectángulo con su color pertinente?
Me refiero a que, solo se mostrara el color del aviso y tan solo apareciera el texto resultante al pinchar en dicho rectángulo o en el signo +
Quieres decir que en el nivel de riesgo de cada aviso no ponga el texto de Aviso amarillo etc y sólo apareciese con alguna acción tipo pinchar ese recuadro ??
Algo se podría hacer con JavaScript sí.
-
Humm
Aunque sería poner en tu caso Gipuzkoa litoral como nombre de la zona y Gipuzkoa la provincia, por lo menos para salir como están en AEMET, si no, parece que son los avisos de todo el País Vasco *+* *+*
jjjj realmente, Euskadi es muy pequeñica (como dicen los navarros) ..., no me importa que salga toda la información.
En cuanto a la forma de presentar la información, me refiero a algo parecido a esto:
http://kocher.es/Alertas_Avisos/avisosaemet-resumido.php (http://kocher.es/Alertas_Avisos/avisosaemet-resumido.php)
Aunque lo ideal sería que al colocar el puntero en + INFO, en vez de abrirse un enlace, se deslizara la información jjj
Ya se que no es muy elegante ser un pedigüeño, pero .....
Muchas gracias por todas tus creaciones: las aprecio mucho
-
pequeñica también lo decimos aquí en Murcia *+* *+* *+*
Aquí te lo dejo en otro adjunto con tu zona correspondiente, ya que aunque el País Vasco sea "pequeñico" *-* *-* tiene diferentes zonas de avisos.
Si teniendo avisos le das a +INFO se mostrarán y si estando le das a -INFO otra vez se esconderán. Creo que es ese el comportamiento que quieres. Si no hay avisos +INFO te llevará a la página de avisos de AEMET de tu zona.
Pruébalo a ver si se comporta como tú quieres ;)
-
¡Perfecto!:
http://kocher.es/Alertas_Avisos/avisosaemet-nuevo.php (http://kocher.es/Alertas_Avisos/avisosaemet-nuevo.php)
apla3 apla3 apla3 apla3 apla3 apla3 apla3
Eres un fenómeno :aplaude1:
-
Perfecto !! :) ;)
Saludos kocher
-
jmviper, has hecho una virguería jjjjjj
Ya lo he instalado en mi web.
Estuve discurriendo el que hacer y como hacerlo porque, dado que no se conocen de antemano el número de avisos que van a ocurrir, es complicado reservar un espacio para ellos, ya que puede quedar vacío o, al revés, invadir todo el espacio; así que, gracias a jmviper, he optado por presentar el anuncio de los avisos (digamos que un resumen), con el color del tipo de riesgo asignado. El que desee conocer la información completa, debe pinchar en +INFO que le llevará a otra página con la información en forma de tabla.
Caso de no existir ningún tipo e avisos, se mostrará "Sin Avisos" sobre fondo verde.
Si a alguien se le ocurre otra forma más elegante de presentarlo, no tiene más que opinar.
Muchas gracias jmviper.
-
ummmm algo como una ventana emergente con los avisos con lo de más info…. ya miraré si hay alguna librería con jQuery para hacerlo
Queda bien en tu página :)
-
Gracias jmviper
Estás en todo; me lees el pensamiento jjjj
-
Bueno, he estado liado creando un json con todas las zonas de avisos de todos los pueblos de España y me he demorado un poco en verte esto del popup *-* *-*
Para el "popup" de los avisos he encontrado una librería basada en jQuery (como casi todas) que tiene su propia referencia:
https://dev.vast.com/jquery-popup-overlay/
Se trata de referenciar jQuery si no se tiene y el jscript que se descarga del enlace que he puesto. Por ejemplo con estas tres líneas ya queda inicializado todo:
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="jscripts/jquery.popupoverlay.js"></script>
<script>
$(document).ready(function() {
// Initialize the plugin
$('#tabla_avisos').popup({
horizontal: 'center'
});
});
</script>
Yo tengo mi propia ruta a jquery.popupoverlay.js que habrá que poner bien en el caso de cada uno. El resto es identificar los elementos:
<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">
Solo hay que poner esa clase class="tabla_avisos_open" en el enlace del php. De todas formas lo pongo modificado al final de este mensaje.
Por mi parte tras el curro de poner asociar más de 8000 localidades a sus zonas de aviso en el json he creado una página para testearlo con cualquier localidad:
https://www.meteoarchena.es/avisosaemet.php?poblacion=archena&provincia=murcia
En la parte del query o petición tras el signo ?de la URL se pone la población y la provincia de la cual queremos que nos salga el aviso. Ignorará mayúsculas o acentos y espacios en blanco (se puede poner villaviejadeyeltes todo junto *+* *+*) pudiendo salir cualquier coincidencia, por ejemplo si en el query pongo poblacion=arch&provincia=mur me saldrá lo mismo y si hay coincidencia saldrá la primera solamente.
Creo que es el resultado esperado. Si lo pruebas a ver qué tal va ;)
-
Gran trabajo, ya lo tengo puesto en la web, gracias
-
Hola Carlos.
Según veo en tu web no has puesto bien el enlace al script:
jscripts/jquery.popupoverlay.js
Debes de poner bien la ruta si es otra o no saldrá el popup de los avisos cuando hayan.
-
Valla pensé que era algo opcional. Lo mirare.
Una duda podría configurarse para que cuando no haya avisos no muestre nada y cuando haya avisos si.
-
Valla pensé que era algo opcional. Lo mirare.
Si no lo quieres quita los enlaces a los scripts:
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="jscripts/jquery.popupoverlay.js"></script>
<script>
$(document).ready(function() {
// Initialize the plugin
$('#tabla_avisos').popup({
horizontal: 'center'
});
});
</script>
Una duda podría configurarse para que cuando no haya avisos no muestre nada y cuando haya avisos si.
Edita el script y en la salida en vez de esto:
if ($exit == 3 or $exit == 2 && $sinavisos) $resulavisos = '<div id="sin_riesgo">Avisos AEMET '.$nombrezona.'<span style="color: black; background-color: #32CD32; padding: 5px; font-size: 14px; margin-left: 15px;">Sin Avisos</span><a href="http://www.aemet.es/es/eltiempo/prediccion/avisos?l='.$codigozona.'" target="_blank" style="color:white;margin-left:15px;font-size:12px;">+ INFO</a></div>';
else $resulavisos = '<div style="border: 5px solid red;"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
echo $resulavisos;
Déjalo así:
if ($exit == 3 or $exit == 2 && $sinavisos) exit;
else $resulavisos = '<div style="border: 5px solid red;"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
echo $resulavisos;
-
Edita el script y en la salida en vez de esto:
if ($exit == 3 or $exit == 2 && $sinavisos) $resulavisos = '<div id="sin_riesgo">Avisos AEMET '.$nombrezona.'<span style="color: black; background-color: #32CD32; padding: 5px; font-size: 14px; margin-left: 15px;">Sin Avisos</span><a href="http://www.aemet.es/es/eltiempo/prediccion/avisos?l='.$codigozona.'" target="_blank" style="color:white;margin-left:15px;font-size:12px;">+ INFO</a></div>';
else $resulavisos = '<div style="border: 5px solid red;"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
echo $resulavisos;
Déjalo así:
if ($exit == 3 or $exit == 2 && $sinavisos) exit;
else $resulavisos = '<div style="border: 5px solid red;"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
echo $resulavisos;
Eres un artista!! Eso si de la primera linea si no quito el exit ultimo no me carga la pagina web.
Al final lo he dejado siempre visible, con tu permiso he modificado el script tanto para la.web como para la version movil y básicamente esta tal y como lo tengo en la web(diseño parecido a los script de Leuven)
Si no hay aviso sale la banda verde completamente. Si hay avisos amarillo, naranja o rojo se muestra la banda del color correspondiente. Aunque esta a falta de probarlo, pero en toda España hoy esta sin avisos así que no puedo probar cambiando el código de la zona a otro con avisos.
De todas formas me parecen increíbles los script que eres capaz de crear.... apla3 apla3 apla3
Hoy mismo me he apañado uno (copy and paste con alguna modificación) para que si la raspberry no responde al ping por el puerto 22 , (se bloquee, me quede sin internet en casa etc...) me avisa en este caso por telegram (eso si ejecutando el script desde el vps)
-
Eso si de la primera linea si no quito el exit ultimo no me carga la pagina web.
Está mal puesto por mi parte sí, el exit termina el script y éste está insertado en el de tu página por lo que a partir de él no saldría ya lo siguiente. Lo mejor sería poner una salida sin texto pero si lo has dejado así mejor. Yo lo tengo así y queda bien avisando de que no hay avisos *+* *+*.
Que lo disfrutes, y si ves algún fallo no dudes en decirlo ;).
Saludos
-
Saludos jmviper
Aunque tarde, te agradezco muchísimo el trabajo que has realizado para todos los aficionados Españoles que nos habíamos quedado sin el útil servicio de las alarmas de Meteoalarm (en España: AEMET).
No quiero ni imaginarme lo que has tenido que hacer para personalizar los avisos de todas las regiones Españolas.
Además, el diseño está muy logrado:
http://kocher.es (http://kocher.es)
Nos has dado una lección magistral.
Muchísimas gracias y saludos desde San Sebastián
-
Hola jmviper ¿alguna explicación porque los segundos van de dos en dos y en números impares en mi versión móvil?
Es algo que he tocado en el script. Si lo quito va bien (//<?php include ('avisosaemetmobile.php'); ?>)
En la versión normal lo incluí en header.php. En la versión móvil lo añadí directamente en las primeras lineas de mobile.php
Actualizado: 03/05/21 16:27:33 hace 5 segundos
Ya no se que puede ser
<?php
########### Configuración ###########
$codigozona = ''; // Código de la zona de avisos. Se puede ver en el pdf de AEMET: //http://www.aemet.es/documentos/es/eltiempo/prediccion/avisos/plan_meteoalerta/detalle_municipios_zonas_meteorologicas.pdf
/detalle_municipios_zonas_meteorologicas.pdf
$nombrezona = ''; // Nombre de la zona del aviso.
$provincia = '';
#####################################
if (!$codigozona) exit('Hay que poner el código de la zona');
date_default_timezone_set('Europe/Madrid');
function icono_aviso($icono, $nivel){
$res = "";
global $res1;
$res1 = "";
if (strstr($icono, 'PR')) {$res = 'PR'; $res1 = 'Lluvias';}
elseif (strstr($icono, 'TO')) {$res = 'TO'; $res1 = 'Tormentas';}
elseif (strstr($icono, 'VI')) {$res = 'VI'; $res1 = 'Viento';}
elseif (strstr($icono, 'AT')) {$res = 'AT'; $res1 = 'Temperaturas máximas';}
elseif (strstr($icono, 'BT')) {$res = 'BT'; $res1 = 'Temperaturas mínimas';}
elseif (strstr($icono, 'NE')) {$res = 'NE'; $res1 = 'Nevadas';}
elseif (strstr($icono, 'NI')) {$res = 'NI'; $res1 = 'Nieblas';}
elseif (strstr($icono, 'DH')) {$res = 'DH'; $res1 = 'Deshielos';}
elseif (strstr($icono, 'RI')) {$res = 'RI'; $res1 = 'Rissaga';}
elseif (strstr($icono, 'VS')) {$res = 'VS'; $res1 = 'Visibilidad';}
elseif (strstr($icono, 'AL')) {$res = 'AL'; $res1 = 'Aludes';}
elseif (strstr($icono, 'GA')) {$res = 'GA'; $res1 = 'Galernas';}
elseif (strstr($icono, 'CO')) {$res = 'CO'; $res1 = 'Costeros';}
return 'http://www.aemet.es/imagenes/gif/iconos_avisos/'.$res.$nivel.'.gif';
}
$avisoamar = ""; $avisonara = ""; $avisorojo = "";
$semana = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
$meses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
$riesgo = ['', '<div span class="avisos1">Avisos AEMET Campiña Sevillana Alerta Roja + INFO</div span class>', '<div span class="avisos2">Avisos AEMET Campiña Sevillana Alerta Naranja + INFO</div span class>', '<div span class="avisos3">Avisos AEMET Campiña Sevillana Alerta Amarilla + INFO</div span class>'];
$lista = [];
$lista[] = date('Y-m-d');
$lista[] = date('Y-m-d', strtotime("+1 day"));
$lista[] = date('Y-m-d', strtotime("+2 day"));
$jsons = [];
for ($i = 0; $i < 3; $i++){
$jsons[] = json_decode(file_get_contents('http://www.aemet.es/es/api-eltiempo/resumen-lista-avisos/PB/'.$lista[$i].'T12:00:00+02:00/D+0/'.$codigozona));
}
$res = "";
$exit = 0;
$horaact = time();
$activo = "";
$sinavisos = "";
$activonot = "";
$finaviso = $flagaviso = 0;
foreach ($jsons as $dia=>$items) {
if (empty($items->{'orden_avisos'})) {$exit += 1; continue;}
else {
$epoch = strtotime($lista[$dia]);
$res .= '<tr><th class="dia_tabla" colspan="8">'.$semana[date('w',$epoch)].' '.date('j',$epoch).' de '.$meses[date('n',$epoch)-1].'</th></tr>';
foreach ($items as $item2){
$res .='<tr><th>Fenómeno</th><th>Nivel de riesgo</th><th>Valor</th><th>Probabilidad</th><th>Zona de avisos</th><th>Hora de comienzo</th><th>Hora de finalización</th><th>Comentario</th></tr>';
foreach ($item2 as $item3){
++$flagaviso;
$ini = strtotime($item3[1]->{'Onset'});
$fin = strtotime($item3[1]->{'Expire'});
if ($horaact > $fin) {$finaviso += 1; continue;}
elseif ($horaact > $ini and $horaact < $fin and date('d',$epoch) == date('d')) {$activo = ' class="activo"'; $activonot = '<br><span class="blinking" style="font-weight: bold; display: inline-block; margin-top:10px;">ACTIVO</span>';}
$nivel = $item3[1]->{'Nivel'};
if ($nivel == 1) $avisorojo = 1;
elseif ($nivel == 2) $avisonara = 1;
elseif ($nivel == 3) $avisoamar = 1;
$res .= '<tr'.$activo.'><td class="estrecho"><img src="'.icono_aviso($item3[1]->{'FemParam'}, $nivel).'" /><br/>'.$res1.'</td><td>'.$riesgo[$nivel].$activonot.'</td><td class="estrecho">'.$item3[1]->{'Valor'}.'</td><td>'.$item3[1]->{'Prb'}.'</td><td>'.$nombrezona.'-'.$provincia.'</td><td class="start">'.date('d-m-Y H:i', $ini).'</td><td class="end">'.date('d-m-Y H:i', $fin).'</td><td style="width:25%;">'.htmlentities($item3[1]->{'Descrption'}).'</td></tr>';
$activo = $activonot = "";
}
if ($finaviso == $flagaviso) {$res = ""; $sinavisos = 1;}
}
}
}
$filaavisos = "";
if ($avisorojo) $filaavisos .= $riesgo[1];
if ($avisonara) $filaavisos .= $riesgo[2];
if ($avisoamar) $filaavisos .= $riesgo[3];
$resulavisos = "";
if ($exit == 3 or $exit == 2 && $sinavisos);
else $resulavisos = '<div class="tabla_avisos_open" style="border: 5px solid red;"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open"class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 10px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
echo $resulavisos;
?>
<style>
#tabla_avisos{
display: none;
width: 80%;
border-collapse: collapse;
border: 1px solid black;
font-size: 12px;
font-family: sans-serif;
}
.estrecho{
width:5%;
}
#tabla_avisos th{
padding: 5px;
border: 1px solid black;
background-color: lightblue;
}
#tabla_avisos td{
border: 1px solid black;
text-align: center;
background-color: #E0E0E0;
padding: 5px;
}
.dia_tabla{
background-color: #1b488e !important;
color: white;
font-size: 12px;
text-align: center;
}
.avisos3 {
background-color: yellow;
color:black;
border: 0px solid black;
padding:0px;
}
.avisos2 {
background-color: orange;
color:black;
border: 0px solid black;
padding:0px;
}
.avisos1 {
background-color: red;
color:black;
border: 0px solid black;
padding:0px;
}
#riesgo {
background-color: ;
font-size: 14px;
font-weight: bold;
text-align: center;
color: white;
padding: 0px;
}
#riesgo span{
margin-left: 7px;
font-size: 14px;
}
#sin_riesgo {
background-color: #32CD32;
font-size: 14px;
font-weight: bold;
text-align: center;
color: black;
padding: 0px;
border: 0px solid #32CD32;
}
.activo td{
background-color: #ff7272 !important;
}
.blinking{
animation: blinkingText 1.2s infinite;
}
@keyframes blinkingText{
0%{ color: #000; }
49%{ color: #000; }
60%{ color: transparent; }
99%{ color:transparent; }
100%{ color: #000; }
}
</style>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="jquery.popupoverlay.js"></script>
<script>
$(document).ready(function() {
// Initialize the plugin
$('#tabla_avisos').popup({
horizontal: 'center'
});
});
</script>
Edito para resubir script ya que si había 2 avisos amarillo o naranja no se mostraba bien.
-
Saludos jmviper
Aunque tarde, te agradezco muchísimo el trabajo que has realizado para todos los aficionados Españoles que nos habíamos quedado sin el útil servicio de las alarmas de Meteoalarm (en España: AEMET).
No quiero ni imaginarme lo que has tenido que hacer para personalizar los avisos de todas las regiones Españolas.
Además, el diseño está muy logrado:
http://kocher.es (http://kocher.es)
Nos has dado una lección magistral.
Muchísimas gracias y saludos desde San Sebastián
Hola kocher
Celebro que te haya servido y sirva a los demás. La verdad es que lo hice sólo para mí pero.... con tu petición dije de hacerlo público y que sirviera a más de uno :)
Que lo disfrutes y que AEMET no cambie dentro de poco el sistema o habrá que estudiar otro nuevo *+* *+*
Saludos
Hola jmviper ¿alguna explicación porque los segundos van de dos en dos y en números impares en mi versión móvil?
Es algo que he tocado en el script. Si lo quito va bien (//<?php include ('avisosaemetmobile.php'); ?>)
En la versión normal lo incluí en header.php. En la versión móvil lo añadí directamente en las primeras lineas de mobile.php
Actualizado: 03/05/21 16:27:33 hace 5 segundos
Ya no se que puede ser
No incluyas en ese script del adjunto (avisosaemetmobile.php) las cabeceras al inicio include("top.php"); ya que se llaman dos veces, ahí y en mobile.php
Eso hace que se incluya dos veces el ajaxCUwx.js y dos veces los setInterval que hacen funcionar ese contador por lo que hacen ese efecto de ir cada dos segundos cuando en verdad suman los dos muy rápidamente al ejecutarse a la vez.
Como digo, hay que tener cuidado en la inclusión de cabeceras y demás con PHP ya que se pueden repetir scripts y suceder comportamientos indeseados. Y ojo con los setInterval…. si se llaman unos dentro de otros pueden colapsar al servidor o al navegador con peticiones que se multiplicarían.... yo he tenido esos problemas y menos mal que jantoni me vio que el servidor estaba escribiendo peticiones en el log a cascaporro y ya vi que tenía mal por ahí los setInterval
-
Hola jmviper ¿alguna explicación porque los segundos van de dos en dos y en números impares en mi versión móvil?
Es algo que he tocado en el script. Si lo quito va bien (//<?php include ('avisosaemetmobile.php'); ?>)
En la versión normal lo incluí en header.php. En la versión móvil lo añadí directamente en las primeras lineas de mobile.php
Actualizado: 03/05/21 16:27:33 hace 5 segundos
Ya no se que puede ser
No incluyas en ese script del adjunto (avisosaemetmobile.php) las cabeceras al inicio include("top.php"); ya que se llaman dos veces, ahí y en mobile.php
Eso hace que se incluya dos veces el ajaxCUwx.js y dos veces los setInterval que hacen funcionar ese contador por lo que hacen ese efecto de ir cada dos segundos cuando en verdad suman los dos muy rápidamente al ejecutarse a la vez.
Como digo, hay que tener cuidado en la inclusión de cabeceras y demás con PHP ya que se pueden repetir scripts y suceder comportamientos indeseados. Y ojo con los setInterval…. si se llaman unos dentro de otros pueden colapsar al servidor o al navegador con peticiones que se multiplicarían.... yo he tenido esos problemas y menos mal que jantoni me vio que el servidor estaba escribiendo peticiones en el log a cascaporro y ya vi que tenía mal por ahí los setInterval
[/quote]
Entiendo lo que me dices, pero si no incluyo ese include("top.php");
La plantilla móvil se me descuadra
-
Solucionado, despiece el top.php
Y añadiendo esto al inicio del script de avisosaemet.php ya no se descuadra y el contador de segundos va bien.
?php
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
-
El contador todavía va mal en mobile.php ya que se sigue llamando dos veces al ajaxCUwx.js
-
Lo se es que aun no lo había corregido :) ahora ya si...
-
Perfecto :)
-
Por cierto... en la última versión de MX (build 3129) se han implementado notificaciones por email de las alarmas. De momento en el apartado de la lluvia solo están las alarmas de lluvia hoy superior a e intensidad de precipitación superior a
Seguramente se implementen más bajo demanda en siguientes versiones.
-
Gracias lo vi ayer, puede ser interesante, voy a intentar no actualizar inmediatamente CumulusMX, así me evito errores graves al menos los primeros dias
-
Voy a volver a darte la lata....
En la personalización que hice de tu script si pruebo un código de solo alerta amarilla salen acentos correctos.
Pero si pruebo un código con 2 alertas (amarilla y naranja) los acentos salen mal
Me explico
Si en la linea escribo así:
$nombrezona = "Campiña Sevillana"; // Nombre de la zona del aviso.
La web (mobile.php) se ve perfecta pero el titulo del aviso sale asi:
Avisos AEMET Campiña Sevillana Alerta Amarilla + INFO
Si uso
$nombrezona = "Campiña Sevillana"; // Nombre de la zona del aviso.
Me pasa lo mismo pero al reves
Se ve el titulo de avisos bien, pero todos los acentos de la web mobile salen mal :(
Código usado es el 610404
Llevo unos días dándole vueltas, cierto es que solo puedo probar cuando tengo un código con 2 alertas.
Básicamente lo modificado es que salgan las bandas a lo ancho y del fondo del color de la alerta, y que al pulsar en cualquier lado te salga el popup o en caso de no haber alertas te envié a la web de la aemet.
Se que el problema esta en
$riesgo = ['', '<div class="avisos1">Avisos AEMET '.$nombrezona.' Alerta Roja + INFO</div class>', '<div class="avisos2">Avisos AEMET '.$nombrezona.' Alerta Naranja + INFO</div span class>', '<div class="avisos3">Avisos AEMET '.$nombrezona.' Alerta Amarilla + INFO</div span class>'];
P.D. No se el motivo pero si se usa código de las Islas Canarias estos no funcionan :(
Adjunto php de tu script modificado y de mi mobile.php
-
Hola de nuevo Carlos
Todo lo de las codificaciones es un lío y más en las páginas web de Saratoga que usan charset para el europeo occidental charset=ISO-8859-1
Después están también las codificaciones de las páginas. Por ejemplo la que has adjuntado de avisosaemetmobile.php está codificada en UTF-8 y la de mobile.php en ANSI. Todo eso lo puedes ver abriendo los archivos con Notepad++ y viendo en su barra inferior derecha la codificación. Para codificarlo a UTF-8 ve a Codificación -> Codificar en UTF-8 sin BOM
Si incrustas scripts te encuentras con que se llaman a diferentes charsets. Abre esto en el navegador view-source:http://www.meteoviso.es/mobile.php (en Chrome por ejemplo) y verás cómo sale al principio una línea con charset="utf-8" y más adelante otra con content="text/html; charset=ISO-8859-1" además de varias declaraciones de documento !DOCTYPE etc ya digo que por se incluyen diferentes scripts.
Es uno de los quebraderos de cabeza de estas páginas que se llaman unas a otras como una muñeca rusa y a la hora de personalizarlas aparecen esos problemas con la codificación del charset en la cabecera y de la página.
En cuanto a lo de los avisos de Canarias.... gracias por ponerlo, la verdad es que nunca los había probado y ahora entiendo una cosa de la URL del json que lee los avisos.... en la línea que los llama [b]$jsons[] = json_decode(file_get_contents('http://www.aemet.es/es/api-eltiempo/resumen-lista-avisos/PB/'.$lista[$i].'T12:00:00+02:00/D+0/'.$codigozona));[/b]
cambia PB por CAN
PB es para la Península y Baleares y CAN obviamente para Canarias. Como se ve en la página de avisos de AEMET hay dos pestañas para cada zona.
Paciencia con lo de la codificación porque es un lío.
-
Es increíble, el ruido que me están dando los caracteres especiales. Creo que ya di con la solución, aunque pendiente de probar con próximas alertas amarillas y naranjas. Espero que si algún día hay una roja no vuelva a empezar
Con
$nombrezona = 'Campiña Sevillana'; // Nombre de la zona del aviso.
$riesgo = ['', '<div span class="avisos1">Avisos AEMET-'.$nombrezona.' Alerta Roja</div span>', '<div span class="avisos2">Avisos AEMET-'.$nombrezona.' Alerta Naranja</div span>', '<div span class="avisos3">Avisos AEMET-'.$nombrezona.' Alerta Amarilla</div span>'];
No puede tener espacios en blanco entre AEMET y $nombrezona si añado un tampoco.
No es lo mas practico, pero probé bastante cosas que hay en Internet sobre la codificación y nada ;(
Seguiré investigando y gracias!!!
-
Valla o es algo puntual o ha dejado de funcionar el magnífico script de avisos de Aemet. Supuestamente estamos en alerta amarilla y naranja y no muestra nada. He probado con el script original, por si mi modo manazas era el culpable
https://ibb.co/cFRYS1N
https://ibb.co/rkJqns6
P.D. Que raro si pongo el codigo mío 614102 nada, y si pongo el 770301, funciona, que raro
P.D. 2 Vale no se el motivo, pero he observado que si en el mismo código hay 2 alertas, por ejemplo amarilla y naranja, no muestra ninguna. En el momento que la alerta naranja termino (a las 18:59) ya si sale la naranja en el script. ¿Tiene solución jmviper?
P.D. 3 Pues no lo entiendo pruebo con el código 645301 con avisos naranja y amarillo y funciona. Habrá que ver si la próxima falla....
-
Creo que tiene que ver con la codificación de caracteres, en el comentario del aviso pone:
Tormentas muy fuertes al este de la comarca, en el entorno de �cija
Vamos que sale mal codificado incluso para ellos.
Puede que sea problema de eso. De todas formas ahora deben de estar atareados con los avisos modificándolos en tiempo real casi. De momento sale el que hay activo de la Campiña sevillana:
https://www.meteoarchena.es/avisosaemet.php?poblacion=elvisodelalcor&provincia=sevilla
El naranja ya pasó.
-
Buenas tardes. Una observación para el compañero CarlosLSev: has modificado el script original y has puesto "Alerta Amarilla", Aemet no emite alertas, sino avisos, como pone en el original.
Un saludo.
-
Creo que tiene que ver con la codificación de caracteres, en el comentario del aviso pone:
Tormentas muy fuertes al este de la comarca, en el entorno de �‰cija
Vamos que sale mal codificado incluso para ellos.
Puede que sea problema de eso. De todas formas ahora deben de estar atareados con los avisos modificándolos en tiempo real casi. De momento sale el que hay activo de la Campiña sevillana:
https://www.meteoarchena.es/avisosaemet.php?poblacion=elvisodelalcor&provincia=sevilla
El naranja ya pasó.
Puede ser, es algo raro... Lo observaré.. gracias
-
Buenas tardes. Una observación para el compañero CarlosLSev: has modificado el script original y has puesto "Alerta Amarilla", Aemet no emite alertas, sino avisos, como pone en el original.
Un saludo.
Buenas, como bien indicas eso es cierto. Pero al igual que las precipitaciones se miden en mm y yo las cambie a lo que vulgarmente conócenos de toda la vida como litros. Con eso hice lo mismo, siempre al menos por esta zona se ha dicho alerta amarilla, o naranja, y no aviso amarillo o naranja. De todas forma es un simple titulo que podemos cambiar a nuestro gusto y para gusto los colores. :) Saludos
-
Buenas, muchas gracias jmviper, ya puesto en tiempoensevilla.es(versión escritorio y móvil) apla3
Ha terminar de probarlo cuando lleguen los avisos.
Saludos,
José Ramón
-
:)
-
Gracias a quien corresponda, mi web ahora es más completa, utilizando algún código de los publicados por aquí.
https://dealmansa.com/meteo/ (https://dealmansa.com/meteo/)
-
Buenas
Tenia implementados los advisory de meteoalarm con el script de saratoga get-meteoalarm-warning-inc.php y aunque funcionaban tenian algunos problemas. Se me ocurrio pasar por el foro y aunque muy tarde me he decidido a implementar este, no con pocas dificultades pues mis conocimientos en PHP son cero patatero. Voy copiando y pegando lo que veo.
La web es
https://www.meteosanjuan.com/ (https://www.meteosanjuan.com/)
Para el "popup" de los avisos no me ha funcionado el enlace de descarga al "jscripts/jquery.popupoverlay.js" en su lugar realice una busqueda por internet y me lo baje de un repositorio. Espero que sea el adecuado.
Gracas al creador, creo que jmviper, por crear y compartir
Sugerencias, notificaciones de fallos y mejoras que veais siempre son bien recibidas.
-
Bueno con trabajo, no soy para nada experimentado en la programacion PHP he logrado hacerlo funcionar. Sin embargo hay un aspecto que me parece chocante, cuando el aviso es nivel amarillo el borde del recuadro es de color rojo. Entiendo que debia adecuarse al nivel del aviso.
¿Alguien capaz de modificarlo?
Un saludo y gracias
-
Bueno con trabajo, no soy para nada experimentado en la programacion PHP he logrado hacerlo funcionar. Sin embargo hay un aspecto que me parece chocante, cuando el aviso es nivel amarillo el borde del recuadro es de color rojo. Entiendo que debia adecuarse al nivel del aviso.
¿Alguien capaz de modificarlo?
Un saludo y gracias
A mí me sale en amarillo el recuadro.
-
Es curioso no se por que pero hablando con meteosanjuan yo mismo comprobé lo del borde y salía rojo en aviso amarillo o con aviso amarillo y naranja al mismo tiempo (https://i.ibb.co/xgVrhKk/test.jpg) (https://ibb.co/xgVrhKk)
La primera captura es de la web de kocher que pasa eso exactamente
Y la última añadí esto al código reemplazando la parte final para que el borde salga del color del aviso, si hay más de 1 aviso al mismo tiempo, deberia mostrar el borde del aviso más importante
Linea 109 en adelante
// Inicializa la variable de la clase CSS
$classAvisos = 'avisos0';
// Determina la clase según la prioridad de los avisos
if ($avisorojo == 1) {
$classAvisos = 'avisos1';
} elseif ($avisonara == 1) {
$classAvisos = 'avisos2';
} elseif ($avisoamar == 1) {
$classAvisos = 'avisos3';
}
if ($exit == 3 or $exit == 2 && $sinavisos) $resulavisos = '<div id="sin_riesgo">Avisos AEMET '.$nombrezona.'<span style="color: black; background-color: #32CD32; padding: 5px; font-size: 14px; margin-left: 15px;">Sin Avisos</span><a href="http://www.aemet.es/es/eltiempo/prediccion/avisos?l='.$codigozona.'" target="_blank" style="color:white;margin-left:15px;font-size:12px;">+ INFO</a></div>';
else $resulavisos = '<div class="' . $classAvisos . '"><div id="riesgo">Avisos AEMET '.$nombrezona.$filaavisos.'<a class="tabla_avisos_open" style="color:white; cursor: pointer; margin-left:15px; font-size: 12px;">+ INFO</a></div><table id="tabla_avisos">'.$res.'</table></div>';
-
Buenas tardes creo que el script de avisos tiene 2 problemas, primero que muestra el borde rojo cuando hay un aviso amarillo , o naranja, debería mostrar amarillo si es amarillo, naranja si es naranja o si hay amarillo y naranja el naranja. Eso ya creo que se corrige con lo que puse más arriba.
Pero vengo observando que hoy en campiña sevillana hay aviso naranja , mañana aviso amarillo y sábado amarillo. El aviso de hoy no se muestra el naranja. Algún alma caritativa sabría decir cuál es el problema, jmviper se esfumó y mis conocimientos no dan para averiguar el por qué.
Gracias
-
¡Hola!
Para complementar el estupendo script de jmviper, he instalado en mi Web meteogajanejos.com (http://meteogajanejos.com) 3 “cositas”:
- Meteograma
- UnWX
- Widget de Windy
La Web, la he generado a partir de la plantilla de CumulusMX versión 3.28.6, b:3283, y con la inestimable ayuda de jantoni, jmviper, guisado, kocher, etc. etc., leyendo y releyendo multitud de hilos en este foro (estoy aprendiendo muuuuchas cosas desde que hace 3 meses ingresé en Meteoclimatic 8) :) ;D). La plantilla que viene con esta versión de CumulusMX me encanta, ya que me parece muy “limpia” y además responsive, por lo que se adapta perfectamente para hacer scrolling en móviles, ya que tener que estar haciendo zoom o pellizcando me parece más engorroso. Hoy en día, la mayoría de personas que consultamos Internet, lo hacen desde móviles o tablets. Y por otra parte, he dado a la Web tanta importancia o más a la predicción que a la observación, pues en mi pueblo se suelen interesar, resumiendo, por qué temperatura hace, la mínima, la máxima, y cuánto ha llovido, pero también fundamentalmente por qué tiempo va a hacer.
Así que, por si alguien se interesa, os detallo las 3 opciones de complementar avisos:
Meteograma:
Es una aplicación para Android con API para poder generar el meteograma para insertarlo en páginas Web o iOS. Para mí, la mejor aplicación de predicción meteorológica en Android, ya que considero que un meteograma es la mejor forma de consultar las predicciones, y la cantidad de proveedores / modelos numéricos seleccionables en la versión Premium, junto con las casi infinitas posibilidades de configuración, hacen que me parezca una pasada. Compré la versión Premium hace 5 años por 8€ y desde entonces ha estado el meteograma instalado en mi móvil (además, pago 5€ al año para salvar el caché de los servidores).
No es la típica aplicación del tiempo en la que instalas, geolocaliza y miras la predicción. Aquí hay que dedicar bastante tiempo, yo diría que horas, para dejar el meteograma a nuestro gusto. Si generas el meteograma en Android, luego lo puedes exportar a la API para generar el enlace a insertar en la Web. En mi caso, tengo seleccionado como proveedor weather.com (The Weather Channel + Wunderground), que a su vez son propiedad de IBM, con modelo de predicción propio, y bajo mi experiencia, muy certero. Hay quien dice que no ofrece AEMET como proveedor, pero es que AEMET no tiene modelo propio de predicción, ya que utiliza el ECMWF en combinación con Arome y otros modelos globales y regionales.
Y para el caso que nos ocupa, he activado en la cabecera los AVISOS oficiales, “truncando” el texto, de manera que aparezca la frase AVISOS: tormentas, lluvia, etc. en el color del aviso, y también he activado la “barra de alertas”, colocándola sobre las flechas de viento en la parte inferior, para que quede de manera muy gráfica el periodo que abarcan los AVISOS, también en el color del aviso.
Por otra parte, Mike, el desarrollador, responde muy rápido los correos con dudas o sugerencias.
Enlace a la aplicación de Android:
https://play.google.com/store/apps/details?id=com.cloud3squared.meteogram&hl=es
Enlace a la Web:
https://meteograms.com/#/40.8424,-2.896,12/48/
Enlace a la API meteorológica:
https://api.meteograms.com/
UnWX:
Es también una aplicación para Android, en la que pago 1,5€ al año para desbloquear todas las opciones. Lleva en mi móvil también desde hace años, ya que genera avisos por sistema SMS (no hace falta conexión a Internet), y en cuanto AEMET activa un determinado aviso, de inmediato UnWX te lo notifica.
Tiene también página Web, y tanto en el meteograma como en el script de jmviper, la he puesto como enlace al clicar en +Info, ya que la web oficial de AEMET no me gusta, pues no consigo visualizar un único mapa que indique todos los avisos activos para los próximos 3 días, cosa que sí hace UnWX.
Enlace a la aplicación de Android:
https://play.google.com/store/apps/details?id=de.mdiener.unwetter.gm&hl=es_419
Enlace a la Web:
https://www.unwx.app/pwa/
Widget de Windy:
Windy y Meteoblue me parecen las dos mejores Webs y aplicaciones de mapas meteorológicos. Para mi Web, he optado por insertar el widget que ofrece Windy, escogiendo para su visualización la capa de avisos, en la que aparece el color del aviso, junto con los símbolos del tipo de aviso.
Enlace a la aplicación de Android:
https://play.google.com/store/apps/details?id=com.windyty.android&hl=es_419
Enlace a la Web:
https://www.windy.com/es/-Lluvia-truenos-rain?rain,41.150,-2.032,7,m:eNfaf4l
Con todo esto, al acceder la mi página Web, se ve el script de avisos de jmviper, luego el meteograma con los avisos activados en la cabecera (si los hay) y en la barra inferior, y un poco más abajo, el mapa de avisos de Windy.
Os adjunto imagen (una imagen vale más que mil palabras) y listado completo de proveedores que ofrece Meteograma.
Y después de este rollete, me despido de inmediato.
¡Adiosss! ;D
-
Hola ¿y cómo se hace para insertarlo en el código html de la plantilla genérica que trae Cumulus MX?
Gracias.
Ocurrió hace creo que un año +- lo mismo con AEMET.... tenía unos avisos que parseaban sus tres páginas de avisos de una zona (hoy, mañana y pasado mañana) e hicieron la nueva web.... ahora es más fácil el sistema de avisos.... se han subido al moderno sistema de jsons y una vez lo tienes es sacar su contenido y crear una tabla más o menos elaborada *-* *-*
Os pongo mi script PHP por si os viene bien en el adjunto. Lee el json de AEMET configurando eso sí previamente la zona del aviso.
Esas zonas tienen un número de 6 cifras y en el script se pone la zona en codigozona en las opciones de configuración a principio del script.
Si hay avisos en la zona ese dígito se puede sacar del final de la URL donde está el aviso en AEMET entrando en los avisos y yendo a la zona, lo malo es que si no hay aviso en la zona no se puede entrar a esa URL. Por ejemplo si entramos en http://www.aemet.es/es/eltiempo/prediccion/avisos?l=752001&r=1 entramos en la zona de avisos de AEMET de Gipuzkoa litoral, pero no es accesible al no tener avisos activos.
Para los costeros, no hay que preocuparse ya que vienen con el código de la zona de aviso terrestre, de hecho el código lleva una C al final del número.
Sólo he encontrado el PDF de AEMET donde están todos los municipios con sus códigos y las zonas de avisos por CCAA y sus provincias:
http://www.aemet.es/documentos/es/eltiempo/prediccion/avisos/plan_meteoalerta/detalle_municipios_zonas_meteorologicas.pdf
Por ejemplo mi zona es la Vega del Segura y su código es el 733003. Ese es el que hay que poner.
Los otros dos campos son el nombre de la zona del aviso y la provincia.
La tabla resultante estará dividida en días y si el aviso está activo estará con fondo rojizo y con la palabra ACTIVO parpadeando.
Los estilos están al final, si sabéis editarlos podéis ponerle los colores que queráis a la tabla. La tabla no tiene anchura así que ocupará todo el ancho del contenedor en que la pongáis.
Eso sí.... cuidado en San Sebastián.... se te puede llenar a veces entre costeros y no costeros la página entera de avisos *+* *+* *+*
Probadlo y a ver qué tal.