예제 #1
0
def get_records_from_marc(isbn):
    if isbn not in db:
        return


#    for loc in db[isbn].split(' '):
#        data = get_data(loc)
#        print loc
#        want = ['100', '110', '111', '240', '245', '260'] + [str(i) for i in range(500,600) if i not in (505, 520)]
#        for tag, line in get_tag_lines(data, set(want)):
#            sub = list(get_all_subfields(line))
#            if tag.startswith('5'):
#                assert len(sub) == 1 and sub[0][0] == 'a'
#                note = sub[0][1]
#                if note.find('ublish') != -1 or note.find('riginal') != -1:
#                    print '  note:', note
#                continue
#            print '  ', tag, sub
#        print
    recs = [(loc, build_record(get_data(loc))) for loc in db[isbn].split(' ')]
    keys = set()
    print
    for loc, rec in recs:
        print '  ', loc
        #        keys.update([k for k in rec.keys() if k.find('title') != -1 or k in ('authors', 'title', 'contributions', 'work_title')])
        keys.update(rec.keys())
    print
    for k in keys:
        print k
        for loc, rec in recs:
            print "  ", rec.get(k, '###')
        print
    print
예제 #2
0
def get_records_from_marc(isbn):
    if isbn not in db:
        return
#    for loc in db[isbn].split(' '):
#        data = get_data(loc)
#        print loc
#        want = ['100', '110', '111', '240', '245', '260'] + [str(i) for i in range(500,600) if i not in (505, 520)]
#        for tag, line in get_tag_lines(data, set(want)):
#            sub = list(get_all_subfields(line))
#            if tag.startswith('5'):
#                assert len(sub) == 1 and sub[0][0] == 'a'
#                note = sub[0][1]
#                if note.find('ublish') != -1 or note.find('riginal') != -1:
#                    print '  note:', note
#                continue
#            print '  ', tag, sub
#        print
    recs = [(loc, build_record(get_data(loc))) for loc in db[isbn].split(' ')]
    keys = set()
    print
    for loc, rec in recs:
        print '  ', loc
#        keys.update([k for k in rec.keys() if k.find('title') != -1 or k in ('authors', 'title', 'contributions', 'work_title')])
        keys.update(rec.keys())
    print
    for k in keys:
        print k
        for loc, rec in recs:
            print "  ", rec.get(k, '###')
        print
    print
예제 #3
0
def show_locs(locs, isbn):
    recs = [(loc, build_record(marc_data(loc))) for loc in locs]
    keys = set()
    ret = "records found from %d libraries<br>" % len(recs)
    ret += '<ul>'
    for loc, rec in recs:
        s = loc[:loc.find('/')]
        ret += '<li><a href="http://openlibrary.org/show-marc/%s">%s</a>' % (
            loc, s)
        keys.update([k for k in rec.keys()])
        for f in 'uri':
            if f in rec:
                del rec[f]
    ret += '</ul>'
    keys -= set(['uri'])
    ret += '<table>'
    first_key = True
    first = []
    for f in [
            'isbn_10', 'title', 'subtitle', 'by_statement', 'authors',
            'contributions'
    ]:
        if f in keys:
            first += [f]
            keys -= set([f])
    for k in first + list(keys):
        v = [(rec.get(k, None), loc) for loc, rec in recs]
        #        if k == 'isbn_10' and not isbn and v:
        #            isbn = most_freq_isbn(v)
        if k == 'languages':
            v = [([i['key'][3:] for i in l] if l else None, loc)
                 for l, loc in v]
        if all(i is None or (isinstance(i, list) and len(i) == 1)
               for i, loc in v):
            v = [(i[0] if i else None, loc) for i, loc in v]

        ret += '<tr><th valign="top">%s</th><td>' % k
        if any(isinstance(i, list) or isinstance(i, dict) for i, loc in v):
            if k == 'authors':  # easiest to switch to raw MARC display
                v = [(marc_authors(marc_data(loc)), loc) for i, loc in v]
            elif k == 'isbn_10':
                v = [(list_to_html(sorted(i)), loc) if i else (None, loc)
                     for i, loc in v]
            else:
                v = [(list_to_html(i), loc) if i else (None, loc)
                     for i, loc in v]
        else:
            v = [(esc(i), loc) for i, loc in v]


#        print repr([i[0] for i in v]), '<br>'
        ret += counts_html(v)
        if isbn and first_key:
            ret += '<td valign="top" rowspan="%d"><img src="https://covers.openlibrary.org/b/isbn/%s-L.jpg">' % (
                len(first) + len(keys), isbn)
            first_key = False
        ret += '</td></tr>'
    ret += '</table>'
    return ret
예제 #4
0
def show_locs(locs, isbn):
    recs = [(loc, build_record(marc_data(loc))) for loc in locs]
    keys = set()
    ret = "records found from %d libraries<br>" % len(recs)
    ret += "<ul>"
    for loc, rec in recs:
        s = loc[: loc.find("/")]
        ret += '<li><a href="http://openlibrary.org/show-marc/%s">%s</a>' % (loc, s)
        keys.update([k for k in rec.keys()])
        for f in "uri":
            if f in rec:
                del rec[f]
    ret += "</ul>"
    keys -= set(["uri"])
    ret += "<table>"
    first_key = True
    first = []
    for f in ["isbn_10", "title", "subtitle", "by_statement", "authors", "contributions"]:
        if f in keys:
            first += [f]
            keys -= set([f])
    for k in first + list(keys):
        v = [(rec.get(k, None), loc) for loc, rec in recs]
        #        if k == 'isbn_10' and not isbn and v:
        #            isbn = most_freq_isbn(v)
        if k == "languages":
            v = [([i["key"][3:] for i in l] if l else None, loc) for l, loc in v]
        if all(i is None or (isinstance(i, list) and len(i) == 1) for i, loc in v):
            v = [(i[0] if i else None, loc) for i, loc in v]

        ret += '<tr><th valign="top">%s</th><td>' % k
        if any(isinstance(i, list) or isinstance(i, dict) for i, loc in v):
            if k == "authors":  # easiest to switch to raw MARC display
                v = [(marc_authors(marc_data(loc)), loc) for i, loc in v]
            elif k == "isbn_10":
                v = [(list_to_html(sorted(i)), loc) if i else (None, loc) for i, loc in v]
            else:
                v = [(list_to_html(i), loc) if i else (None, loc) for i, loc in v]
        else:
            v = [(esc(i), loc) for i, loc in v]
        #        print `[i[0] for i in v]`, '<br>'
        ret += counts_html(v)
        if isbn and first_key:
            ret += '<td valign="top" rowspan="%d"><img src="http://covers.openlibrary.org/b/isbn/%s-L.jpg">' % (
                len(first) + len(keys),
                isbn,
            )
            first_key = False
        ret += "</td></tr>"
    ret += "</table>"
    return ret