2014-12-22 6 views
5

Ich versuche, das Metadata Harvesting-Paket zu verwenden https://pypi.python.org/pypi/pyoai die Daten auf dieser Seite https://www.duo.uio.no/oai/request?verb=IdentifyMetadata Harvesting

Ich habe versucht, das Beispiel auf der pyaoi Website zu ernten, aber das hat nicht funktioniert. Wenn ich es teste, erhalte ich einen Fehler. Der Code ist:

from oaipmh.client import Client 
from oaipmh.metadata import MetadataRegistry, oai_dc_reader 

URL = 'http://uni.edu/ir/oaipmh' 
registry = MetadataRegistry() 
registry.registerReader('oai_dc', oai_dc_reader) 
client = Client(URL, registry) 

for record in client.listRecords(metadataPrefix='oai_dc'): 
    print record 

Dies ist der Stack-Trace:

Traceback (most recent call last): 
    File "/Users/arashsaidi/PycharmProjects/get-new-DUO/get-files.py", line 8, in <module> 
    for record in client.listRecords(metadataPrefix='oai_dc'): 
    File "/Users/arashsaidi/.virtualenvs/lbk/lib/python2.7/site-packages/oaipmh/common.py", line 115, in method 
    return obj(self, **kw) 
    File "/Users/arashsaidi/.virtualenvs/lbk/lib/python2.7/site-packages/oaipmh/common.py", line 110, in __call__ 
    return bound_self.handleVerb(self._verb, kw) 
    File "/Users/arashsaidi/.virtualenvs/lbk/lib/python2.7/site-packages/oaipmh/client.py", line 65, in handleVerb 
    kw, self.makeRequestErrorHandling(verb=verb, **kw))  
    File "/Users/arashsaidi/.virtualenvs/lbk/lib/python2.7/site-packages/oaipmh/client.py", line 273, in makeRequestErrorHandling 
    raise error.XMLSyntaxError(kw) 
oaipmh.error.XMLSyntaxError: {'verb': 'ListRecords', 'metadataPrefix': 'oai_dc'} 

Ich brauche Zugriff auf alle Dateien auf der Seite erreiche ich oben verlinkt haben und eine zusätzliche Datei mit einigen Metadaten zu erzeugen.

Irgendwelche Vorschläge?

Antwort

2

I endete mit der Verwendung der Sichel-Paket, die ich viel bessere Dokumentation und einfacher zu bedienen gefunden habe:

Dieser Code ruft alle Sätze und ruft dann jeden Datensatz aus jedem Satz. Dies scheint die beste Lösung angesichts der Tatsache, dass es mehr als 30000 Datensätze zu bewältigen gibt. Für jeden Satz gibt es mehr Kontrolle. Hoffe, das könnte anderen da draußen helfen. Ich habe keine Ahnung, warum Bibliotheken OAI verwenden, scheint nicht ein guter Weg, um Daten zu mir zu organisieren ...

# gets sickle from OAI 
     sickle = Sickle('http://www.duo.uio.no/oai/request') 
     sets = sickle.ListSets() # gets all sets 
     for recs in sets: 
      for rec in recs: 
       if rec[0] == 'setSpec': 
        try: 
         print rec[1][0], self.spec_list[rec[1][0]] 
         records = sickle.ListRecords(metadataPrefix='xoai', set=rec[1][0], ignore_deleted=True) 
         self.write_file_and_metadata() 
        except Exception as e: 
         # simple exception handling if not possible to retrieve record 
         print('Exception: {}'.format(e)) 
0

Es scheint, dass die Verbindung von der pyoai Website (http://uni.edu/ir/oaipmh) tot ist, weil es 404.
Dennoch gibt, sollten Sie in der Lage sein, die Daten von Ihrer Website wie folgt zu erhalten:

from oaipmh.client import Client 
from oaipmh.metadata import MetadataRegistry, oai_dc_reader 

URL = 'https://www.duo.uio.no/oai/request' 
registry = MetadataRegistry() 
registry.registerReader('oai_dc', oai_dc_reader) 
client = Client(URL, registry) 

# identify info 
identify = client.identify() 
print "Repository name: {0}".format(identify.repositoryName()) 
print "Base URL: {0}".format(identify.baseURL()) 
print "Protocol version: {0}".format(identify.protocolVersion()) 
print "Granularity: {0}".format(identify.granularity()) 
print "Compression: {0}".format(identify.compression()) 
print "Deleted record: {0}".format(identify.deletedRecord()) 

# list records 
records = client.listRecords(metadataPrefix='oai_dc') 
for record in records: 
    # do something with the record 
    pass 

# list metadata formats 
formats = client.listMetadataFormats() 
for f in formats: 
    # do something with f 
    pass 
Verwandte Themen