diff options
Diffstat (limited to 'cmd/iiifdownloader/main.go')
| -rw-r--r-- | cmd/iiifdownloader/main.go | 30 | 
1 files changed, 27 insertions, 3 deletions
diff --git a/cmd/iiifdownloader/main.go b/cmd/iiifdownloader/main.go index 7329549..3572dae 100644 --- a/cmd/iiifdownloader/main.go +++ b/cmd/iiifdownloader/main.go @@ -21,6 +21,7 @@ Currently supports the following IIIF using services:  `  const bnfPrefix = `https://gallica.bnf.fr/ark:/` +const bsbPrefix = `https://reader.digitale-sammlungen.de/de/fs1/object/display/`  func filesAreIdentical(fn1, fn2 string) (bool, error) {  	f1, err := os.Open(fn1) @@ -50,6 +51,14 @@ func filesAreIdentical(fn1, fn2 string) (bool, error) {  	return true, nil  } +func parseMets(url string) ([]string, error) { +	var urls []string +	// TODO: download and parse xml; +	// https://daten.digitale-sammlungen.de/~db/mets/bsb11274872_mets.xml +	// mets:mets -> mets:fileSec -> mets:fileGrp USE="MAX" -> mets:file -> mets:FLocat xlink:href +	return urls, nil +} +  func main() {  	flag.Usage = func() {  		fmt.Fprintf(flag.CommandLine.Output(), usage) @@ -67,8 +76,9 @@ func main() {  	var bookdir string  	var pgurlStart, pgurlEnd string  	var pgurlAltStart, pgurlAltEnd string -	//var pgNums []int +	var pgUrls []string  	var noPgNums bool +	var err error  	switch {  	case strings.HasPrefix(url, bnfPrefix): @@ -94,16 +104,30 @@ func main() {  		// the missing ones in less good quality from an alternative URL.  		pgurlAltStart = "https://gallica.bnf.fr/ark:/" + bookid + "/f"  		pgurlAltEnd = ".highres" +	case strings.HasPrefix(url, bsbPrefix): +		f := strings.Split(url[len(bsbPrefix):], "_") +		if len(f) < 2 { +			log.Fatalln("Failed to extract BNF book ID from URL") +		} +		bookid := f[0] +		metsurl := "https://daten.digitale-sammlungen.de/~db/mets/" + bookid + "_mets.xml" + +		pgUrls, err = parseMets(metsurl) +		if err != nil { +			log.Fatalf("Error parsing mets url %s: %v\n", metsurl, err) +		}  	default:  		log.Fatalln("Error: generic IIIF downloading not supported yet")  	} -	err := os.MkdirAll(bookdir, 0777) +	err = os.MkdirAll(bookdir, 0777)  	if err != nil {  		log.Fatalf("Error creating book dir: %v\n", err)  	} -	if noPgNums { +	if len(pgUrls) > 0 { +		fmt.Printf("I'll do something proper with these urls: %v\n", pgUrls) +	} else if noPgNums {  		pgnum := 0  		for {  			pgnum++  | 
