Los estándares para MARC y CEPAL que pueden ser configurados en ABCD, aún las estructuras personalizadas, constan con campos donde se almacenan las URL de los registros. Por ejemplo, para el caso de MARC 21, está se puede guardar en el campo 856 subcampo u. Sin embargo, con el tiempo estos enlaces podrían ya no estar activos por diferentes razones y en esta ocación, la presente entrada del blog mostrará un pequeño código desarrollado en PHP para analizar estas URLs.
Tabla técnica:
Versión: 0.1 beta
Lenguaje: PHP 5
Líneas de código:
- index.php = 82
- comprobar.php = 165
Código fuente: descargar al final de la entrada.
Ubicación: la carpeta desempaquetada debe ubicarse en: /abcd/www/htdocs/
Primeramente, el sistema pedirá los datos de entrada, se ha tratado de parametrizar la base de datos y el campo en el que se guarda la URL, de esta manera se puede analizar cualquier base del sistema. Segundo, se deberá ingresar el rango de MFN sobre los cuales se quiere ejecutar la búsqueda y tercero el timeout que se desea para comrpobar cada URL (esta parte se indicará más deralladamente al final de la entrada).
Figura 1. index.php Entrada de datos. |
El módulo receptará los datos y extraerá la información usando el utilitario MX. Los datos que se reciben según corresponde son:
Vía: POST
Variable: $base -> base en la que se encuentra los
datos, ejemplo marc
Variable: $campo -> campo en el que se ingresan las url
a analizar
Variable: $from -> mfn desde el que se desea analizar
las url
Variable: $to -> mfn hasta el que se desea analizar
las url
Variable: $time -> tiempo en segundos para el timeout en
la demora del pedido de headers
con get_header
EL utilitario MX es llamado desde PHP mediante una la función:
extraer_listado_url($una_base, $un_campo, $desde, $hasta):
{
[...]
$mx = $mx_path."mx ".$db_path.$una_base."/data/".$una_base." from=".$desde." to=".$hasta." \"pft=if p(".$un_campo.") then mid(".$un_campo.",1,78),'¬'mfn(6)'@' fi\" lw=300 now";
[...]
return array($outmx[0]);
}
Esta función retornará un array de una posición, en donde la información se encontrará delimitada por caracteres especiales que están especificados en el llamado a MX. Los caracteres son ¬ y @. El ¬ separa la URL del MFN mientras que @ separa cada registro.
Si ejecutaramos esta sentencia MX en línea de comandos, podríamos obtener la siguiente salida para unos pocos registros:
Figura 2. Resultados de MX en línea de comandos. |
Podríamos tomar en cuenta que la sentencia MX contiene el parámetro lw=300 el cual indica que el buffer de salida para cada línea sea de 300 caracteres. Esto deberá ser modificado según la longitud del campo en caracteres.
Finalmente, esta salida desde MX, es convertida en un array de múltiples posiciones para ser analizado. Cada URL del array es ejecutada con el comando de PHP get_headers.
Según la respuesta de la sentencia get_headers, la URL será calificada como Activa, Inactiva o Not Found.
Figura 3. Resultado del análisis de las URL |
El timeout necesario para el análisis de las cabeceras es escencial, debido a que existen páginas que podrían no responder dentro de los 30 segundos que es el tiempo estimado de timeout configurado en php.ini, por tal motivo, el usuario puede poner este parámetro para aumentar el tiempo de espera y así obtener una respuesta del lado del servidor.
Nota final: este módulo es una versión beta, ha sido probado en ABCD 2.0 una base MARC de más de 165000 registros.
Descargar código fuente.