diff --git a/job-api/ftp_uploader.py b/job-api/ftp_uploader.py
new file mode 100644
index 0000000..7cbdb0e
--- /dev/null
+++ b/job-api/ftp_uploader.py
@@ -0,0 +1,28 @@
+from ftplib import FTP_TLS
+import os
+
+class FTPUploader:
+ user:str = ""
+ password:str = ""
+ default_server_address:str = ""
+
+ def __init__(self, user = None, password = None, server = None) -> None:
+ self.user = user if user is not None else os.getenv("FTP_USER", "")
+ self.password = password if password is not None else os.getenv("FTP_PASSWORD", "")
+ self.server = server if server is None else os.getenv('FTP_SERVER', '')
+
+ def upload(self, file, target_filename = "jobs.csv", server = None)->bool:
+ if server is None:
+ server = self.default_server_address
+ target_filename = os.path.basename(file)
+ try:
+ session = FTP_TLS(server,self.user,self.password)
+ session.prot_p()
+ binary_file = open(file,'rb') # file to send
+ session.storbinary(f'STOR {target_filename}', binary_file) # send the file
+ binary_file.close() # close file and FTP
+ session.quit()
+ return True
+ except Exception as e:
+ print(e)
+ return False
\ No newline at end of file
diff --git a/job-api/jobs.csv b/job-api/jobs.csv
index 7498b13..c814320 100644
--- a/job-api/jobs.csv
+++ b/job-api/jobs.csv
@@ -1,4 +1,38 @@
jobDbId;externalPostingName;internalPostingName;applyOnlineLink;jobCategories;audiences;employmentTypes;workTimes;industries;workExperiences;geo_lat;geo_long;geo_name;geo_country;geo_state;geo_city;geo_zip;geo_street;jobAdText;internalJobAdText;jobStartDate;jobEndDate;postingLastUpdatedDate;job_owner_salutation;job_owner_title;job_owner_firstname;job_owner_lastname;job_owner_street;job_owner_city;job_owner_zip;job_owner_phone;job_owner_email;job_owner_avatarurl;job_owner_function;job_ad_url;company_name;company_id;project_number;internal_reference_id;locale;keywords;layoutId;layoutName;remote_status;Stellentyp;Arbeitszeit
+14636793;Senior Scrum Master/Agile Coach (w/m/d);Agile Coach (w/m/d);https://jobdb.softgarden.de/jobdb/public/jobposting/applyonline/click?jp=14636793&ADP;['sam42_it'];['3a3b1f6e7f000002010ad492e7837dd6'];['6'];['87af1987840d4442b87f2e0ee3344a1f'];['22'];['1b4f51fe628c4119a2d7a581557d0944'];49.4771169;10.988667;Fürth, Deutschland;Deutschland;Bayern;Fürth;;;"DAS IST DEINE ROLLE:
+
Den Job als Scrum Master/Agile Coach müssen wir dir nicht erklären, deine Rolle kennst du selbst am besten.
+
+DAS IST DEIN UMFELD:
+
+- Du begleitest genau ein Software-Entwicklungsteam auf seinem Weg, so dass du den Fokus auf das Team halten kannst und auch genug Zeit hast, innerhalb des Unternehmens Dein Umfeld mitzugestalten.
+- Gute Kommunikation mit dem Kunden ist einer unserer Schlüssel zum Erfolg, hier unterstützt du das Team und den Kunden gleichermaßen.
+- Sowohl bei uns als auch bei unseren Kunden sind agile Arbeitsweisen fest gesetzt und etabliert, Überzeugungsarbeit muss hier nicht geleistet werden.
+
+
+DAS SIND DEINE STÄRKEN:
+
+- Als erfahrener Scrum Master hast du bereits mehrere Teams in unterschiedlichen Unternehmenskontexten durch Höhen und Tiefen zu ihrem Erfolg begleitet.
+- Du lebst die Scrum Werte, das agile Mindset ist tief in dir verwurzelt und du kannst andere dafür begeistern.
+- Du bist sicher in der Anwendung von agilen Werkzeugen und Methoden und setzt diese zielsicher, lösungs- und ergebnisorientiert ein.
+- Deine Art zu kommunizieren ist klar, offen und wertschätzend.
+- Du teilst und repräsentierst agiles Know-How innerhalb und außerhalb des Unternehmens.
+- Deine positive Art und Professionalität begeistern nicht nur dein Team, sondern auch Kunden und Stakeholder.
+- Du bringst eine Scrum Master-Zertifizierung (Scrum Alliance, Scrum.org o. ä.) mit. Ein i-Tüpfelchen wäre ein anerkannter Abschluss als Coach/Supervisor.
+
+
+DAS KANNST DU ERWARTEN:
+
+- Mehr als du erwartest :-) !
+- Auf dich warten große Spielräume, um Deine tollen Ideen auch wirklich umzusetzen.
+- Klassische Machthierarchie? Nein danke!
+- Unkonventionelle Wege betrachten wir nicht als Problem, sondern als Bereicherung.
+- Du kannst dich auf die gegenseitige Unterstützung, Abstimmung und Weiterentwicklung in der Community der derzeit bereits 8 Team-Coaches freuen.
+- Wir verkörpern eine lebendige Lernkultur, in der wir Fehler als das betrachten, was sie sind: Schritte auf dem Weg zur Verbesserung!
+- Die verkehrsgünstige Lage direkt am Fürther Hauptbahnhof lässt Dir alle Optionen für den bequemen Weg zur Arbeit offen.
+- Deine rund 90 neuen Kolleginnen und Kollegen arbeiten nicht nur in unterschiedlichsten Disziplinen, sondern sind auch sonst ein ziemlich „bunter Haufen“.
+
+
+";;1719224267656;0;1719224267656;;;Natalia;Streck;;;;;Natalia.streck@brandad-systems.de;https://app.softgarden.io/assets/public/media/get/05ed1f57-ba8a-452d-932e-2a0af8f7c327/1639486366579/1604964991702.jpg;People Enthusiast & Talent Ambassador;https://short.sg/j/14636793;BRANDAD Group AG;bf4c49f6-8454-48f8-8311-8f8bf9d01ecd;922284;/images/softgarden/Agil_Coach_1224_816px.jpg;de;Scrum, Agile Coaching, New Work, Agilität, Softwareunternehmen, Kommunikation, Beratung, Führung, Coach, BRANDAD Development;8971251ad5df45fa9be0ae113a9d532a;Job Ad Layout;REMOTE_FLEXIBLE;Festanstellung;Vollzeitstelle
45230017;Projektmanager im MarTech-Umfeld (w/m/d);Projektmanager im MarTech-Umfeld (w/m/d);https://jobdb.softgarden.de/jobdb/public/jobposting/applyonline/click?jp=45230017&ADP;['sam42_it'];['3a3b1f6e7f000002010ad492e7837dd6'];['6'];['137caf67764c4b63b0272895af1704b0'];['22'];['1b4f51fe628c4119a2d7a581557d0944'];49.4771169;10.988667;Fürth, Deutschland;Deutschland;Bayern;Fürth;;;"
Mit unserer Marketing-Plattform Brand Base helfen wir großen Marken und ihren Partnern am Point of Sale (POS) dabei, erfolgreiches lokales Marketing zu machen – maximal effektiv, automatisiert und über alle Kanäle hinweg.
Viele großartige Menschen sind bereits an Bord der BRANDAD Solutions, um diese Mission gemeinsam zu bestreiten. Nun suchen wir weitere Unterstützung im Projektmanagement für unsere Plattform im MarTech- und KI-Umfeld.
@@ -136,40 +170,6 @@ WIR SIND BRANDAD:
";;1712043455687;0;1712043455687;;;Natalia;Streck;;;;;Natalia.streck@brandad-systems.de;https://app.softgarden.io/assets/public/media/get/05ed1f57-ba8a-452d-932e-2a0af8f7c327/1639486366579/1604964991702.jpg;People Enthusiast & Talent Ambassador;https://short.sg/j/14637498;BRANDAD Group AG;bf4c49f6-8454-48f8-8311-8f8bf9d01ecd;922802;/images/softgarden/Patrick_Microservice.jpg;de;IT, Software, Softwareentwicklung, Entwicklung, Anwendungsentwicklung, Frontend, Web-Technologie, Angular, Typescript, Informatiker, Fachinformatiker, Programmieren, Programmierer, Coden, Backend, Clean Code, BRANDAD Development;8971251ad5df45fa9be0ae113a9d532a;Job Ad Layout;REMOTE_FLEXIBLE;Festanstellung;Vollzeitstelle
-14636793;Senior Scrum Master/Agile Coach (w/m/d);Agile Coach (w/m/d);https://jobdb.softgarden.de/jobdb/public/jobposting/applyonline/click?jp=14636793&ADP;['sam42_it'];['3a3b1f6e7f000002010ad492e7837dd6'];['6'];['87af1987840d4442b87f2e0ee3344a1f'];['22'];['1b4f51fe628c4119a2d7a581557d0944'];49.4771169;10.988667;Fürth, Deutschland;Deutschland;Bayern;Fürth;;;"DAS IST DEINE ROLLE:
-Den Job als Scrum Master/Agile Coach müssen wir dir nicht erklären, deine Rolle kennst du selbst am besten.
-
-DAS IST DEIN UMFELD:
-
-- Du begleitest genau ein Software-Entwicklungsteam auf seinem Weg, so dass du den Fokus auf das Team halten kannst und auch genug Zeit hast, innerhalb des Unternehmens Dein Umfeld mitzugestalten.
-- Gute Kommunikation mit dem Kunden ist einer unserer Schlüssel zum Erfolg, hier unterstützt du das Team und den Kunden gleichermaßen.
-- Sowohl bei uns als auch bei unseren Kunden sind agile Arbeitsweisen fest gesetzt und etabliert, Überzeugungsarbeit muss hier nicht geleistet werden.
-
-
-DAS SIND DEINE STÄRKEN:
-
-- Als erfahrener Scrum Master hast du bereits mehrere Teams in unterschiedlichen Unternehmenskontexten durch Höhen und Tiefen zu ihrem Erfolg begleitet.
-- Du lebst die Scrum Werte, das agile Mindset ist tief in dir verwurzelt und du kannst andere dafür begeistern.
-- Du bist sicher in der Anwendung von agilen Werkzeugen und Methoden und setzt diese zielsicher, lösungs- und ergebnisorientiert ein.
-- Deine Art zu kommunizieren ist klar, offen und wertschätzend.
-- Du teilst und repräsentierst agiles Know-How innerhalb und außerhalb des Unternehmens.
-- Deine positive Art und Professionalität begeistern nicht nur dein Team, sondern auch Kunden und Stakeholder.
-- Du bringst eine Scrum Master-Zertifizierung (Scrum Alliance, Scrum.org o. ä.) mit. Ein i-Tüpfelchen wäre ein anerkannter Abschluss als Coach/Supervisor.
-
-
-DAS KANNST DU ERWARTEN:
-
-- Mehr als du erwartest :-) !
-- Auf dich warten große Spielräume, um Deine tollen Ideen auch wirklich umzusetzen.
-- Klassische Machthierarchie? Nein danke!
-- Unkonventionelle Wege betrachten wir nicht als Problem, sondern als Bereicherung.
-- Du kannst dich auf die gegenseitige Unterstützung, Abstimmung und Weiterentwicklung in der Community der derzeit bereits 8 Team-Coaches freuen.
-- Wir verkörpern eine lebendige Lernkultur, in der wir Fehler als das betrachten, was sie sind: Schritte auf dem Weg zur Verbesserung!
-- Die verkehrsgünstige Lage direkt am Fürther Hauptbahnhof lässt Dir alle Optionen für den bequemen Weg zur Arbeit offen.
-- Deine rund 90 neuen Kolleginnen und Kollegen arbeiten nicht nur in unterschiedlichsten Disziplinen, sondern sind auch sonst ein ziemlich „bunter Haufen“.
-
-
-";;1709288515460;0;1709288515460;;;Natalia;Streck;;;;;Natalia.streck@brandad-systems.de;https://app.softgarden.io/assets/public/media/get/05ed1f57-ba8a-452d-932e-2a0af8f7c327/1639486366579/1604964991702.jpg;People Enthusiast & Talent Ambassador;https://short.sg/j/14636793;BRANDAD Group AG;bf4c49f6-8454-48f8-8311-8f8bf9d01ecd;922284;/images/softgarden/Agil_Coach_1224_816px.jpg;de;Scrum, Agile Coaching, New Work, Agilität, Softwareunternehmen, Kommunikation, Beratung, Führung, Coach, BRANDAD Development;8971251ad5df45fa9be0ae113a9d532a;Job Ad Layout;REMOTE_FLEXIBLE;Festanstellung;Vollzeitstelle
14637288;UX/UI Designer (w/m/d);User Experience Engineer (w/m/d);https://jobdb.softgarden.de/jobdb/public/jobposting/applyonline/click?jp=14637288&ADP;['sam42_it'];['3a3b1f6e7f000002010ad492e7837dd6'];['6'];['137caf67764c4b63b0272895af1704b0'];['22'];['1b4f51fe628c4119a2d7a581557d0944'];49.4771169;10.988667;Fürth, Deutschland;Deutschland;Bayern;Fürth;;;"AUF DIESE AUFGABENFELDER KANNST DU DICH FREUEN:
- In einem crossfunktionalen Entwicklerteam verantwortest du alle Facetten der User Experience.
diff --git a/job-api/main.py b/job-api/main.py
index 172725b..6015f36 100644
--- a/job-api/main.py
+++ b/job-api/main.py
@@ -1,15 +1,19 @@
import job_fetcher
import markdown_converter
+import ftp_uploader
from pathlib import Path
-# Example usage:
-# converter = JobMarkdownConverter('path_to_job_listings.csv')
-# converter.process_jobs()
-
p = Path(__file__).parent.resolve()
jf = job_fetcher.JobFetcher(p / "jobs.csv")
converter = markdown_converter.JobMarkdownConverter(p / "jobs.csv")
+ftp = ftp_uploader.FTPUploader()
+
jf.fetch_jobs()
jobs = converter.read_csv()
converter.save_to_markdown_file(converter.convert_to_markdown(jobs), p / ".." / "jobs" / "jobs.md")
-converter.merge_markdown_files(p / ".." / "jobs" / "jobs.md", p / ".." / "profile" / "README.md")
\ No newline at end of file
+converter.merge_markdown_files(p / ".." / "jobs" / "jobs.md", p / ".." / "profile" / "README.md")
+
+if ftp.upload(p / "jobs.csv"):
+ print("Upload successful")
+else:
+ print("Upload failed")