From 99a70a5568fe24ee0c1666afa86b6b62ca216989 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Tue, 23 Jan 2024 14:04:20 +0100 Subject: [PATCH] Added german README, update docker docs, add latest image tag --- .github/assets/english.png | Bin 0 -> 2571 bytes .github/assets/english.xcf | Bin 0 -> 4352 bytes .github/assets/german.png | Bin 0 -> 1952 bytes .github/assets/german.xcf | Bin 0 -> 3682 bytes .github/workflows/pushimage.yaml | 6 + README-de.md | 302 +++++++++++++++++++++++++++++++ README.md | 46 +++-- 7 files changed, 336 insertions(+), 18 deletions(-) create mode 100644 .github/assets/english.png create mode 100644 .github/assets/english.xcf create mode 100644 .github/assets/german.png create mode 100644 .github/assets/german.xcf create mode 100644 README-de.md diff --git a/.github/assets/english.png b/.github/assets/english.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e403f8a171af87c3bc260df49e9d202a63fb9a GIT binary patch literal 2571 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 X_BCozoB(t*7>7S$ehQBMXU6^m@~=(h literal 0 HcmV?d00001 diff --git a/.github/assets/german.png b/.github/assets/german.png new file mode 100644 index 0000000000000000000000000000000000000000..f760ab385a947ffb130366772ef5cdb3cef16dff GIT binary patch literal 1952 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 Qwl|@}Pn9A7`d5Pe4rLZ=8~^|S literal 0 HcmV?d00001 diff --git a/.github/workflows/pushimage.yaml b/.github/workflows/pushimage.yaml index 4067ee7..f3160e6 100644 --- a/.github/workflows/pushimage.yaml +++ b/.github/workflows/pushimage.yaml @@ -26,3 +26,9 @@ jobs: with: push: true tags: ghcr.io/tlinden/kleingebaeck:${{ github.ref_name}} + + - name: Build and push latest Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + push: true + tags: ghcr.io/tlinden/kleingebaeck:latest diff --git a/README-de.md b/README-de.md new file mode 100644 index 0000000..5f8ecb6 --- /dev/null +++ b/README-de.md @@ -0,0 +1,302 @@ +## Kleingebäck - kleinanzeigen.de Backup + +![Kleingebaeck Logo](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/kleingebaecklogo-small.png) + +[![Go Report Card](https://goreportcard.com/badge/github.com/tlinden/kleingebaeck)](https://goreportcard.com/report/github.com/tlinden/kleingebaeck) +[![Actions](https://github.com/tlinden/kleingebaeck/actions/workflows/ci.yaml/badge.svg)](https://github.com/tlinden/kleingebaeck/actions) +[![Go Coverage](https://github.com/tlinden/kleingebaeck/wiki/coverage.svg)](https://raw.githack.com/wiki/tlinden/kleingebaeck/coverage.html) +![GitHub License](https://img.shields.io/github/license/tlinden/kleingebaeck) +[![GitHub release](https://img.shields.io/github/v/release/tlinden/kleingebaeck?color=%2300a719)](https://github.com/TLINDEN/kleingebaeck/releases/latest) +[![English](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/english.png)](https://github.com/tlinden/kleingebaeck/blob/main/README.md) +Mit diesem Tool kann man seine Anzeigen bei https://kleinanzeigen.de sichern. + +Es kann alle Anzeigen eines Users (oder nur eine Ausgewählte) +inklusive der Bilder herunterladen, die in einem Verzeichnis pro +Anzeige gespeichert werden. In dem Verzeichnis wird eine Datei +`Adlisting.txt` erstellt, in der sich die Inhalte der Anzeige wie +Titel, Preis, Text etc befinden. Bilder werden natürlich auch heruntergeladen. + +## Screenshots + +Das ist die Hauptseite meines kleinanzeigen.de Accounts: + +![Index](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/kleinanzeigen-index.png) + +Sichern ich meine Anzeigen: + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/kleinanzeigen-download.png) + +Backupverzeichnis nach dem Download: + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/kleinanzeigen-backup.png) + +Verzeichnis einer Anzeige: + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/kleinanzeigen-ad.png) + +**Das gleiche unter Windows:** + +Anzeigen Sichern: + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/cmd-windows.jpg) + +Backupverzeichnis nach dem Download + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/liste-windows.jpg) + +Und eine Anzeige: + +![Download](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/adlisting-windows.jpg) + +## Installation + +Das Tool hat keine weiteren Abhängigkeiten und erfordert auch keine +Anmeldung oder ähnliches. Man kädt sich einfach die ausführbare Datei +für seine Plattform herunter und kann direkt loslegen. + +### Installation des vorcompilierten Programms + +Auf der Seite [des letzten Releases](https://github.com/TLINDEN/kleingebaeck/releases/latest) findet man das Program für sein Betriebssystem und die Plattform (z.b. Windows + Intel) + +Es gibt 2 Varianten: + +1. Direkt das fertige Program für seine Plattform+OS herunterladen, + z.B. `kleingebaeck-linux-amd64-0.0.5`, nach `kleingebaeck` + umbenennen und in ein Verzeichnis kopieren, das im `PATH` ist, + (z.B. nach `$HOME/bin` oder als root nach `/usr/local/bin`). + +Um sicher zu gehen, dass an dem Program nicht verändert wurde, kann +man die Signatur vergleichen. Für jeden Download gibt es eine dazu +passende Signatur, in unserem Beispiel wäre das +`kleingebaeck-linux-amd64-0.0.5.sha256`. + +Zum Verifizieren ausführen: + +```shell +cat kleingebaeck-linux-amd64-0.0.5.sha25 && sha256sum kleingebaeck-linux-amd64-0.0.5 +``` +Man sollte zweimal den gleichen SHA256 Hash sehen. + +2. Man kann auch einen Tarball (tgz Dateiendung) herunterladen, + auspacken und mit GNU Make installieren: + +```shell +tar xvfz kleingebaeck-linux-amd64-0.0.5.tar.gz +cd kleingebaeck-linux-amd64-0.0.5 +sudo make install +``` + +### Installation aus dem Sourcecode + +Man muss eine funktionierende Go Buildumgebung in der Version 1.21 +installiert haben, um das Programm selber zu compilieren. GNU Make ist +hilfreich, aber nicht unbedingt erforderlich. + +Um das Programm zu compilieren, muss man folgende Schritte ausführen: + +```shell +git clone https://github.com/TLINDEN/kleingebaeck.git +cd kleingebaeck +go mod tidy +make # (oder make) +sudo make install +``` + +### Docker image benutzen + +Ein fertiges Dockerimage mit der aktuellen Programmversion ist immer +verfügbar. Man kann damit z.B. das Tool testen, bevor man es dauerhaft +benutzen möchte. + +Um das Image herunterzuladen: +``` +docker pull ghcr.io/tlinden/kleingebaeck:latest +``` + +Um kleingebäck im Image auszuführen und Daten ins lokale Filesystem zu +sichern, kann man so vorgehen: + +```shell +mkdir anzeigen +docker run -u `id -u $USER` -v ./anzeigen:/backup ghcr.io/tlinden/kleingebaeck:latest -u XXX -v +ls -l anzeigen/ein-buch-mit-leeren-seiten +total 792 +drwxr-xr-x 2 scip root 4096 Jan 23 12:58 ./ +drwxr-xr-x 3 scip scip 4096 Jan 23 12:58 ../ +-rw-r--r-- 1 scip root 131650 Jan 23 12:58 1.jpg +-rw-r--r-- 1 scip root 81832 Jan 23 12:58 2.jpg +-rw-r--r-- 1 scip root 134050 Jan 23 12:58 3.jpg +-rw-r--r-- 1 scip root 1166 Jan 23 12:58 Adlisting.txt +``` + +Hier wird der aktuelle User auf den User im Image gemappt und das +lokale Verzeichnis `anzeigen` nach `/backup` innerhalb des Images +gemountet. + +Die Optionen `-u XXX -v` sind kleingebäck Optionen. Ersetze `XXX` +durch Deine tatsächliche kleinanzeigen.de Userid. + +Eine Liste verfügbarer Images findet man [hier](https://github.com/tlinden/kleingebaeck/pkgs/container/kleingebaeck/versions?filters%5Bversion_type%5D=tagged) + +## Kommandozeilen Optionen: + +``` +Usage: kleingebaeck [-dvVhmoc] [,...] +Options: +-u --user Backup ads from user with uid . +-d --debug Enable debug output. +-v --verbose Enable verbose output. +-o --outdir Set output dir (default: current directory) +-l --limit Limit the ads to download to , default: load all. +-c --config Use config file (default: ~/.kleingebaeck). + --ignoreerrors Ignore HTTP errors, may lead to incomplete ad backup. +-m --manual Show manual. +-h --help Show usage. +-V --version Show program version. + +If one or more 's are specified, only backup those, +otherwise backup all ads of the given user. +``` + +## Konfiguration + +Man kann anstelle von Kommandlineoptionen auch eine +Konfigurationsdatei verwenden. Sie befindet sich standardmäßig in +`~/.kleingebaeck` aber man kann mit dem Parameter `-c` auch eine +andere Datei angeben. + +Das Format (TOML) ist einfach: + +``` +user = 1010101 +loglevel = verbose +outdir = "test" +``` + +Im Source gibt es eine Beispieldatei `example.conf` mit Kommentaren. + +## Umgebungsvariablen + +Man kann darüber hinaus auch Umgebungsvariablen verwenden. Sie +entsprechen den Konfigurationsoptionen, aber gross geschrieben mit dem +Präfix `KLEINGEBAECK_`, z.B. + +```shell +% KLEINGEBAECK_OUTDIR=/backup kleingebaeck -v +``` + +## Benutzung + +Um das Tool einsetzen zu können, muss man zunächst seine Userid bei +kleinanzeigen.de herausfinden. Dazu ruft man am besten die Liste +seiner Anzeigen auf, während man NICHT eingeloggt ist: + +https://www.kleinanzeigen.de/s-bestandsliste.html?userId=XXXXXX + +Der `XXXXX` Teil der URL ist die Userid. + +Trage diese Userid in der Konfigurationsdatei ein wie oben +beschrieben. Gib ausserdem das Ausgabeverzeichnis an. Dann einfach nur +`kleingebaeck` ausführen. + +Innerhalb des Ausgabeverzeichnisses wird sich dann pro Anzeige ein +Unterverzeichnis befinden. Pro Anzeige gibt es eine Datei +`Adlisting.txt`, die etwa so aussieht: + +```default +Title: A book I sell +Price: 99 € VB +Id: 1919191919 +Category: Sachbücher +Condition: Sehr Gut +Created: 10.12.2023 + +This is the description text. + +Pay with paypal. +``` + +Sowie alle Bilder. + +Das Format kann man mit der Variable `template` in der Konfiguration +ändern. Die `example.conf` enthält ein Beispiel für das Standard Template. + +## Documentation + +Die Dokumentation kann man +[online](https://github.com/TLINDEN/kleingebaeck/blob/main/kleingebaeck.pod) +oder lokal lesen mit: `kleingebaeck --manual`. Hat man das Tool mit +dem Tarball installiert, funktioniert auch `man kleingebaeck`. + +## Kleingebäck? + +Der Name kommt von "kleinanzeigen backup", verkürzt "klein back", das +englisch ausgesprochene "back" (deutsch bäck) führt dann zu "Kleingebäck". + +## Wo bekommt man Hilfe + +Obwohl ich gerne von kleingebäck Benutzern in privaten Mails höre, ist +das doch der beste Weg, die Anfrage zu übersehen und zu vergessen. + +Um einen Fehler, ein unerwartetes Verhalten, eine Feature Request oder +einen Patch zu übermitteln, eröffne daher bitte einen Issue unter: +https://github.com/TLINDEN/kleingebaeck/issues. Danke! + +Bitte gebe den fehlgeschlagenen Befehl an, rufe es auch mit Debugging +`-d` auf. + +## Ähnliche Projekte + +Ich konnte kein Projekt finden, das speziell dafür geeignet ist, +Anzeigen bei kleinanzeigen.de zu sichern. + +Aber es gibt ein Projekt, mit dem man ebenfalls Backups erstellen +kann: [kleinanzeigen-bot](https://github.com/Second-Hand-Friends/kleinanzeigen-bot/). +Aber Vorsicht: kleinanzeigen.de bekämpft Bots aktiv, mit diesem hier +gibt es regelmäßige Probleme, z.B.: +[issue](https://github.com/Second-Hand-Friends/kleinanzeigen-bot/issues/219). +Das Hauptproblem ist, dass diese Art von Bot sich mit Deinem Account +aktiv einloggt und mit der Seite interagiert. Damit kann die Firma die +Aktivitäten recht einfach Deinem User zuordnen und diesen **sperren**! +Also sei bitte vorsichtig! + +**Kleingebäck** erfordert keinen Login, es verwendet lediglich die +öffentlich verfügbare Webseite und ruft diese auf, wie ein normaler +Browser. Tatsächlich gibt es meiner Meinung nach keinen Unterschied zu +einem Browserclient: beide laufen auf Anwenderseite auf Initiative +eines Benutzers. Und mit welchen Browser ich eine Webseite aufrufe, +bleibt immer noch mir überlassen und muss mir nicht von irgendwem +vorgeschrieben werden. Das schliesst die Verwendung von Kleingebäck +mit ein. + +Hinzu kommt, dass dieses Tool nicht dazu gedacht ist, rund um die Uhr +zu laufen. Man ruft es ab und zu mal auf, wenn man halt neue Anzeigen +eingestellt hat, vielleicht einmal die Woche oder so. Man weiss ja +selber, wann man was geändert hat. Man benötigt trotzdem den Zugriff +mit dem Browser oder der mobilen App um Kleinanzeigen.de verwalten zu +können. + +Meiner Ansicht nach ist das Risiko also sehr minimal, es handelt sich +meiner Meinung nach auch nicht um eine Verletzung der AGBs dort. Aber +das ist nur meine persönliche Meinung, bitte beachtet das. Am Ende +müsst Ihr selbst einschätzen und beurteilen wie hoch Ihr das Risiko +seht und ob Ohr es eingehen möchtet. Für eventuell auftretende +Konsequenzen bin ich nicht verantwortlich. Siehe auch [GPL Lizenz](LICENSE). + +Es gibt noch ein weiteres Tool namens +[kleinanzeigen-enhanded](https://kleinanzeigen-enhanced.de/). Das ist +eine kostenpflichtige vollständige Anzeigenverwaltung für +Profinutzer. Man muss eine monatliche Abogebühr bezahlen. Das Tool +ist als Browsererweiterung für Google Chrome implementiert, was +erklärt, warum sie Anzeigen erstellen, ändern und löschen können, +obwohl es gar keine öffentliche API gibt. Sieht nach einer netten +ausgereiften Lösung aus. Mit Backups. + +## Copyright und License + +Lizensiert unter der GNU GENERAL PUBLIC LICENSE Version 3. + +## Autor + +T.v.Dein + diff --git a/README.md b/README.md index d8a12b6..3cbbd9e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ [![Go Coverage](https://github.com/tlinden/kleingebaeck/wiki/coverage.svg)](https://raw.githack.com/wiki/tlinden/kleingebaeck/coverage.html) ![GitHub License](https://img.shields.io/github/license/tlinden/kleingebaeck) [![GitHub release](https://img.shields.io/github/v/release/tlinden/kleingebaeck?color=%2300a719)](https://github.com/TLINDEN/kleingebaeck/releases/latest) +[![German](https://github.com/TLINDEN/kleingebaeck/blob/main/.github/assets/german.png)](https://github.com/tlinden/kleingebaeck/blob/main/README-de.md) +[Die deutsche Version des READMEs findet Ihr hier](README-de.md). This tool can be used to backup ads on the german ad page https://kleinanzeigen.de @@ -60,7 +62,7 @@ Go to the [latest release page](https://github.com/TLINDEN/kleingebaeck/releases/latest) and look for your OS and platform. There are two options to install the binary: -1. Directly download the binary for your platoform, +1. Directly download the binary for your platform, e.g. `kleingebaeck-linux-amd64-0.0.5`, rename it to `kleingebaeck` (or whatever you like more!) and put it into your bin dir (e.g. `$HOME/bin` or as root to `/usr/local/bin`). @@ -97,29 +99,37 @@ To install after building either copy the binary or execute `sudo make install`. ### Using the docker image A pre-built docker image is available, which you can use to test the -app without installing it. You need `docker-compose`. Copy the file -`docker-compose.yaml` to somewhere, cd to that directory and execute: +app without installing it. To download: ```shell -mkdir kleinanzeigen-backup -USER_ID=$(id -u) GROUP_ID=$(id -g) OUTDIR=./kleinanzeigen-backup docker-compose run kleingebaeck -u XXX -v +docker pull ghcr.io/tlinden/kleingebaeck:latest ``` -`USER_ID` and `GROUP_ID` needs to be specified so that you are the -owner of the created backups. The backup directory `OUTDIR` must exist -prior to the execution, otherwise docker will create it as root, then -kleingebaeck will fail. You may also use a `.env` file in the same -directory containing the variables, such as: +To execute kleingebaeck inside the image and download ads to a local +directory, do something like this: -``` -USER_ID=1000 -GROUP_ID=1000 -OUTDIR=./kleinanzeigen-backup +```shell +mkdir myads +docker run -u `id -u $USER` -v ./myads:/backup ghcr.io/tlinden/kleingebaeck:latest -u XXX -v +ls -l myads/ein-buch-mit-leeren-seiten +total 792 +drwxr-xr-x 2 scip root 4096 Jan 23 12:58 ./ +drwxr-xr-x 3 scip scip 4096 Jan 23 12:58 ../ +-rw-r--r-- 1 scip root 131650 Jan 23 12:58 1.jpg +-rw-r--r-- 1 scip root 81832 Jan 23 12:58 2.jpg +-rw-r--r-- 1 scip root 134050 Jan 23 12:58 3.jpg +-rw-r--r-- 1 scip root 1166 Jan 23 12:58 Adlisting.txt ``` -You may of course also modify the `docker-compose.yaml` to suit your needs. +We map the local user to the one inside the image so the permission +will match. You'll need to create the directory first before executing +docker run. And the local directory `myads` will be mapped to +`/backup` inside the container. -If you want to build the image yourself, use the supplied Dockerfile. +The options `-u XXX -v` are kleingebaeck options, replace `XXX` with +your actual kleinanzeigen.de user id. + +A list of available images is [here](https://github.com/tlinden/kleingebaeck/pkgs/container/kleingebaeck/versions?filters%5Bversion_type%5D=tagged) ## Commandline options: @@ -246,9 +256,9 @@ daily basis. You cannot use it to view regular ads or maintain your own ads. You'll need to use the mobile app or the browser page with a login. So, in my point of view, the risk is very minimal. -There is another Tool available named [kleinanzeigen-enhanded](https://kleinanzeigen-enhanced.de/). It is a complete Ad management system targeting primarily commercial users. You have to pay a monthly fee, perhaps there's also a free version available, but I haven't checked. The tool is implemented as a Chrome browser extension, which explains why it was possible to implement it without an API. It seems to be a nice solution for power users by the looks of it. And it includes backups. +There is another Tool available named [kleinanzeigen-enhanced](https://kleinanzeigen-enhanced.de/). It is a complete Ad management system targeting primarily commercial users. You have to pay a monthly fee, perhaps there's also a free version available, but I haven't checked. The tool is implemented as a Chrome browser extension, which explains why it was possible to implement it without an API. It seems to be a nice solution for power users by the looks of it. And it includes backups. -## Copyright und License +## Copyright and License Licensed under the GNU GENERAL PUBLIC LICENSE version 3.