From 5a2c277f0e0613ec225ccfdcc267da8ef1ab52b5 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Sat, 10 Feb 2024 14:36:53 +0100 Subject: [PATCH] fix #71 and #73: add support for outdir template and enhance docs --- config.go | 4 ++- kleingebaeck.1 | 90 +++++++++++++++++++++++++++++++++++++++++++++++- kleingebaeck.go | 66 +++++++++++++++++++++++++++++++++++ kleingebaeck.pod | 87 +++++++++++++++++++++++++++++++++++++++++++++- main.go | 8 ++++- store.go | 28 +++++++++++++++ 6 files changed, 279 insertions(+), 4 deletions(-) diff --git a/config.go b/config.go index ffe2d2e..d4884cb 100644 --- a/config.go +++ b/config.go @@ -52,6 +52,8 @@ const ( DefaultAdNameTemplate string = "{{.Slug}}" + DefaultOutdirTemplate string = "." + // for image download throttling MinThrottle int = 2 MaxThrottle int = 20 @@ -128,7 +130,7 @@ func InitConfig(output io.Writer) (*Config, error) { // Load default values using the confmap provider. if err := kloader.Load(confmap.Provider(map[string]interface{}{ "template": template, - "outdir": ".", + "outdir": DefaultOutdirTemplate, "loglevel": "notice", "userid": 0, "adnametemplate": DefaultAdNameTemplate, diff --git a/kleingebaeck.1 b/kleingebaeck.1 index e920378..5cc6d1d 100644 --- a/kleingebaeck.1 +++ b/kleingebaeck.1 @@ -195,7 +195,7 @@ Be careful if you want to change the template. The variable is a multiline string surrounded by three double quotes. You can left out certain fields and use any formatting you like. Refer to for details how to write a -template. +template. Also read the \s-1TEMPLATES\s0 section below. .PP If you're on windows and want to customize the output directory, put it into single quotes to avoid the backslashes interpreted as escape @@ -204,6 +204,94 @@ chars like this: .Vb 1 \& outdir = \*(AqC:\eData\eAds\*(Aq .Ve +.SH "TEMPLATES" +.IX Header "TEMPLATES" +Various parts of the configuration can be modified using templates: +the output directory, the ad directory and the ad listing itself. +.SS "\s-1OUTPUT DIR TEMPLATE\s0" +.IX Subsection "OUTPUT DIR TEMPLATE" +The config varialbe \f(CW\*(C`outdir\*(C'\fR or the command line parameter \f(CW\*(C`\-o\*(C'\fR take a +template which may contain: +.ie n .IP """{{.Year}}""" 4 +.el .IP "\f(CW{{.Year}}\fR" 4 +.IX Item "{{.Year}}" +.PD 0 +.ie n .IP """{{.Month}}""" 4 +.el .IP "\f(CW{{.Month}}\fR" 4 +.IX Item "{{.Month}}" +.ie n .IP """{{.Day}}""" 4 +.el .IP "\f(CW{{.Day}}\fR" 4 +.IX Item "{{.Day}}" +.PD +.PP +That way you can create a new output directory for every backup +run. For example: +.PP +.Vb 1 +\& outdir = "/home/backups/ads\-{{.Year}}\-{{.Month}}\-{{.Day}}" +.Ve +.PP +Or using the command line flag: +.PP +.Vb 1 +\& \-o "/home/backups/ads\-{{.Year}}\-{{.Month}}\-{{.Day}}" +.Ve +.PP +The default value is \f(CW\*(C`.\*(C'\fR \- the current directory. +.SS "\s-1AD DIRECTORY TEMPLATE\s0" +.IX Subsection "AD DIRECTORY TEMPLATE" +The ad directory name can be modified using the following ad values: +.IP "{{.Price}}" 4 +.IX Item "{{.Price}}" +.PD 0 +.IP "{{.ID}}" 4 +.IX Item "{{.ID}}" +.IP "{{.Category}}" 4 +.IX Item "{{.Category}}" +.IP "{{.Condition}}" 4 +.IX Item "{{.Condition}}" +.IP "{{.Created}}" 4 +.IX Item "{{.Created}}" +.IP "{{.Slug}}" 4 +.IX Item "{{.Slug}}" +.IP "{{.Text}}" 4 +.IX Item "{{.Text}}" +.PD +.PP +It can only be configured in the config file. By default only +\&\f(CW\*(C`{{.Slug}}\*(C'\fR is being used, this is the title of the ad in url format. +.SS "\s-1AD TEMPLATE\s0" +.IX Subsection "AD TEMPLATE" +The ad listing itself can be modified as well, using the same +variables as the ad name template above. +.PP +This is the default template: +.PP +.Vb 7 +\& Title: {{.Title}} +\& Price: {{.Price}} +\& Id: {{.ID}} +\& Category: {{.Category}} +\& Condition: {{.Condition}} +\& Created: {{.Created}} +\& Expire: {{.Expire}} +\& +\& {{.Text}} +.Ve +.PP +The config parameter to modify is \f(CW\*(C`template\*(C'\fR. See example.conf in the +source repository. Please take care, since this is a multiline +string. This is how it shall look if you modify it: +.PP +.Vb 2 +\& template=""" +\& Title: {{.Title}} +\& +\& {{.Text}} +\& """ +.Ve +.PP +That is, the content between the two \f(CW"""\fR chars is the template. .SH "SETUP" .IX Header "SETUP" To setup the tool, you need to lookup your userid on diff --git a/kleingebaeck.go b/kleingebaeck.go index 247d4c8..65a9f0e 100644 --- a/kleingebaeck.go +++ b/kleingebaeck.go @@ -55,6 +55,7 @@ CONFIGURATION multiline string surrounded by three double quotes. You can left out certain fields and use any formatting you like. Refer to for details how to write a template. + Also read the TEMPLATES section below. If you're on windows and want to customize the output directory, put it into single quotes to avoid the backslashes interpreted as escape chars @@ -62,6 +63,71 @@ CONFIGURATION outdir = 'C:\Data\Ads' +TEMPLATES + Various parts of the configuration can be modified using templates: the + output directory, the ad directory and the ad listing itself. + + OUTPUT DIR TEMPLATE + The config varialbe "outdir" or the command line parameter "-o" take a + template which may contain: + + "{{.Year}}" + "{{.Month}}" + "{{.Day}}" + + That way you can create a new output directory for every backup run. For + example: + + outdir = "/home/backups/ads-{{.Year}}-{{.Month}}-{{.Day}}" + + Or using the command line flag: + + -o "/home/backups/ads-{{.Year}}-{{.Month}}-{{.Day}}" + + The default value is "." - the current directory. + + AD DIRECTORY TEMPLATE + The ad directory name can be modified using the following ad values: + + {{.Price}} + {{.ID}} + {{.Category}} + {{.Condition}} + {{.Created}} + {{.Slug}} + {{.Text}} + + It can only be configured in the config file. By default only + "{{.Slug}}" is being used, this is the title of the ad in url format. + + AD TEMPLATE + The ad listing itself can be modified as well, using the same variables + as the ad name template above. + + This is the default template: + + Title: {{.Title}} + Price: {{.Price}} + Id: {{.ID}} + Category: {{.Category}} + Condition: {{.Condition}} + Created: {{.Created}} + Expire: {{.Expire}} + + {{.Text}} + + The config parameter to modify is "template". See example.conf in the + source repository. Please take care, since this is a multiline string. + This is how it shall look if you modify it: + + template=""" + Title: {{.Title}} + + {{.Text}} + """ + + That is, the content between the two """ chars is the template. + SETUP To setup the tool, you need to lookup your userid on kleinanzeigen.de. Go to your ad overview page while NOT being logged in: diff --git a/kleingebaeck.pod b/kleingebaeck.pod index 50dfd7e..bff9e4d 100644 --- a/kleingebaeck.pod +++ b/kleingebaeck.pod @@ -55,7 +55,7 @@ Be careful if you want to change the template. The variable is a multiline string surrounded by three double quotes. You can left out certain fields and use any formatting you like. Refer to L for details how to write a -template. +template. Also read the TEMPLATES section below. If you're on windows and want to customize the output directory, put it into single quotes to avoid the backslashes interpreted as escape @@ -63,6 +63,91 @@ chars like this: outdir = 'C:\Data\Ads' +=head1 TEMPLATES + +Various parts of the configuration can be modified using templates: +the output directory, the ad directory and the ad listing itself. + +=head2 OUTPUT DIR TEMPLATE + +The config varialbe C or the command line parameter C<-o> take a +template which may contain: + +=over + +=item C<{{.Year}}> + +=item C<{{.Month}}> + +=item C<{{.Day}}> + +=back + +That way you can create a new output directory for every backup +run. For example: + + outdir = "/home/backups/ads-{{.Year}}-{{.Month}}-{{.Day}}" + +Or using the command line flag: + + -o "/home/backups/ads-{{.Year}}-{{.Month}}-{{.Day}}" + +The default value is C<.> - the current directory. + +=head2 AD DIRECTORY TEMPLATE + +The ad directory name can be modified using the following ad values: + +=over + +=item {{.Price}} + +=item {{.ID}} + +=item {{.Category}} + +=item {{.Condition}} + +=item {{.Created}} + +=item {{.Slug}} + +=item {{.Text}} + +=back + +It can only be configured in the config file. By default only +C<{{.Slug}}> is being used, this is the title of the ad in url format. + +=head2 AD TEMPLATE + +The ad listing itself can be modified as well, using the same +variables as the ad name template above. + +This is the default template: + + Title: {{.Title}} + Price: {{.Price}} + Id: {{.ID}} + Category: {{.Category}} + Condition: {{.Condition}} + Created: {{.Created}} + Expire: {{.Expire}} + + {{.Text}} + +The config parameter to modify is C