Skip to content

Instantly share code, notes, and snippets.

@eikeon
Forked from edsu/ammem.go
Created January 19, 2012 20:22
Show Gist options
  • Save eikeon/1642344 to your computer and use it in GitHub Desktop.
Save eikeon/1642344 to your computer and use it in GitHub Desktop.
package main
import (
"encoding/xml"
"fmt"
"log"
"net/http"
)
type Set struct {
Name string `xml:"setName"`
Id string `xml:"setSpec"`
}
func (set *Set) Members() (members []string) {
location := "http://memory.loc.gov/cgi-bin/oai2_0?verb=ListRecords&metadataPrefix=oai_dc&set=" + set.Id
r, err := http.Get(location)
if err == nil {
var result struct {
Items []string `xml:"ListRecords>record>metadata>dc>identifier"`
}
err = xml.Unmarshal(r.Body, &result)
if err == nil {
members = result.Items
} else {
log.Print(err)
}
} else {
log.Print(err)
}
return
}
func listSets() (sets []Set) {
location := "http://memory.loc.gov/cgi-bin/oai2_0?verb=ListSets"
r, err := http.Get(location)
if err == nil {
var result struct {
Sets []Set `xml:"ListSets>set"`
}
err = xml.Unmarshal(r.Body, &result)
if err == nil {
sets = result.Sets
} else {
log.Print(err)
}
} else {
log.Print(err)
}
return sets
}
func main() {
for _, set := range(listSets()) {
fmt.Println("set:", set)
for _, member := range(set.Members()) {
fmt.Println("member:", member)
}
}
}
#!/usr/bin/env python
from oaipmh.client import Client
from oaipmh.metadata import MetadataRegistry, oai_dc_reader
oai_url = "http://memory.loc.gov/cgi-bin/oai2_0"
oai_registry = MetadataRegistry()
oai_registry.registerReader('oai_dc', oai_dc_reader)
ammem = Client(oai_url, oai_registry)
def sets():
for set_id, set_name, other in ammem.listSets():
yield set_id, set_name
def set_members():
for set_name, set_id in sets():
for header, record, other in ammem.listRecords(metadataPrefix='oai_dc',
set=set_name):
title = record.getField('title')[0]
urls = record.getField('identifier')
if len(urls) > 0:
url = urls[0]
else:
url = ""
id = header.identifier()
yield set_id, set_name, title, url
if __name__ == "__main__":
for m in set_members():
print "\t".join(m).encode('utf-8')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment