Documentation
¶
Index ¶
- Constants
- Variables
- func MoveAndCompress(src, dst string) error
- func MustGlob(pattern string) []string
- func PrependSchema(s string) string
- func UserHomeDir() string
- type About
- type Client
- type Description
- type DirLaster
- type Doer
- type GetRecord
- type Harvest
- type Header
- type Identify
- type Interval
- type Laster
- type ListIdentifiers
- type ListMetadataFormats
- type ListRecords
- type ListSets
- type Metadata
- type MetadataFormat
- type MultiError
- type OAIError
- type Record
- type Repository
- type Request
- type RequestNode
- type Response
- type Set
- type Values
Constants ¶
const ( DefaultTimeout = 5 * time.Minute DefaultMaxRetries = 8 )
const Day = 24 * time.Hour
const Version = "0.1.6"
Variables ¶
var ( StdClient = Client{Doer: http.DefaultClient} DefaultClient = Client{Doer: CreateDoer(DefaultTimeout, DefaultMaxRetries)} // Example for broken XML: http://eprints.vu.edu.au/perl/oai2. Add more // weird things to be cleaned before XML parsing here. Another faulty: // http://digitalcommons.gardner-webb.edu/do/oai/?from=2016-02-29&metadataPr // efix=oai_dc&until=2016-03-31&verb=ListRecords. Replace control chars // outside XML char range. ControlCharReplacer = strings.NewReplacer( "\u0001", "", "\u0002", "", "\u0003", "", "\u0004", "", "\u0005", "", "\u0006", "", "\u0007", "", "\u0008", "", "\u0009", "", "\u000B", "", "\u000C", "", "\u000E", "", "\u000F", "", "\u0010", "", "\u0011", "", "\u0012", "", "\u0013", "", "\u0014", "", "\u0015", "", "\u0016", "", "\u0017", "", "\u0018", "", "\u0019", "", "\u001A", "", "\u001B", "", "\u001C", "", "\u001D", "", "\u001E", "", "\u001F", "") )
var ( // BaseDir is where all downloaded data is stored BaseDir = filepath.Join(UserHomeDir(), ".metha") ErrAlreadySynced = errors.New("already synced") ErrInvalidEarliestDate = errors.New("invalid earliest date") )
Functions ¶
func MoveAndCompress ¶ added in v0.1.6
MoveAndCompress will move src to dst, gzipping in the process.
Types ¶
type About ¶
type About struct {
Body []byte `xml:",innerxml" json:"body,omitempty"`
}
About has addition record information.
type Client ¶
type Client struct {
Doer Doer
}
A client that can execute requests.
func CreateClient ¶
Create a client with timeout and retry properties.
type Description ¶
type Description struct {
Body []byte `xml:",innerxml"`
}
Description holds information about a set.
func (Description) GoString ¶
func (desc Description) GoString() string
Formatter for Description content.
type DirLaster ¶
DirLaster extract the maximum value from the files of a directory. The values are extracted per file via TransformFunc, which gets a filename and returns a token. The tokens are sorted and the lexikographically largest element is returned.
type GetRecord ¶
type GetRecord struct {
Record Record `xml:"record,omitempty" json:"record,omitempty"`
}
GetRecord returns a single record.
type Harvest ¶
type Harvest struct {
BaseURL string
Format string
Set string
From string
Until string
MaxRequests int
DisableSelectiveHarvesting bool
CleanBeforeDecode bool
SkipBroken bool
MaxEmptyResponses int
Identify *Identify
Started time.Time
// protects the (rare) case, where we are in the process of renaming
// harvested files and get a termination signal at the same time.
sync.Mutex
}
Harvest contains parameters for a mass-download. MaxRequests and CleanBeforeDecode are switches to handle broken token implementations and funny chars in responses. Some repos do not support selective harvesting (e.g. zvdd.org/oai2). Set "DisableSelectiveHarvesting" to try to grab metadata from these repositories. Set "SkipBroken" to ignore errors. From and Until must always be given with 2006-01-02 layout. TODO(miku): make zero type work (lazily run identify).
func NewHarvest ¶
func (*Harvest) DateLayout ¶
DateLayout converts the repository endpoints advertised granularity to Go date format strings.
type Header ¶
type Header struct {
Status string `xml:"status,attr" json:"status,omitempty"`
Identifier string `xml:"identifier,omitempty" json:"identifier,omitempty"`
DateStamp string `xml:"datestamp,omitempty" json:"datestamp,omitempty"`
SetSpec []string `xml:"setSpec,omitempty" json:"setSpec,omitempty"`
}
A Header is part of other requests.
type Identify ¶
type Identify struct {
RepositoryName string `xml:"repositoryName,omitempty" json:"repositoryName,omitempty"`
BaseURL string `xml:"baseURL,omitempty" json:"baseURL,omitempty"`
ProtocolVersion string `xml:"protocolVersion,omitempty" json:"protocolVersion,omitempty"`
AdminEmail []string `xml:"adminEmail,omitempty" json:"adminEmail,omitempty"`
EarliestDatestamp string `xml:"earliestDatestamp,omitempty" json:"earliestDatestamp,omitempty"`
DeletedRecord string `xml:"deletedRecord,omitempty" json:"deletedRecord,omitempty"`
Granularity string `xml:"granularity,omitempty" json:"granularity,omitempty"`
Description []Description `xml:"description,omitempty" json:"description,omitempty"`
}
Identify reports information about a repository.
type Interval ¶
Interval represents a span of time.
func (Interval) MonthlyIntervals ¶
MonthlyIntervals segments a given interval into montly chunks.
type ListIdentifiers ¶
type ListIdentifiers struct {
Headers []Header `xml:"header,omitempty" json:"header,omitempty"`
ResumptionToken string `xml:"resumptionToken,omitempty" json:"resumptionToken,omitempty"`
}
ListIdentifiers lists headers only.
type ListMetadataFormats ¶
type ListMetadataFormats struct {
MetadataFormat []MetadataFormat `xml:"metadataFormat,omitempty" json:"metadataFormat,omitempty"`
}
ListMetadataFormats lists supported metadata formats.
type ListRecords ¶
type ListRecords struct {
Records []Record `xml:"record" json:"record"`
ResumptionToken string `xml:"resumptionToken" json:"resumptionToken"`
}
ListRecords lists records.
type ListSets ¶
type ListSets struct {
Set []Set `xml:"set,omitempty" json:"set,omitempty"`
ResumptionToken string `xml:"resumptionToken,omitempty" json:"resumptionToken,omitempty"`
}
ListSets lists available sets. TODO(miku): resumptiontoken can have expiration date, etc.
type Metadata ¶
type Metadata struct {
Body []byte `xml:",innerxml"`
}
Metadata contains the actual metadata, conforming to various schemas.
func (Metadata) MarshalJSON ¶
type MetadataFormat ¶
type MetadataFormat struct {
MetadataPrefix string `xml:"metadataPrefix,omitempty" json:"metadataPrefix,omitempty"`
Schema string `xml:"schema,omitempty" json:"schema,omitempty"`
MetadataNamespace string `xml:"metadataNamespace,omitempty" json:"metadataNamespace,omitempty"`
}
MetadataFormat holds information about a format.
type MultiError ¶
type MultiError struct {
Errors []error
}
func (*MultiError) Error ¶
func (e *MultiError) Error() string
type OAIError ¶
type OAIError struct {
Code string `xml:"code,attr" json:"code,omitempty"`
Message string `xml:",chardata" json:"message,omitempty"`
}
An OAI protocol error.
type Record ¶
type Record struct {
Header Header `xml:"header,omitempty" json:"header,omitempty"`
Metadata Metadata `xml:"metadata,omitempty" json:"metadata,omitempty"`
About About `xml:"about,omitempty" json:"about,omitempty"`
}
Record represents a single record.
type Repository ¶
type Repository struct {
BaseURL string
}
func (Repository) Formats ¶
func (r Repository) Formats() ([]MetadataFormat, error)
func (Repository) Sets ¶
func (r Repository) Sets() ([]Set, error)
type Request ¶
type Request struct {
BaseURL string
Verb string
Identifier string
MetadataPrefix string
From string
Until string
Set string
ResumptionToken string
CleanBeforeDecode bool
}
A Request can express any request, that can be sent to an OAI server. Not all combination of values will yield valid requests.
type RequestNode ¶
type RequestNode struct {
Verb string `xml:"verb,attr" json:"verb,omitempty"`
Set string `xml:"set,attr" json:"set,omitempty"`
MetadataPrefix string `xml:"metadataPrefix,attr" json:"metadataPrefix,omitempty"`
}
RequestNode carries the request information into the response.
type Response ¶
type Response struct {
ResponseDate string `xml:"responseDate,omitempty" json:"responseDate,omitempty"`
Request RequestNode `xml:"request,omitempty" json:"request,omitempty"`
Error OAIError `xml:"error,omitempty" json:"error,omitempty"`
GetRecord GetRecord `xml:"GetRecord,omitempty" json:"GetRecord,omitempty"`
Identify Identify `xml:"Identify,omitempty" json:"Identify,omitempty"`
ListIdentifiers ListIdentifiers `xml:"ListIdentifiers,omitempty" json:"ListIdentifiers,omitempty"`
ListMetadataFormats ListMetadataFormats `xml:"ListMetadataFormats,omitempty" json:"ListMetadataFormats,omitempty"`
ListRecords ListRecords `xml:"ListRecords,omitempty" json:"ListRecords,omitempty"`
ListSets ListSets `xml:"ListSets,omitempty" json:"ListSets,omitempty"`
}
Response is the envelope. It can hold any OAI response kind.
func (*Response) GetResumptionToken ¶
GetResumptionToken returns the resumption token or an empty string if it does not have a token
func (*Response) HasResumptionToken ¶
HasResumptionToken determines if the request has a ResumptionToken.
type Set ¶
type Set struct {
SetSpec string `xml:"setSpec,omitempty" json:"setSpec,omitempty"`
SetName string `xml:"setName,omitempty" json:"setName,omitempty"`
SetDescription Description `xml:"setDescription,omitempty" json:"setDescription,omitempty"`
}
A Set has a spec, name and description.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
metha-cat
command
|
|
|
metha-files
command
|
|
|
metha-id
command
|
|
|
metha-ls
command
|
|
|
metha-sync
command
|