#! /usr/bin/python
# This program is aimed to query the catalogue's
# ORACLE DB to export the CREATED/MODIFIED records
# Parameters:
# This program should be called like:
# python importaFH.py 01/01/2009 salida_crear.xml salida_modificar.xml
# salida_crear = the XML file that contains the NEW
# records (the ones that are NOT
# in your repository)
# salida_modificar = the XML file that contains the
# MODIFIED records (they are already
# in your repository, so they have to be updated!
import sys
import time
import os
os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
import cx_Oracle
import cgi
class RegistroFH(object):
def __init__(self, controlfield001 = "", controlfield008 = "",
datafield040a = "", datafield040d = "", datafield100a = "",
datafield245a = "", datafield245c = "", datafield260a = "",
datafield260b = "", datafield260c = "", datafield300a = "",
datafield300b = "", datafield300c = "", datafield500a = [],
datafield538a = [], datafield700a = [], datafield700e = [],
datafield752a = "", datafield752d = "", datafield907a = ".",
datafield907b = "", datafield907c = "", datafield945a = "",
datafield945t = "", datafield945y = "", datafield945z = "",
datafield980a = "", datafield998a = "", datafield998b = "",
datafield998f = "", datafield998g = "", datafield8564u = [],
datafield8564z = []):
self.controlfield001 = controlfield001
self.controlfield008 = controlfield008
self.datafield040a = datafield040a
self.datafield040d = datafield040d
self.datafield100a = datafield100a
self.datafield245a = datafield245a
self.datafield245c = datafield245c
self.datafield260a = datafield260a
self.datafield260b = datafield260b
self.datafield260c = datafield260c
self.datafield300a = datafield300a
self.datafield300b = datafield300b
self.datafield300c = datafield300c
self.datafield500a = datafield500a
self.datafield538a = datafield538a
self.datafield700a = datafield700a
self.datafield700e = datafield700e
self.datafield752a = datafield752a
self.datafield752d = datafield752d
self.datafield907a = datafield907a
self.datafield907b = datafield907b
self.datafield907c = datafield907c
self.datafield945a = datafield945a
self.datafield945t = datafield945t
self.datafield945y = datafield945y
self.datafield945z = datafield945z
self.datafield980a = datafield980a
self.datafield998a = datafield998a
self.datafield998b = datafield998b
self.datafield998f = datafield998f
self.datafield998g = datafield998g
self.datafield8564u = datafield8564u
self.datafield8564z = datafield8564z
# Searches in your repository the record identified by rec_key
# Returns '-1' if the record is not found
# 'tag001 value' if the record exists
def existe_en_zaguan(rec_key):
url_buscar = """http://zaguan.unizar.es/search?p="""
url_buscar += """%s""" % (rec_key)
url_buscar += """*&f=&action_search=Buscar&c=Repositorio+Digital+de+la+Universidad+de+Zaragoza&sf=&so=d&rm=&rg=10&sc=1&of=xm"""
#print url_buscar
import urllib
f = urllib.urlopen(url_buscar)
contenido = f.read()
cadena_a_buscar = ''
position1 = contenido.find(cadena_a_buscar)
if position1 == -1:
#print "(funcion existe_en_zaguan): %s DOES NOT EXIST en zaguan " % (rec_key)
return -1
else: # return records' tag001 value
position1 = position1 + len(cadena_a_buscar)
position2 = contenido.find("")
return contenido[position1:position2]
# Creates MARCXML from a record identified by rec_key and repositories' controlfield001
# If tag001 == '' is passed, it will create MARCXML __WITHOUT TAG 001__
# If tag001 != '' it will create the MARCXML __WITH TAG 001__
# Note it will only create MARCXML if the record belongs to collection FH (bcode3=a) and it is a
# monografy(bib_lvl=m)
def marcxml_de_registro(rec_key, tag001):
registro = make_fh_record(rec_key)
registro.controlfield001 = tag001
# now connect to the catalogues Oracle DB....
dsn = cx_Oracle.makedsn('155.210.5.40', 1521, 'IIIDB')
connection = cx_Oracle.connect('III', 'III', dsn)
cursor = connection.cursor()
cursor.arraysize = 50
stmt = """SELECT v.rec_key, v.MARC_TAG, v.INDICATOR1, v.INDICATOR2, v.REC_DATA FROM biblio2base b, locations2 l, var_fields2 v WHERE b.bcode3='a' AND b.bib_lvl='m' AND b.REC_KEY=l.REC_KEY AND b.REC_KEY=v.REC_KEY AND"""
stmt += """b.REC_KEY = '%s'""" % (rec_key)
stmt += """ORDER BY v.rec_key, v.marc_tag;"""
cursor.execute(stmt)
fila = cursor.fetchone()
out = ""
while (fila != None):
interpreta_valores(registro, fila[0], fila[1], fila[2], fila[3], fila[4]) # llama a interpreta_valores(recordFH,rec_key,marc_tag,ind1,ind2,rec_data)
return crea_marcxml_fh(registro)
# It makes a query against DB and fills the file with records in XML
# All the records require these conditions:
# 1. FECHA DE CREACION > fecha_ini (y menor, logicamente, que la actual)
# 2. Que TENGAN URL apuntando a ZAGUAN (856 like %zaguan%)
# 3. Que sean FONDO ANTIGUO (bcode3=a)
# 4. Que sean MONOGRAFIAS (bib_lvl=m)
#
# Vuelca la salida a fich_salida_name
def consulta_creados(fecha_ini, fich_salida_name):
dsn = cx_Oracle.makedsn('155.210.5.40', 1521, 'IIIDB')
connection = cx_Oracle.connect('---------', '--------', dsn)
#change the '---' with your user/pass values
cursor = connection.cursor()
# cursor = connection.cursor()
cursor.arraysize = 50
cadena_url = "zaguan"
# c = time.strptime(fecha_ini,"%d/%m/%Y") # tipo fecha
# ahora pasamos la fecha a entero
#print fecha_ini
dia = fecha_ini[:2]
mes = fecha_ini[3:5]
anyo = fecha_ini[6:]
cadena_fecha = dia+mes+anyo
#print cadena_fecha
# print time.strftime("%d/%m/%Y",c)
#print "Connection encoding = " + connection.encoding, connection.nencoding, connection.maxBytesPerCharacter
stmt = """ SELECT
v2.rec_key, v2.MARC_TAG, v2.INDICATOR1, v2.INDICATOR2,
v2.REC_DATA FROM biblio2base b, locations2 l, var_fields2 v1,
var_fields2 v2 WHERE b.bcode3='a' AND b.bib_lvl='m' AND """
stmt += """ b.created >= to_date('%d', 'DDMMYYYY' ) AND""" % (int(cadena_fecha))
stmt += """ b.REC_KEY=l.REC_KEY AND
l.location LIKE '100%' AND
b.REC_KEY=v1.REC_KEY AND
v1.MARC_TAG LIKE '856' AND"""
stmt += """ v1.REC_DATA LIKE '%s' AND """ %('%'+cadena_url+'%')
stmt += """ v1.REC_KEY=v2.REC_KEY ORDER BY v2.rec_key, v2.marc_tag"""
cursor.execute(stmt)
fila = cursor.fetchone()
out = ""
while (fila != None):
record1 = make_fh_record(fila[0]) # se le pasa el rec_key
interpreta_valores(record1, fila[0], fila[1], fila[2], fila[3], fila[4]) # llama a interpreta_valores(recordFH,rec_key,marc_tag,ind1,ind2,rec_data)
fila2 = cursor.fetchone()
if fila == None or fila == "": break
if fila2 == None or fila2 == "" : break
while fila[0] == fila2[0]:
interpreta_valores(record1, fila2[0], fila2[1], fila2[2], fila2[3], fila2[4])
fila2 = cursor.fetchone()
if fila2 == None or fila2 == "" : break
# en este punto o fila2[0]!=fila[0] o ya no hay mas filas que leer
# si fila2[0] =! fila[0] hay que crear el nuevo registro
# (asignar fila2 a fila y comenzar de nuevo el bucle)
out += crea_marcxml_fh(record1)
# print "Creado registro '." + fila[0] + "'"
#print out
#print "Durmiendo 5segundos..."
#time.sleep(50)
fila = fila2
#en este punto, fila=none
escribe_a_fichero(fich_salida_name, out)
# A partir de un registroFH __YA CREADO__ y con la informacion
# de alguna consulta (tras hacer un fetchrow)
# se van rellenando los campos del registro hasta completarlo.
def interpreta_valores(record, rec_key, marc_tag, indicator1, indicator2, rec_data):
if marc_tag == '008':
record.controlfield008 = rec_data
elif marc_tag == '040':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a': # si el primer caracter es a correspondia a un |a => nombre del autor
record.datafield040a = sbf[1:].replace('&', '&')
elif sbf[0] == 'd': #fechas relacionadas con el nombre del autor
record.datafield040d = sbf[1:].replace('&', '&')
elif marc_tag == '100':
# primero hacer un split por | de los campos que puede haber...
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a': # si el primer caracter es a correspondia a un |a => nombre del autor
record.datafield100a = sbf[1:].replace('&', '&')
elif sbf[0] == 'c':
record.datafield100a = sbf[1:].replace('&', '&') + record.datafield100a
elif sbf[0] == 'd': #fechas relacionadas con el nombre del autor
record.datafield100a = record.datafield100a + '(' + sbf[1:].replace('&', '&') + ')'
elif marc_tag == '110':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a': # si el primer caracter es a correspondia a un |a => nombre del autor
record.datafield110a = sbf[1:].replace('&', '&')
elif sbf[0] == 'b':
record.datafield110a = record.datafield110a + sbf[1:].replace('&', '&')
elif marc_tag == '245':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a': # si el primer caracter es a correspondia a un |a => nombre del autor
record.datafield245a = sbf[1:].replace('&', '&')
elif sbf[0] == 'b':
record.datafield245a = record.datafield245a + sbf[1:].replace('&', '&')
elif sbf[0] == 'c': #fechas relacionadas con el nombre del autor
record.datafield245c = sbf[1:].replace('&', '&')
elif marc_tag == '260':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a':
record.datafield260a = sbf[1:].replace('&', '&')
elif sbf[0] == 'b':
record.datafield260b = sbf[1:].replace('&', '&')
elif sbf[0] == 'c': #fechas relacionadas con el nombre del autor
record.datafield260c = sbf[1:].replace('&', '&')
elif marc_tag == '300':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a':
record.datafield300a = sbf[1:].replace('&', '&')
elif sbf[0] == 'b': #repetible!
record.datafield300b = sbf[1:].replace('&', '&')
elif sbf[0] == 'c': #fechas relacionadas con el nombre del autor
record.datafield300c = sbf[1:].replace('&', '&')
elif marc_tag == '500': #repetible
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if (sbf[0] == 'a') & (esta(sbf[1:],record.datafield500a) == -1):
record.datafield500a.append(sbf[1:].replace('&', '&'))
elif marc_tag == '700': #repetible
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if (sbf[0] == 'a') & (esta(sbf[1:],record.datafield700a) == -1):
record.datafield700a.append(sbf[1:].replace('&', '&'))
elif (sbf[0] == 'e') & (esta(sbf[1:],record.datafield700e) == -1):
record.datafield700e.append(sbf[1:].replace('&', '&'))
elif marc_tag == '752':
subfields = rec_data.split('|')
for sbf in subfields: # para cada uno de los subcampos...
if sbf != "":
if sbf[0] == 'a':
record.datafield752a = sbf[1:].replace('&', '&')
elif sbf[0] == 'e':
record.datafield752e = sbf[1:].replace('&', '&')
elif marc_tag == '856': #repetible
subfields = rec_data.split('|')
for sbf in subfields: # para cada |u debe haber un |z
if (sbf != "") and (sbf.rfind('http://www.lizardtech.es') == -1) and (sbf.rfind('Para ver el documento necesita') == -1) and (sbf.rfind('img src=/screens/logo/djvu.png border') == -1) : # comprobar que no sea el link al plugin lizardtech...
if sbf[0] == 'u':
if (esta(sbf[1:],record.datafield8564u) == -1):
record.datafield8564u.append(sbf[1:].replace('&', '&'))
return
if sbf[0] == 'z':
record.datafield8564z.append(sbf[1:].replace('&', '&'))
# Returns -1 if 'cadena' is NOT in the strings 'array'
# 0 in other cases
def esta(cadena,array):
i = 0
encontrado = -1
while (encontrado == -1) & (i " % sys.argv[0]
return
salida = "Obteniendo registros de FH con link a zaguan desde fecha: '%(fecha)s' \nSe crea fichero MARCXML con ellos '%(fich)s'" % { 'fecha': sys.argv[1], 'fich':sys.argv[2] }
#os.environ["NLS_LANG"] = "SPANISH_SPAIN.AL32UTF8"
print salida
consulta_creados(sys.argv[1], sys.argv[2])
# Genera en sys.argv[2] el MARCXML correspondiente a los registros modificados entre la fecha determinada por sys.argv[1]
# y la fecha actual.
# formato de fecha: dd/mm/aaaa, con el mes en numero
def importar_los_modificados():
if len(sys.argv) != 4:
print "Uso: %s " % sys.argv[0]
return
salida = "Obteniendo registros MODIFICADOS del FH con link a zaguan desde fecha: '%(fecha)s'" % { 'fecha': sys.argv[1] }
print salida
consulta_modificados(sys.argv[1], sys.argv[2], sys.argv[3])
# Realiza la consulta a la BD y va rellenando el fichero con los registros en XML
# Con los registros con:
# 1. FECHA DE CREACION > fecha_ini (y menor, logicamente, que la actual)
# 2. Que TENGAN URL apuntando a ZAGUAN (856 like %zaguan%)
# 3. Que sean FONDO ANTIGUO (bcode3=a)
# 4. Que sean MONOGRAFIAS (bib_lvl=m)
#
# Vuelca la salida en fich_salida_nuevos (para ficheros que hay que cargar con bibupload -i)
# fich_salida_modificados (para ficheros que hay que cargar con bibupload -r)
def consulta_modificados(fecha_ini, fich_salida_nuevos, fich_salida_modificados):
dsn = cx_Oracle.makedsn('155.210.5.40', 1521, 'IIIDB')
connection = cx_Oracle.connect('III', 'III', dsn)
cursor = connection.cursor()
cursor.arraysize = 50
cadena_url = "zaguan"
# c = time.strptime(fecha_ini,"%d/%m/%Y") # tipo fecha
# ahora pasamos la fecha a entero
#print fecha_ini
dia = fecha_ini[:2]
mes = fecha_ini[3:5]
anyo = fecha_ini[6:]
cadena_fecha = dia+mes+anyo
stmt = """ SELECT v2.rec_key, v2.MARC_TAG, v2.INDICATOR1, v2.INDICATOR2, v2.REC_DATA FROM biblio2base b, locations2 l, var_fields2 v1, var_fields2 v2 WHERE b.bcode3='a' AND b.bib_lvl='m' AND """
stmt += """ b.updated >= to_date('%d', 'DDMMYYYY' ) AND""" % (int(cadena_fecha))
stmt += """ b.REC_KEY=l.REC_KEY AND
l.location LIKE '100%' AND
b.REC_KEY=v1.REC_KEY AND
v1.MARC_TAG LIKE '856' AND"""
stmt += """ v1.REC_DATA LIKE '%s' AND """ %('%'+cadena_url+'%')
stmt += """ v1.REC_KEY=v2.REC_KEY ORDER BY v2.rec_key, v2.marc_tag"""
cursor.execute(stmt)
fila = cursor.fetchone()
out = ""
out_mod = ""
while (fila != None):
record001tag = existe_en_zaguan(fila[0])
if (record001tag == -1): # no existe en ZAGUAN => lo anyadimos al fichero de nuevas incorporaciones
print "Tratando registro %s - no existe en zaguan -" % (fila[0])
record1 = make_fh_record(fila[0]) # se le pasa el rec_key
interpreta_valores(record1, fila[0], fila[1], fila[2], fila[3], fila[4])
# llama a interpreta_valores(recordFH,rec_key,marc_tag,ind1,ind2,rec_data)
fila2 = cursor.fetchone()
if fila == None or fila == "": break
if fila2 == None or fila2 == "" : break
while fila[0] == fila2[0]:
interpreta_valores(record1, fila2[0], fila2[1], fila2[2], fila2[3], fila2[4])
fila2 = cursor.fetchone()
if fila2 == None or fila2 == "" : break
# en este punto o fila2[0]!=fila[0] o ya no hay mas filas que leer
# si fila2[0] =! fila[0] hay que crear el nuevo registro (asignar fila2 a fila y comenzar de nuevo el bucle)
out += crea_marcxml_fh(record1)
global cuantosnew
cuantosnew += 1
fila = fila2
else: # el fichero EXISTE en Zaguan => lo anyadimos al fichero de registros a modificar
print "Tratando registro %s - existe en zaguan como id001=%s -" % (fila[0], record001tag)
record2 = make_fh_record(fila[0]) # se le pasa el rec_key
interpreta_valores(record2, fila[0], fila[1], fila[2], fila[3], fila[4])
# llama a interpreta_valores(recordFH,rec_key,marc_tag,ind1,ind2,rec_data)
fila2 = cursor.fetchone()
if fila == None or fila == "": break
if fila2 == None or fila2 == "" : break
while fila[0] == fila2[0]:
interpreta_valores(record2, fila2[0], fila2[1], fila2[2], fila2[3], fila2[4])
fila2 = cursor.fetchone()
if fila2 == None or fila2 == "" : break
# en este punto o fila2[0]!=fila[0] o ya no hay mas filas que leer
# si fila2[0] =! fila[0] hay que crear el nuevo registro (asignar fila2 a fila y comenzar de nuevo el bucle)
record2.controlfield001 = record001tag
out_mod += crea_marcxml_fh(record2)
global cuantosmod
cuantosmod += 1
fila = fila2
#en este punto, fila=none
concatena_a_fichero(fich_salida_nuevos, out)
escribe_a_fichero(fich_salida_modificados, out_mod)
# Crea registro vacio rellenando solo el campo 907a con el rec_key
def make_fh_record(identificador):
controlfield001 = ""
controlfield008 = ""
datafield040a = ""
datafield040d = ""
datafield100a = ""
datafield245a = ""
datafield245c = ""
datafield260a = ""
datafield260b = ""
datafield260c = ""
datafield300a = ""
datafield300b = ""
datafield300c = ""
datafield500a = []
datafield538a = []
datafield700a = []
datafield700e = []
datafield752a = ""
datafield752d = ""
datafield907a = "." + identificador
datafield907b = ""
datafield907c = ""
datafield945a = ""
datafield945t = ""
datafield945y = ""
datafield945z = ""
datafield980a = ""
datafield998a = ""
datafield998b = ""
datafield998f = ""
datafield998g = ""
datafield8564u = []
datafield8564z = []
datafield538a.append("System requirements: PC, World Wide Web Browser and DJVU reader")
datafield538a.append("Available electronically via Internet")
record = RegistroFH(
controlfield001,
controlfield008,
datafield040a,
datafield040d,
datafield100a,
datafield245a,
datafield245c,
datafield260a,
datafield260b,
datafield260c,
datafield300a,
datafield300b,
datafield300c,
datafield500a,
datafield538a,
datafield700a,
datafield700e,
datafield752a,
datafield752d,
datafield907a,
datafield907b,
datafield907c,
datafield945a,
datafield945t,
datafield945y,
datafield945z,
datafield980a,
datafield998a,
datafield998b,
datafield998f,
datafield998g,
datafield8564u,
datafield8564z
);
return record
# Devuelve el registro en MARCXML (relleno con los campos propios del PFC)
# de un registro (del tipo registroFH) __YA CREADO__
# algunos campos son repetibles.
def crea_marcxml_fh(registro):
cadena = ""
if len(registro.datafield8564u) == 0: return cadena
# sigue siempre que el registro TENGA URL...
cadena += '\n'
if registro.controlfield001 != "":
cadena += '''\t%(controlfield)s\n''' % { 'controlfield' : registro.controlfield001 }
if registro.controlfield008 != "":
cadena += '''\t%(controlfield)s\n''' % { 'controlfield' : registro.controlfield008 }
if registro.datafield040a != "":
cadena += '''\t\n\t\t%(datafield040a)s\n'''% { 'datafield040a' : registro.datafield040a }
if registro.datafield040d != "":
cadena += '''\t\t%(datafield040d)s\n''' % { 'datafield040d' : registro.datafield040d }
cadena += '''\t\n'''
if registro.datafield100a != "":
cadena += '''\t\n\t\t%(datafield100a)s\n\t\n''' % { 'datafield100a' : registro.datafield100a }
if registro.datafield245a != "":
cadena += '''\t\n\t\t%(datafield245a)s\n\t\n''' % { 'datafield245a' : registro.datafield245a }
if registro.datafield260a != "":
cadena += '''\t\n\t\t%(datafield260a)s\n''' % { 'datafield260a' : registro.datafield260a }
if registro.datafield260b!= "":
cadena += '''\t\t%(datafield260b)s\n''' % { 'datafield260b' : registro.datafield260b }
if registro.datafield260c!= "":
cadena += '''\t\t%(datafield260c)s\n''' % { 'datafield260c' : registro.datafield260c }
cadena += '''\t\n'''
if registro.datafield300a != "":
cadena += '''\t\t\n\t%(datafield300a)s\n\t\n''' % { 'datafield300a' : registro.datafield300a }
# Generacion de palabras clave (almacenadas en el array de strings keywords)
for contador in range(len(registro.datafield500a)):
cadena += '''\t\n\t\t%(comentario_i)s\n\t\n''' % { 'comentario_i': registro.datafield500a[contador]}
for contador in range(len(registro.datafield538a)):
cadena += '''\t\n\t\tTexto completo %(etiq538)s\n\t\n''' % { 'etiq538': registro.datafield538a[contador] }
if (len(registro.datafield700a)>0) and (len(registro.datafield700a) == len(registro.datafield700e)):
for i in range(len(registro.datafield700a)):
cadena += '''\t\n\t\t%(700a_i)s\n\t\t%(700e_i)s\n\t\n''' % { '700a_i': registro.datafield700a[i], '700e_i': registro.datafield700e[i]}
if registro.datafield752a != "":
cadena += '''\t\n\t\t%(datafield752a)s\n''' % { 'datafield752a' : registro.datafield752a }
if registro.datafield752d != "":
cadena += '''\t\t%(datafield752d)s\n''' % { 'datafield752d' : registro.datafield752d }
cadena += '''\t\n'''
for contador in range(len(registro.datafield8564u)):
try:
cadena += '''\t\n\t\t%(texto)s\n\t\t%(url)s\n\t\n''' % { 'url': registro.datafield8564u[contador], 'texto' : registro.datafield8564z[contador]}
except:
cadena += '''\t\n\t\tTexto completo\n\t\t%(url)s\n\t\n''' % { 'url': registro.datafield8564u[contador]}
if registro.datafield907a != "":
cadena += '''\t\n\t\t%(datafield907a)s\n''' % { 'datafield907a' : registro.datafield907a }
if registro.datafield907b != "":
cadena += '''\t\t%(datafield907b)s\n''' % { 'datafield907b' : registro.datafield907b }
if registro.datafield907c != "":
cadena += '''\t\t%(datafield907c)s\n''' % { 'datafield907c' : registro.datafield907c }
cadena += '''\t\n'''
if registro.datafield998a != "":
cadena += '''\t\n\t\t%(datafield998a)s\n''' % { 'datafield998a' : registro.datafield998a }
if registro.datafield998b != "":
cadena += '''\t\t%(datafield998b)s\n''' % { 'datafield998b' : registro.datafield998b }
if registro.datafield998f != "":
cadena += '''\t\t%(datafield998f)s\n''' % { 'datafield998f' : registro.datafield998f }
if registro.datafield998g != "":
cadena += '''\t\t%(datafield998g)s\n''' % { 'datafield998g' : registro.datafield998g }
cadena += '''\t\n'''
if len(registro.datafield8564u) > 0:
# al menos debe haber una URL para que se genere el XML...
cadena += '''\t\n\t\tFH\n\t\n\n'''
return cadena
# Concatena al fichero el pasado por parametro
# Si el fichero existe, lo borra y crea uno nuevo. __NO CONCATENA__
def escribe_a_fichero(filename, contenidofichero):
# Abrir fichero 'filename' para escritura
file_handle = open (filename, 'w' )
# Escribe contenidofichero al fichero 'filename'
file_handle.write(contenidofichero)
# Muestra el fichero por pantalla
# print contenidofichero
# cierra el fichero 'filename'
file_handle.close
# Concatena al fichero el pasado por parametro
# Si el fichero existe, lo borra y crea uno nuevo. __NO CONCATENA__
def concatena_a_fichero(filename, contenidofichero):
# Abrir fichero 'filename' para escritura
file_handle = open (filename, 'a' )
# Escribe contenidofichero al fichero 'filename'
file_handle.write(contenidofichero)
# Muestra el fichero por pantalla
# print contenidofichero
# cierra el fichero 'filename'
file_handle.close
# Informa de los resultados del proceso de consulta
def informa_resultados():
print "Total de registros tratados: %d, de los cuales" %(cuantosnew + cuantosmod)
print "NUEVOS: %d" %(cuantosnew)
print "MODIFICADOS: %d" %(cuantosmod)
# MAIN -------------------------------------------------
global cuantosmod
cuantosmod = 0
global cuantosnew
cuantosnew = 0
importar_los_modificados()
informa_resultados() |