alexbm8_P6_peti

code format="javascript" /*************************************
 * PRÁCTICA 6: APLICACIÓN AJAX   *
 * Alejandro Barea Montoya     *

var request; // Se emplea para realizar las peticiones AJAX al servidor var div;// Esta variable auxiliar se usa para indicarle al método escribe_RSS el div donde ha de insertar el código HTML var dir_div2 = 'https://etsiit.ugr.es/apps/tablon/rss.php'; // Por si modificamos el número de titulares de la lista de feeds, éste será el enlace por defecto, además hace referencia al feed mostrado en el div2 var dir_div1; // En este caso hace referencia al feed mostrado en el div1 var codigo; // Aquí se almacena el código HTML perteneciente a los feeds almacenados en las cookies. Debe ser global, porque se usa en varios métodos.

// Lo primero que hacemos, es procesar las cookies guardadas en el cliente (en caso de que éstas existan) var a = document.cookie.split(";") // Separamos por ";" var n, v; var pos; var urls = new Array; // Almacena la URL de cada feed almacenada por el usuario en las cookies var nombres = new Array; // Almacena el título de dicha fuente

for (var i=2; i<a.length; i++) { // Generalmente, los dos primeros elementos no nos interesan, a veces, ocurre que tampo el tercero, por eso incluimos el caso de emergencia pos = a[i].indexOf("="); nombres[i-2] = a[i].substring(0, pos); // Seleccionamos las cadenas de caracteres que delimitan el nombre del feed y su URL urls[i-2] = unescape(a[i].substring(1 + pos, a[i].length)); }

// Función que se encarga de realizar la petición del RSS introducido manualmente por el usuario en el cuadro de texto function pide_RSS {

div = 1; // Hacemos referencia al div que nos interesa request = new XMLHttpRequest; var url = document.getElementById('url').value; dir_div1 = url; var cuantos = document.getElementById('cuantos').value; var peticion_str = 'http://swecai.ugr.es/~alexbm8/P6alex/server.cgi?url='+encodeURIComponent(url)+'&num_elementos='+cuantos; request.open('GET', peticion_str, true); request.onreadystatechange = escribe_RSS; // Llamamos a la función que se ejecutará al recibir la respuesta request.send(null); }

// Función que se encarga de procesar la respuesta XML enviada por el servidor y mostrarla en la página del cliente function escribe_RSS{

if ( request.readyState == 4 ) { if ( request.status == 200 ) {

var doc = request.responseXML; var root = doc.documentElement; var items = root.getElementsByTagName('item');

// en función del contenedor destino pondremos un título u otro if (div == 1) var html = " " + dir_div1 + " "; if (div == 2) var html = " " + dir_div2 + " "; if (div == 3){ var html = ""; alert("Respuesta recibida, acepte todas las ventanas para continuar"); // Ayuda a la sincronización }

html += "";

for ( var i = 0; i < items.length; i ++ ){ // Recorremos todas las noticias del feed obteniendo título, url y descripción var title = items[i].getElementsByTagName('title')[0]; var url = items[i].getElementsByTagName('link')[0]; var desc = items[i].getElementsByTagName('description')[0];

html += " " + title.firstChild.data + " "; if (desc != null) html += desc.firstChild.data + " ";

html += ""; }

html += "";

if (div == 1) document.getElementById('RSS_1').innerHTML = html;// Añadimos el código en el contenedor correspondiente if (div == 2) document.getElementById('RSS_2').innerHTML = html; if (div == 3) document.getElementById('cookies').innerHTML += html;

}else{ alert("Falló: " + request.status);

} } }

// Solicita al servidor el feed seleccionado en la lista desplegable, recibe como argumento la URL de dicho feed function pide_lista(feed) { div = 2; request = new XMLHttpRequest; var url = feed; dir_div2 = feed; var cuantos = document.getElementById('cuantos_lista').value; // El número de titulares se elige del correspondiente cuadro de texto var peticion_str = 'http://swecai.ugr.es/~alexbm8/P6alex/server.cgi?url='+encodeURIComponent(url)+'&num_elementos='+cuantos; request.open('GET', peticion_str, true); request.onreadystatechange = escribe_RSS ; request.send(null); }

// Esta función se activa si el usuario modifica el número de titulares que desea mostrar del feed elegido en la lista desplegable function pide_lista_num { div = 2; request = new XMLHttpRequest; var cuantos = document.getElementById('cuantos_lista').value; var peticion_str = 'http://swecai.ugr.es/~alexbm8/P6alex/server.cgi?url='+encodeURIComponent(dir_div2)+'&num_elementos='+cuantos; request.open('GET', peticion_str, true); request.onreadystatechange = escribe_RSS ; request.send(null); }

// Función que obtiene el nombre y la URL de la fuente RSS que el usuario quiere introducir como cookie function addRSS { var nombre = document.getElementById('nombre_feed').value; var url = document.getElementById('url_feed').value; var dias = document.getElementById('dias').value; alert("El periodo de validez de la cookie será de " + dias + " días"); createCookie(nombre,url,dias); // Creamos la cookie }

// Crea una cookie en el PC del usuario con el formato [nombre]=[URL] function createCookie(name,value,days) { if (days) { var date = new Date; date.setTime(date.getTime + (days*24*60*60*1000)); var expires = "; expires=" + date.toGMTString; }   else var expires = ""; document.cookie = name + "=" + value+expires + "; path=/"; alert('Cookie creada con éxito:\n' + document.cookie); }

// Cada vez que el usario cambia el número de titulares a mostrar de los feed almacenados en las cookies, se llama a esta función function leerCookies {

codigo = " Feeds almacenados en las cookies "; document.getElementById('cookies').innerHTML = codigo; div = 3;

// Procedemos a ir mostrando todos los titulares de cada uno de los feeds almacenados en las cookies for (var i = 0; i < urls.length; i++){ if (nombres[i] != ' PHPSESSID'){ // En algunos casos, aparece la cookie de las sesiones PHP, y ésta no nos interesa en absoluto codigo = " " + nombres[i] + " "; document.getElementById('cookies').innerHTML += codigo; request = new XMLHttpRequest; cuantos = document.getElementById('cuantos_cookies').value; var peticion_str = 'http://swecai.ugr.es/~alexbm8/P6alex/server.cgi?url=' + encodeURIComponent(urls[i]) + '&num_elementos=' + cuantos; request.open('GET', peticion_str, true); request.onreadystatechange = escribe_RSS; request.send(null); // Añadimos un cuadro de información que impide que se procese otra petición antes de recibir la respuesta de la primera alert("Petición a " + nombres[i] + " enviada con éxito. Espere un momento..."); }   }

}

// Eliminamos la cookie seleccionada function borrarCookies {  var name_del = document.getElementById('borrar_cookies').value; createCookie(name_del,"",-1); // Creamos la cookie pero con tiempo de expiración ya cumplido }

code