Compare commits

...

4 Commits

Author SHA1 Message Date
af8e4d21b1 missed commits 2024-02-12 13:34:23 +01:00
440682d4c1 fix #80: using os.MkdirAll():
Recursively create ad dir including output dir. The output dir itself
is not being created separately anymore. That way, no directory will
be created if no ads could be downloaded.
2024-02-12 13:28:45 +01:00
fe9f9524db fix #81: add arm64 build support 2024-02-12 07:28:50 +01:00
2288806105 fix #77: use processed ad dir for duplicate checking, not slug 2024-02-10 15:15:43 +01:00
6 changed files with 28 additions and 26 deletions

View File

@@ -34,7 +34,7 @@ import (
) )
const ( const (
VERSION string = "0.3.4" VERSION string = "0.3.5"
Baseuri string = "https://www.kleinanzeigen.de" Baseuri string = "https://www.kleinanzeigen.de"
Listuri string = "/s-bestandsliste.html" Listuri string = "/s-bestandsliste.html"
Defaultdir string = "." Defaultdir string = "."

View File

@@ -116,11 +116,6 @@ func Main(output io.Writer) int {
if err != nil { if err != nil {
return Die(err) return Die(err)
} }
err = Mkdir(outdir)
if err != nil {
return Die(err)
}
conf.Outdir = outdir conf.Outdir = outdir
// used for all HTTP requests // used for all HTTP requests

View File

@@ -22,7 +22,12 @@ freebsd/amd64
linux/amd64 linux/amd64
netbsd/amd64 netbsd/amd64
openbsd/amd64 openbsd/amd64
windows/amd64" windows/amd64
freebsd/arm64
linux/arm64
netbsd/arm64
openbsd/arm64
windows/arm64"
tool="$1" tool="$1"
version="$2" version="$2"

View File

@@ -126,21 +126,32 @@ func ScrapeAd(fetch *Fetcher, uri string) error {
advertisement.CalculateExpire() advertisement.CalculateExpire()
proceed := CheckAdVisited(fetch.Config, advertisement.Slug) // prepare ad dir name
addir, err := AdDirName(fetch.Config, advertisement)
if err != nil {
return err
}
proceed := CheckAdVisited(fetch.Config, addir)
if !proceed { if !proceed {
return nil return nil
} }
// write listing // write listing
addir, err := WriteAd(fetch.Config, advertisement) err = WriteAd(fetch.Config, advertisement, addir)
if err != nil { if err != nil {
return err return err
} }
// tell the user
slog.Debug("extracted ad listing", "ad", advertisement) slog.Debug("extracted ad listing", "ad", advertisement)
// stats
fetch.Config.IncrAds() fetch.Config.IncrAds()
// register for later checks
DirsVisited[addir] = 1
return ScrapeImages(fetch, advertisement, addir) return ScrapeImages(fetch, advertisement, addir)
} }

View File

@@ -72,19 +72,13 @@ func AdDirName(conf *Config, advertisement *Ad) (string, error) {
return buf.String(), nil return buf.String(), nil
} }
func WriteAd(conf *Config, advertisement *Ad) (string, error) { func WriteAd(conf *Config, advertisement *Ad, addir string) error {
// prepare ad dir name
addir, err := AdDirName(conf, advertisement)
if err != nil {
return "", err
}
// prepare output dir // prepare output dir
dir := filepath.Join(conf.Outdir, addir) dir := filepath.Join(conf.Outdir, addir)
err = Mkdir(dir) err := Mkdir(dir)
if err != nil { if err != nil {
return "", err return err
} }
// write ad file // write ad file
@@ -92,7 +86,7 @@ func WriteAd(conf *Config, advertisement *Ad) (string, error) {
listingfd, err := os.Create(listingfile) listingfd, err := os.Create(listingfile)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to create Adlisting.txt: %w", err) return fmt.Errorf("failed to create Adlisting.txt: %w", err)
} }
defer listingfd.Close() defer listingfd.Close()
@@ -104,17 +98,17 @@ func WriteAd(conf *Config, advertisement *Ad) (string, error) {
tmpl, err := tpl.New("adlisting").Parse(conf.Template) tmpl, err := tpl.New("adlisting").Parse(conf.Template)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to parse adlisting template: %w", err) return fmt.Errorf("failed to parse adlisting template: %w", err)
} }
err = tmpl.Execute(listingfd, advertisement) err = tmpl.Execute(listingfd, advertisement)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to execute adlisting template: %w", err) return fmt.Errorf("failed to execute adlisting template: %w", err)
} }
slog.Info("wrote ad listing", "listingfile", listingfile) slog.Info("wrote ad listing", "listingfile", listingfile)
return addir, nil return nil
} }
func WriteImage(filename string, reader *bytes.Reader) error { func WriteImage(filename string, reader *bytes.Reader) error {
@@ -176,9 +170,6 @@ func CheckAdVisited(conf *Config, adname string) bool {
return false return false
} }
// register
DirsVisited[adname] = 1
// overwrite // overwrite
return true return true
} }

View File

@@ -32,7 +32,7 @@ import (
func Mkdir(dir string) error { func Mkdir(dir string) error {
if _, err := os.Stat(dir); errors.Is(err, os.ErrNotExist) { if _, err := os.Stat(dir); errors.Is(err, os.ErrNotExist) {
err := os.Mkdir(dir, os.ModePerm) err := os.MkdirAll(dir, os.ModePerm)
if err != nil { if err != nil {
return fmt.Errorf("failed to create directory %s: %w", dir, err) return fmt.Errorf("failed to create directory %s: %w", dir, err)
} }