Artikelabgleich & Bilddownload
Image Downloader & Article Synchronizer
Ein Konsolenprogramm in C#, das eine aktuelle mit einer früheren Artikelliste vergleicht, neue und entfernte Artikel erkennt, die Ergebnisse als CSV speichert und für jeden neuen Artikel das Produktbild herunterlädt.
Überblick
Das Programm gleicht zwei Artikellisten ab und lädt für neue Artikel automatisch die Produktbilder herunter. Es ist eine Konsolenanwendung in C# auf .NET.
Funktionen
- Einlesen der aktuellen und der früheren Artikelliste aus CSV-Dateien, ohne Kopfzeile und Leerzeilen
- Abgleich mit LINQ, unabhängig von Gross- und Kleinschreibung
- Erkennung neuer und entfernter Artikel
- Export der Ergebnisse in zwei CSV-Dateien
- Asynchroner Download der Bilder neuer Artikel mit HttpClient
- Ordner für die Bilder wird bei Bedarf angelegt
- Meldung pro Artikel, ob der Download geklappt hat
- Die aktuelle Liste wird am Ende zur Vergleichsbasis für den nächsten Lauf
Problem
Wenn sich ein Artikelsortiment ändert, müssen für neue Artikel Bilder beschafft und entfernte Artikel erkannt werden. Von Hand heisst das: Listen vergleichen, Nummern abschreiben, Bilder einzeln herunterladen. Das kostet Zeit und führt leicht zu Fehlern.
Lösung
Das Programm liest die aktuelle und die frühere Liste, berechnet daraus die neuen und die entfernten Artikel und speichert beide Ergebnisse als CSV. Für jeden neuen Artikel holt es das Bild von einem Bilddienst und legt es unter der Artikelnummer ab. Zum Schluss wird die aktuelle Liste zur Vergleichsbasis für den nächsten Lauf.
Technische Umsetzung
Die Listen werden mit File.ReadAllLines gelesen und mit LINQ bereinigt: Kopfzeile überspringen, Leerzeilen entfernen, Leerzeichen kürzen. Except mit StringComparer.OrdinalIgnoreCase liefert die Unterschiede in beide Richtungen. Die Downloads laufen mit HttpClient und async/await; der Statuscode jeder Antwort wird geprüft, bevor das Bild gespeichert wird.
Herausforderungen
Die Artikelnummern in der Liste beginnen mit einem «W», der Bilddienst erwartet sie aber ohne. Das Programm entfernt das Zeichen deshalb nur für die Anfrage und behält die ursprüngliche Nummer als Dateiname. Ausserdem darf eine leere aktuelle Liste die gespeicherte Vergleichsbasis nicht überschreiben; das wird vor dem Speichern geprüft.
Grenzen
Die Bilder werden nacheinander geladen, ohne erneuten Versuch bei einem Fehler, und immer als .jpg gespeichert. Dateinamen sind im Code festgelegt. Die Adresse und der Zugangsschlüssel des Bilddienstes stehen im Code; vor einer Veröffentlichung des Quellcodes gehören sie in eine Umgebungsvariable. Der Quellcode ist darum nicht öffentlich.
Erkenntnisse
Dieser Abschnitt wird noch ergänzt.
Screenshots
Ein Programm für die Kommandozeile, ohne grafische Oberfläche. Screenshots der Ausgabe sind noch nicht vorhanden.