Projects/worblehat-old
Projects
/
worblehat-old
Archived
12
0
Fork 0

begynt på funksjonen book_from_xml

This commit is contained in:
Øyvind Almelid 2010-09-18 15:20:50 +00:00
parent 4d7ff0d4c6
commit d173b9396e
4 changed files with 72 additions and 16 deletions

View File

@ -1,13 +1,15 @@
from web.library.models import *
from xml.dom import minidom from xml.dom import minidom
from PyZ3950 import zoom from PyZ3950 import zoom
import readline
exit_commands = ['exit', 'abort', 'quit', 'bye', 'eat flaming death', 'q'] exit_commands = ['exit', 'abort', 'quit', 'bye', 'eat flaming death', 'q']
class Bibsys(): class ZLibrary():
def __init__(self): def __init__(self, host, port, dbname, syntax):
self.conn = zoom.Connection ('z3950.bibsys.no', 2100) self.conn = zoom.Connection(host, port)
self.conn.databaseName = 'BIBSYS' self.conn.databaseName = dbname
self.conn.preferredRecordSyntax = 'XML' self.conn.preferredRecordSyntax = syntax
def isbn_search(self, isbn): def isbn_search(self, isbn):
query = zoom.Query('CCL', 'ISBN='+isbn) query = zoom.Query('CCL', 'ISBN='+isbn)
@ -17,6 +19,17 @@ class Bibsys():
def close(self): def close(self):
self.conn.close() self.conn.close()
class Congress(ZLibrary):
def __init__(self):
ZLibrary.__init__(self, 'z3950.loc.gov', 7090, 'VOYAGER', 'USMARC')
class Bibsys(ZLibrary):
def __init__(self):
ZLibrary.__init__(self, 'z3950.bibsys.no', 2100, 'BIBSYS', 'XML')
# self.conn = zoom.Connection ('z3950.bibsys.no', 2100)
# self.conn.databaseName = 'BIBSYS'
# self.conn.preferredRecordSyntax = 'XML'
#class Menu(): #class Menu():
def get_book_loop(): def get_book_loop():
@ -27,8 +40,33 @@ def get_book_loop():
break break
else: else:
r = bib.isbn_search(input) r = bib.isbn_search(input)
if len(r) > 0: if len(r) == 1:
print "Found one match"
print r[0] print r[0]
book_from_xml(r[0])
# document = minidom.parseString(str(r[0])[9:])
# print document.getElementsByTagName('dc:title')[0].childNodes[0].data
elif len(r) > 1:
print "Found several matches"
else:
print "No results found"
bib.close() bib.close()
def book_from_xml(dc):
b = Book()
document = minidom.parseString(str(dc)[9:])
titles = document.getElementsByTagName('dc:title')
if titles.length == 1:
title = ""
for node in titles[0].childNodes:
if node.nodeType == node.TEXT_NODE:
title += " "+node.data
title = title.strip().split('/')
(title, authors) = (title[:-1],title[-1])
authors = authors.split(',')
print title, authors
else:
print "Several titles found, owshi"
get_book_loop() get_book_loop()

View File

@ -0,0 +1,7 @@
from web.library.models import *
from django.contrib import admin
mod = [Category, BookSeries, ReferenceType, Reference, Book, AlternativeTitle, Copy, Person, Relation, BookPerson, Placement]
for model in mod:
admin.site.register(model)

View File

@ -1,5 +1,10 @@
from django.db import models from django.db import models
book_fields = {'isbn' : 'ISBN', 'id' : 'Identifier', 'title' : 'Title',
'subtitle' : 'Subtitle', 'category' : 'Category', 'publisher':'Publisher',
'published_year':'Published year', 'edition' : 'Edition', 'num_pages' : 'Number of pages',
'series' : 'Series', 'description' : 'Description'}
class Category(models.Model): class Category(models.Model):
id = models.CharField(max_length=255, primary_key=True) id = models.CharField(max_length=255, primary_key=True)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
@ -8,6 +13,13 @@ class BookSeries(models.Model):
id = models.CharField(max_length=20, primary_key=True) id = models.CharField(max_length=20, primary_key=True)
title = models.CharField(max_length=511) title = models.CharField(max_length=511)
class ReferenceType(models.Model):
name = models.CharField(max_length=31)
class Reference(models.Model):
reference_type = models.ForeignKey(ReferenceType)
text = models.CharField(max_length=1023)
class Book(models.Model): class Book(models.Model):
isbn = models.CharField(max_length=13, primary_key=True) isbn = models.CharField(max_length=13, primary_key=True)
id = models.CharField(max_length=255, unique=True) id = models.CharField(max_length=255, unique=True)
@ -22,6 +34,11 @@ class Book(models.Model):
description = models.CharField(max_length=1023, null=True, blank=True) description = models.CharField(max_length=1023, null=True, blank=True)
picture = models.ImageField(upload_to='%Y/%m/%d/pictures', null=True, blank=True) picture = models.ImageField(upload_to='%Y/%m/%d/pictures', null=True, blank=True)
thumbnail = models.ImageField(upload_to='%Y/%m/%d/thumbnails', null=True, blank=True) thumbnail = models.ImageField(upload_to='%Y/%m/%d/thumbnails', null=True, blank=True)
references = models.ManyToManyField(Reference, related_name='books')
def full_print(self):
for field in book_fields.items():
print '%15s: %-30s' % (field[1],eval('self.'+field[0]))
class AlternativeTitle(models.Model): class AlternativeTitle(models.Model):
book = models.ForeignKey(Book) book = models.ForeignKey(Book)
@ -36,6 +53,7 @@ class Person(models.Model):
id = models.CharField(max_length=255, primary_key=True) id = models.CharField(max_length=255, primary_key=True)
first_name = models.CharField(max_length=255) first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255)
references = models.ManyToManyField(Reference, related_name='persons')
class Relation(models.Model): class Relation(models.Model):
name = models.CharField(max_length=31) name = models.CharField(max_length=31)
@ -45,13 +63,6 @@ class BookPerson(models.Model):
person = models.ForeignKey(Person) person = models.ForeignKey(Person)
relation = models.ForeignKey(Relation) relation = models.ForeignKey(Relation)
class ReferenceType(models.Model):
name = models.CharField(max_length=31)
class Reference(models.Model):
reference_type = models.ForeignKey(ReferenceType)
text = models.CharField(max_length=1023)
class Placement(models.Model): class Placement(models.Model):
category = models.ForeignKey(Category) category = models.ForeignKey(Category)
shelf = models.CharField(max_length=10) shelf = models.CharField(max_length=10)

View File

@ -1,8 +1,8 @@
from django.conf.urls.defaults import * from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin: # Uncomment the next two lines to enable the admin:
# from django.contrib import admin from django.contrib import admin
# admin.autodiscover() admin.autodiscover()
urlpatterns = patterns('', urlpatterns = patterns('',
# Example: # Example:
@ -13,5 +13,5 @@ urlpatterns = patterns('',
# (r'^admin/doc/', include('django.contrib.admindocs.urls')), # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin: # Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)), (r'^admin/', include(admin.site.urls)),
) )