====== Catalis y OpacMarc en el Museo Mitre ====== El muchacho de soporte es: Andrés Giacomelli Tel. (011) 4312-8917 soporte@secyt.gov.ar ===== Catalis ===== Archivo catalis.conf, modificaciones que requerían conocer la ruta absoluta dentro del servidor: PATH_DB=/var/webhosting/museomitre/bases/catalis_pack PATH_CGI-BIN=/var/webhosting/museomitre/cgi-bin/catalis_pack PATH_LOGS=/var/webhosting/museomitre/bases/catalis_pack/catalis/access_logs Para averiguar la ruta, coloqué este script ''test-path.xis'' dentro de la carpeta ''cgi-bin/catalis_pack/catalis/xis'': 'Content-type: text/plain'/# getenv('PATH_WXIS') Ejecuté el script con http://www.museomitre.gov.ar/cgi-bin/catalis_pack/wxis?IsisScript=catalis/xis/test-path.xis y respondió: /var/webhosting/museomitre/cgi-bin/catalis_pack/ por lo tanto ''/var/webhosting/museomitre'' es la ruta buscada. El script ''test-path.xis'' fue borrado del servidor. El acceso a Catalis entonces queda así: http://www.museomitre.gov.ar/catalis_pack/catalis/inicio.htm ---- ---- Consultas de Raúl: 4) Pregunta: veo pudiste entrar con el FTP, verdad? Entonces, por qué en un primer momento dudaste y me escribiste que quizás no serviría solamente con FTP? Qué encontraste luego para poder subir todo? En breve, podrías escribírmelo, pues no entiendo qué es lo que necesita el ISIS y qué hace que tenga que "meterse" en el servidor? -------------- Base bibliográfica * corrí newdb mitre * crunchmf, crunchif * edité db-descr.txt * subí base y archivos aux Base de usuarios * edité users.txt * corrí users.bat * crunchmf, crunchif * subí base **PERO NO SUBI users.txt. SUBIRLO!** Sugerencia: los scripts ''users.bat'' y ''newdb.bat'' deben aceptar un parámetro "linux" para realizar automáticamente la conversión. Prevención de registros corruptos? ==== Parches a Catalis ==== * import.js para ansel (instalado 2008-09-17). * data-out.js (2008-09-24) * biblio.fst (2008-09-24) Molesto cartel "resolución no prevista": function setDimensions() en catalis.js => eliminado (2008-feb-07): //alert(message); Permisos Cambio de nombre de la carpeta "catalis_pack" => "catalis" (solicitado por Raúl). Es posible, pero hay que tocar 2 o 3 archivos: ''inicio.htm'', ''catalis.conf'' 2008-feb-07: generación del invertido (en el servidor de BC) para la base mitre: {{museos:mitre-catalis.zip|}}. Subido al servidor, permisos 666 para los archivos de la base. TODO: eliminar campo 991 de los registros importados (en Catalis se usa para identificar al catalogador que crea el registro, pero en LC tiene otro tipo de datos). Esto se produjo al importar registros en lote (no desde Catalis) usando un script no depurado. 2008-09-17: quité el 991 con el valor provisto por LC y lo reemplacé por el valor "RE". ==== Campos añadidos ==== 17/sep/2008: Agregué campo **099** (signatura topográfica local) a marc21.xml. **ERROR**: en el form de edición aparece dentro del bloque //Descripción//. **PENDIENTE**: Agregarlo a las plantillas de registros, y a los estilos de visualización. 24/sep/2008 - En resumen, estos son los archivos modificados para poder utilizar el campo 099: * Para que el campo 099 se pueda agregar desde el form de edición y aparezca en el bloque "Otros datos": * **marc21.xml**: * **head.htm**: FIELD_BLOCK_PATTERN.other * Para que el campo 099 vaya al diccionario: * **biblio.fst**: prefijo "**-ST=**" * Para que el campo 099 esté presente en registros nuevos o importados: * **templates.js** * **import.js**: agregar campo 099 a registros importados de la base mitre * Para que el campo 099 aparezca en los diferentes estilos de visualización de registros: * **marc2aacr.js** * **wh.pft** (hecho, 2009-12-11) * **etiquetado.pft** (hecho, 2009-12-11) ==== Correcciones en la base ==== Por un error en el proceso de importación en lote de los 100 registros de muestra de LC, el campo 909 (pos. 09 del leader) estaba sin datos. Al intentar colocar en él el valor "#", detectamos que el registro con MFN 95 está corrupto. Peor aun, encontramos que hubo un error cuando se aplicó el "parche" para evitar la corrupción de registros con MFN bajo: En lugar de dejar en blanco los primeros 100 MFNs, se los siguió usando, pero se les modificó el valor del campo 001 (e.g., MFN **1** => nro. de control **000100**). Hay que volver a realizar el proceso: colocar los 100 MFNs vacíos al comienzo de la base, y generar el archivo invertido. Además, hay que limpiar la base de campos extraños (ver con MXF0). ===== OpacMarc ===== Instrucciones: http://catalis.uns.edu.ar/dokuwiki/doku.php/instalacion_de_opacmarc Descargué esta versión: http://inmabb.criba.edu.ar/varios/opacmarc/opacmarc-2006.11.13-linux.tgz y subí el contenido de las carpetas cgi-bin, htdocs y bases. Configuración: local.conf, líneas modificadas: PATH_DB=/var/webhosting/museomitre/bases/opacmarc PATH_CGI-BIN=/var/webhosting/museomitre/cgi-bin/opacmarc PATH_LOGS=/var/webhosting/museomitre/bases/opacmarc/opac/access_logs PATH_AGREP=/var/webhosting/museomitre/cgi-bin/opacmarc/agrep Copio el wxis a cgi-bin/opacmarc. Deberíamos compartir el wxis con Catalis, pero al no poder crear un link simbólico, por ahora queda así. Le asigno permisos de ejecución a wxis. A la carpeta access_logs le pongo permisos 0777. agrep: subí el que usamos en catalis.uns.edu.ar. Sugerencia: incluirlo en la distribución de opacmarc. Permisos de ejecución para agrep. Acceso (original): http://www.museomitre.gov.ar/cgi-bin/opacmarc/wxis?IsisScript=opac/xis/opac.xis&db=demo Luego modificado a http://www.museomitre.gov.ar/cgi-bin/opacmarc/wxis?IsisScript=opac/xis/opac.xis&db=mitre&showForm=simple Logo: podría ser http://www.museomitre.gov.ar/nuevo/images/logo3.jpg Base para demo: buscar en LC usando el encabezamiento "Mitre, Bartolomé, 1821-1906." Búsqueda en LC: Guided Search = (Mitre AND Bartolomé AND 1821 AND 1906)[in Subject: Authorized (SKEY)] SEARCH RESULTS: Displaying 1 through 100 of 104. Archivo resultante: {{mitre.zip|mitre.mrc}} (registros 1-100) Usarla para reemplazar la base demo en Catalis y en el OPAC. Luego de realizar varias correcciones en el script de importación, esta es la secuencia de pasos que utilicé: En ~/catalis/ib-campi: ./im2c.sh ~/opacmarc-admin/work/mitre/original/mitre.mrc mitre mx mitre create=~/opacmarc-admin/work/mitre/original/biblio now -all En ~/opacmarc-admin/bin: ./update-opac.sh mitre Los archivos generados están en {{museos:mitre-opac.zip}} Incluir aquí una imagen del árbol de carpetas del servidor. ===== Personalización del banner ===== SAI, 30 de noviembre de 2007. Para personalizar el banner, se deben modificar los archivos siguientes: - ''\cgi-bin\opacmarc\opac\banner\mitre.htm'' (HTML) - ''\html\opacmarc\opac\css\banner\mitre.css'' (CSS) En el archivo HTML hay que preservar el atributo ''href'' de los enlaces: nueva búsqueda [pft]v6001^u[/pft]?IsisScript=[pft]v2000[/pft]&db=[pft]v2104[/pft]&showForm=simple acerca del catálogo [pft]v6001^u[/pft]?IsisScript=[pft]v2000[/pft]&db=[pft]v2104[/pft]&task=SHOW_ABOUT También debe preservarse la línea final:
En el archivo CSS, no hay nada que preservar, se puede modificar libremente para controlar el aspecto visual del banner. Para concentrar en un único lugar las modificaciones a los CSS, creamos un nuevo archivo, ''custom-mitre.css'', y lo incluimos agregando esta línea en ''opac-head.htm'': ===== Modificaciones al OPAC ===== Estos son los cambios solicitados: ==== Formato de visualización por defecto ==== Usar por defecto el formato **etiquetado** de Catalis. Archivos modificados: * ''local.conf'': ''DEFAULT_RECORD_STYLE=Etiquetado'' * ''opac-head.htm'': descomentar '''' * ''bib-record-2.htm'': ''proc('a6017~Etiquetado~a6017~Completo~a6017~Ficha~a6017~MARC~'),'' * ''custom-mitre.css'' (hay muchos más cambios no registrados en el wiki): table#Etiquetado { font-family: verdana, arial, helvetica, sans-serif; font-size: 0.8em; margin: auto; <= centrar tabla width: 90%; <= ancho constante } table#Etiquetado td.label { font-style: normal; font-weight: bold; white-space: nowrap; <= etiqueta en una sola línea } table#Etiquetado .materialTypeHeader { background-color: #ACA698; <= color de la muestra de Raúl text-transform: uppercase; } * ''etiquetado.pft'': ''Título/responsables'' (quité espacio); ''if v6001^t : v2104'' (para que use ''DISPLAY_DOC_TYPE'') * Ver separación entre última fila de datos, y la franja con el número de registro (chat 2008-03-10) === Orden de los campos === * [HECHO] Ver chat 2008-03-08 === Anatomía === div#etiquetadoWrapper table#Etiquetado tfoot#etiqFoot tr td tbody tr td table thead tr th.materialTypeHeader tbody tr td.label td.data tr td.label td.data ... td#locationCell table thead tr th tbody tr td ==== Colores ==== Cambiar el fondo a colores cálidos en el formato de visualización del registro (de los índices me ocuparé en otra oportunidad). Te adjunto un modelo de los colores exactos para cambiar y sería ideal que estén así: alternados uno con otro y un poco más pronunciado el tono, salteando campos. {{museos:colores-para-fernando-gomez.jpg|Imagen adjunta}} Lo que ví en algún lugar y que me encantó es que en la columna de la izquierda (es decir, donde están justamente las etiquetas) mantienen los mismos dos colores de los campos pero oscureciéndolos un poco más (si me permitís una palabra detestable: "agriseándolos"). Bien, para lograr el //efecto cebra// (filas de colores alternados) adapté el script de http://www.alistapart.com/articles/zebratables. Archivos involucrados: * ''zebra-table.js'' * ''opac-head.htm'': * ''etiquetado.pft'': comenté ('''') una '''' que tenía ''display: none'' y afectaba la cuenta de filas. ==== Catálogo general + subcatálogos ==== Para un análisis detallado del problema, ver **[[:subcatalogos_en_el_opac]]**. ¿Cuál te parece que sería la forma más fácil --según tu criterio-- como para que del mismo catálogo general se generen catálogos especiales? ¿Mediante alguna palabra en algún campo de MARC? Intento explicarme un poco más: por ahora tendríamos estas colecciones cuyos registros se deberían recuperar en forma separada del OPAC: - Biblioteca Americana - Colección Moores - Mapas - Colección Ruiz Guiñazú - Mitriana - Hemeroteca - Diarios del mundo (donación de R.E.) A la vez los registros de estas colecciones deben estar integrados todos en la base de datos (OPAC). **Decidimos:** usar un campo local ad hoc, pero intentando limitar su uso a los pocos casos que lo requieran. Por ejemplo, periódicas y mapas no requieren el uso de tal campo, pues basta con tomar la información del leader del registro MARC. ==== "Enlaces falsos" ==== En la visualización de un registro bibliográfico, eliminar los enlaces desde puntos de acceso que sólo están presentes en ese registro, y que por consiguiente no llevan al usuario a ningún otro registro. ¿Cómo se puede saber, al procesar un registro para su visualización, si un encabezamiento tiene más de un posting? Ver update-opac 2008-03-27: Ya está implementada una solución, para el estilo Etiquetado. Sólo hubo que modificar el archivo ''etiquetado.pft'', agregando algo como esto, tanto para los subject added entries como para los non-subject added entries: /* Total de postings para este heading (2008-03-27) */ proc('d7101a7101¦', ref(['NAME']l(['NAME']'_HEAD_'v8100^9),v11), '¦') if v7101[1] > '1' then '' fi, Explicación: en las bases NAME y SUBJ, cada registro tiene un campo 11 con el total de postings para el heading, i.e., cada heading "sabe" cuántos postings tiene. Por su parte, en los registros bibliográficos cada heading tiene un subcampo $9 que lo vincula con la correspondiente base de headings, e.g. 100 1# $a Pérez, José. $9 000172 Por lo tanto, mediante un ref+lookup en la base de headings, podemos saber, desde el registro bibliográfico, si un heading tiene o no más de 1 posting (que es la condición para mostrar u ocultar el link). **TAREA**: agregarlo al Modular. Usar una opción de configuración para decidir si esto se activa. ==== Formularios de búsqueda ==== Eliminarlos de todas las páginas, excepto la página inicial del OPAC. [HECHO] ==== Nota de copyright de OPACMARC ==== Ídem formulario de búsqueda. Y lo mismo para el texto: Consulte con los bibliotecarios para un mejor aprovechamiento de este catálogo: biblioteca@museomitre.gov.ar. Este catálogo cuenta con 99 registros, y fue actualizado el 08/10/2007 a las 12:10 **ATENCION**: al eliminar esos textos, también se ha perdido un margen por debajo del cuerpo de la página (ver p.ej. listado de autores). Posible solución: custom-mitre.css: div#resultWrapper {margin-bottom: 1.5em} [HECHO] **ATENCION**: ahora queda un vacío llamativo, falta algo en el pie de las páginas. ==== Columna con tipo de soporte/material ==== Raúl: "En los listados de autor título podría haber una opción de una columna con el tipo de soporte además de la fecha?" Ya tenemos esa columna. Queda por ver qué valores queremos mostrar en ella, y cómo obtenerlos a partir de la información presente en cada registro. Lista de valores: * AUDIO * DIARIO * FOTO/IMAGEN * LÁMINA * LIBRO * MAPA * MEDALLA * MICROFORMA * MONEDA * PLANO (de edificios, batallas) <= averiguar cómo se registran en MARC * REVISTA * VIDEO ==== Ficha AACR2 ==== Que el encabezamiento principal aparezca arriba, en negrita y un poco salido hacia la izquierda. Ver Capture.png, y agregar otros requerimientos de Raúl (ver chat). Color de fondo: "cremita muuuuy clarito". Opciones: * ivory de mkaz.com: #FFFFF0 * Catalis: #FEFEF0 Archivos involucrados: * aacr.css * custom-mitre.css * marc2aacr.js * aacr2.pft * local.conf (MAIN_ENTRY_TOP) * opac-head.htm (MAIN_ENTRY_TOP) **PENDIENTE**: para seriadas, mostrar las **existencias** como una nota. ==== Sugerencias cuando no hay coincidencias ==== * Adecuar la lista de sugerencias (archivo ''zero-hits.xis'') **[HECHO]** Puede buscar XXXX usando alguna de estas herramientas: Si lo desea, puede buscar XXXX en la Web usando alguna de estas herramientas: * Google * Google Scholar * Google Book Search * Scopus <= QUITAR * MathSciNet <= QUITAR * Incluir el formulario de búsqueda (sólo en estos casos) para facilitar la revisión del query. ==== Búsqueda avanzada ==== TAREA: Resucitar el formulario. Primeras observaciones: * Búsqueda por un año específico: sería bueno no tener que completar "desde" y "hasta" con el mismo valor. ¿Qué hacemos? ¿Dividimos en dos casos, "Año exacto" y "Rango de años"? Ver más abajo, el caso de MathSciNet. * Sugiere Raúl (y [[http://www.google.com.ar/advanced_search?hl=en|Google]] lo confirma) que eliminemos el botón "Limpiar" (usado para resetear el form). Sugerencia aceptada. Si más adelante notamos que conviene tenerlo, podemos moverlo hacia un costado, y atenuar su color, para que interfiera lo menos posible. * Qué opciones incluir en "Otras características" (campo 008 y otros campos codificados): dice Raúl que "según las colecciones del Mitre, todos van a usarse, o todos //deberían// usarse" * El formulario se escapa del container por debajo, se soluciona añadiendo ''background-color: #FFFFFF;'' en ''div#contentWrapper''. * Cambiamos los colores a los headers de los formularios (simple y avanzado): color claro sobre fondo oscuro. Los bordes superiores se conservan redondeados. * Alinear el extremo derecho de las casillas "hasta", "lugar" y "editorial". **2008-03-31** Decidimos probar una estructura algo diferente para el form avanzado, combinando características de la búsqueda avanzada de Google con la Guided Search de LC: Utilice uno o más de los siguientes criterios para encontrar registros de su interés: Encontrar registros que tengan... las palabras [ ] en [lista de campos] (x) y además ( ) o bien las palabras [ ] en [lista de campos] Pero excluir registros que tengan... las palabras [ ] en [lista de campos] Otras características de los registros El diseño parece satisfactorio. Raúl sugiere **probarlo en el OPAC del INMABB**. Sin embargo, por ahora sólo tenemos el diseño del form, y hay que modificar el código de la aplicación para que estas búsquedas funcionen correctamente. Otra sugerencia, para la búsqueda por **año de publicación**: [[http://www.ams.org/mathscinet/|MathSciNet]] ofrece estas 3 opciones: * Toda la base de datos (i.e., sin límite de fecha) * = / < / > que un año específico * Rango de años: desde -- hasta HECHO (o empezado) 2008-05-07. Terminada la parte del form en 2008-05-12 (usando DOMAssistant). **Pendiente**: modificar ''opac.xis'' y ''keyword-match-in-bib-record.xis''. Otro detalle a tener en cuenta: al buscar por **Lugar de publicación**, aclarar si es por ciudad, país, etc. En general, la búsqueda basada en el campo 260 será por **ciudad**, y usando el campo 008 se puede ofrecer además la búsqueda por **país**. Ver si es mejor que los títulos de cada bloque de campos no sean de un fieldset. **2008-04-02** Dos opciones para presentar los operadores booleanos AND/OR: radio buttons o select. Preferimos un select a un par de radios, porque se lee más naturalmente si sólo se ve una opción a la vez. Mirando el [[http://www.library.org.nz/cgi-bin/koha/opac-search.pl|form de búsqueda avanzada de un OPAC de Koha]], recordé que puede ser útil ofrecer las opciones de cómo ordenar los resultados, y cuántos mostrar por página. Raúl sugiere que no se debe volver muy complejo el form, ya que la presencia de numerosas opciones puede resultar intimidante, o hacer creer que es difícil buscar. Volviendo al [[http://www.google.com.ar/advanced_search?hl=en|form de búsqueda avanzada de Google]], vemos una sencilla solución para ocultar/mostrar partes del form, usando JavaScript. **2008-04-07** Para aprender más sobre la búsqueda avanzada de Google: [[http://www.searchlores.org/google.htm|Searchlores.org]] **2008-04-10** Otro form avanzado para mirar: [[http://www.lib.ncsu.edu/catalog/advanced.html|NCSU libraries]]. Para un análisis del funcionamiento de la búsqueda avanzada, ver una página ad hoc en este wiki: **[[:busqueda_avanzada_en_opacmarc]]**. En **Tipo de material** sólo deben mostrarse las opciones disponibles en el catálogo. **2008-07-10** **FIXME:** Al hacer una [[http://www.museomitre.gov.ar/cgi-bin/opacmarc/wxis?IsisScript=opac/xis/opac.xis&db=mitre&task=BIB-KW-SEARCH&query=&index=BIB-KW-SEARCH&sortBy=author&from=1&filter1=san*&filterType1=PUB_PLACE|búsqueda avanzada]] sale como el texto "Índice de" ==== Búsqueda simple ==== * Hacer que ambos formularios tengan igual altura. Ver p.ej. [[http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/|Equal height boxes with CSS]], [[http://www.456bereastreet.com/lab/equal_height_ii/|Equal height boxes with CSS, part II]], [[http://www.ejeliot.com/blog/61|Equal Height Columns using CSS]] * Corregir un sobrante de 1px a la derecha en los headers de los 2 forms ==== Listados ==== Varios aspectos han sido modificados. Pendientes: * Reducir espacios en blanco verticales, p.ej. antes de la franja con las iniciales en los listados alfabéticos. ==== Guardar, imprimir, email ==== Agregar estas funcionalidades. ===== Bugs detectados en el OPAC ===== Raúl: Es la primera vez que siento la necesidad de consultar la base mediante un numero de registro. Me quedó por ahí el numero "140" en la cabeza e hice lo siguiente fui a búsqueda nueva y en el recuadro "buscar por palabras" pinté Cualquier campo y escribí 140 en "contiene las palabras". El resultado: **WXIS|execution error|missing|expression|** ===== Otras sugerencias ===== De Mariana: añadir links para navegar por las páginas de resultados, usando números: **1 2 3 4 ... Última** ===== Python ===== Prueba 2008-10-01: Python 2.4.1 (usando system() con wxis) Con ''print_r(apache_get_modules())'' (PHP) veo que mod_python está instalado. Pero si accedo a [[http://www.museomitre.gov.ar/opacmarc/test.py]] recibo **403 Forbidden**. Parece que si no se añade explícitamente ''AddHandler mod_python .py'' en la config de Apache no se puede acceder a un .py. ¡Ahora sí! http://www.museomitre.gov.ar/opacmarc/test.py Según indicaciones en http://www.campstaff.com/manual/mod/mod_python/inst-testing.html .htaccess <code apache> AddHandler mod_python .py PythonHandler mptest PythonDebug On </code> mptest.py <code python> from mod_python import apache def handler(req): req.content_type = 'text/plain' req.write("Hello World!") return apache.OK </code> (Nótese que con esta prueba, nada importa lo que haya en test.py; cualquier llamada a un ".py", existente o no, produce lo mismo) Django no está disponible, pero habría que ver si lo podemos usar sin tener que "instalarlo". ===== Subversion ===== Prueba 2008-10-01: sh: svn: command not found ===== Diciembre 2009: ajustes en Catalis y OpacMarc ===== ==== Limpieza de la base de Catalis ==== Tareas del 16-dic-2009: * agregar subcampos $d, $e al 099 (marc21.xml), a la plantilla para libros (templates.js), y a la FST (biblio.fst) (HECHO - **Falta testear FST**) * corregir registro corrupto, MFN 95 (HECHO) * corregir campo 001 (HECHO) * limpiar campos raros (ver con mxf0): 920, 922, 923, 925, 952, 955, 984, 992. (HECHO) * ajustar cn.txt: 000099 (HECHO) * generar el archivo invertido (usando la misma FST del museo) (HECHO) ==== Actualización automática periódica del OPAC ==== Hice un script en Python, ''update_mitre.py'', que se ocupa de las tres tareas: descarga por FTP la base de Catalis, invoca el script ''update-opac.sh'', y sube por FTP los archivos generados. <code python> """ Updates the OPAC at Museo Mitre, located at http://www.museomitre.gov.ar/cgi-bin/opacmarc/wxis?IsisScript=opac/xis/opac.xis&db=mitre&showForm=simple FTP code based on http://effbot.org/librarybook/ftplib.htm """ import ftplib import os import subprocess ##### BEGIN CONFIG ##### # ftp server data host = 'webh.secyt.gov.ar' user = '*****' passwd = '******' admin_dir = '/home/efege/tmp/test-opacmarc-museomitre/opacmarc-2006.11.13/opacmarc-admin' # local working directory local_work_dir = '%s/work/mitre' % admin_dir # to download the original database server_source_dir = 'bases/catalis_pack/catalis/mitre' local_target_dir = '%s/original' % local_work_dir # to upload the generated files local_source_dir = local_work_dir server_target_dir = 'bases/opacmarc/opac/mitre' # the shell script that updates the OPAC update_opac_script = '%s/bin/update-opac.sh' % admin_dir ##### END CONFIG ##### def getbinary(ftp, filename, outfile=None): # fetch a binary file if outfile is None: outfile = sys.stdout ftp.retrbinary("RETR " + filename, outfile.write) def download_catalis_db(): ftp = ftplib.FTP(host) ftp.login(user=user, passwd=passwd) ftp.cwd(server_source_dir) os.chdir(local_target_dir) for filename in ('biblio.mst', 'biblio.xrf'): print 'Downloading file %s ...' % filename getbinary(ftp, filename, open(filename, 'w')) def upload_file(ftp, filename): ext = os.path.splitext(filename)[1] if ext in (".txt", ".htm", ".html"): ftp.storlines("STOR " + filename, open(filename)) else: ftp.storbinary("STOR " + filename, open(filename, "rb"), 1024) def upload_opac_files(): ftp = ftplib.FTP(host) ftp.login(user=user, passwd=passwd) ftp.cwd(server_target_dir) os.chdir(local_source_dir) for filename in os.listdir('.'): if os.path.isfile(filename): print 'Uploading file %s ...' % filename upload_file(ftp, filename) ftp.quit() def update_opac(): subprocess.call([update_opac_script, 'mitre']) if __name__ == '__main__': download_catalis_db() update_opac() upload_opac_files() </code> El script funciona correctamente cuando lo ejecuto manualmente. Al ejecutarlo desde cron, apareció un problema causado por la función ''cecho'' que se define en ''update-opac.sh''. Como esa función no es esencial, la suprimí. Aun así, la tarea no se está ejecutando bien. 28-dic-2009: no recuerdo bien qué toqué, pero ahora funciona la actualización automática vía cron. Queda programada para ejecutarse de lunes a sábado a las 5 AM. {{tag>catalis opacmarc}}