markitdown

Für alle, die es verpasst haben: Die Hölle hat offiziell Minusgrade erreicht – Microsoft hat tatsächlich ein Tool unter einer freien Lizenz veröffentlicht! Und nicht nur das, es ermöglicht den Export von Inhalten aus ihrem proprietären Format in die offene Syntax Markdown. Die in Python geschriebene Software heißt »markitdown« und ist im GitHub-Account von Microsoft zu finden. Das ist schon ein historischer Moment, wenn man bedenkt, wie sehr Microsoft in den letzten Jahrzehnten auf Open Source gepfiffen hat und alles daransetzte, Nutzer in ihrem goldenen Käfig (a.k.a. Login-Effekt) einzusperren. Na ja, vielleicht haben sie ja doch ein paar gute Vorsätze fürs nächste Jahr. ...

15. Dezember 2024 · 1 Minute · 103 Wörter

Rumps

rumps steht für »Ridiculously Uncomplicated macOS Python Statusbar Apps« und ist eine macOS Application die es ermöglicht Pythonscripte aus der Menübar auszuführen. Sie ist Open Source und wird von Jared Suttles entwickelte. Wer immer mal wieder Pythonscripte ausführt, sollte sich die Anwendung mal ansehen.

27. September 2023 · 1 Minute · 44 Wörter

Python in Excel

Oliver Nickel schreibt in »Microsoft bringt Python für Excel« für golem.de Die beliebte Programmiersprache wird über Microsoft 365 und Azure direkt in Excel nutzbar sein – ohne Zusatzsoftware. Das ist aus zwei Gründen beeindruckend. Zum einen weil Microsoft damit einen weiteren Schritt auf die Open Source Community zugeht und zum anderen weil Python die Möglichkeiten mit Daten in Excel umzugehen – aus meiner Sicht – vereinfacht und die Möglichkeiten vervielfacht. ...

23. August 2023 · 1 Minute · 70 Wörter

Apple Store Notifier

Apple hat vor einigen Tagen neue Produkte angekündigt. Wie immer sind die Artikel in den Stores nur bedingt vorrätig. Wer schlau ist, schaut online, ob das gewünschte Produkt im örtlichen Apple Store vorrätig ist. Wer faul ist, nutzt dazu das folgende Python Script, um das automatisiert zu machen. Achtung Pushover wird vorausgesetzt. #!/usr/bin/env python3 import requests import os import time def fetch_availability(product_number, store_id): payload = { "store": store_id, "little": False, "mt": "regular", "parts.0": product_number, "fts": True, } url = "https://www.apple.com/de/shop/fulfillment-messages" r = requests.get(url, params=payload) data = r.json() stores = data["body"]["content"]["pickupMessage"]["stores"] store = next(store for store in stores if store["storeNumber"] == store_id) avail = store["partsAvailability"][product_number] return { "store_name": store.get("storeName"), "available": avail.get("pickupDisplay") != "ineligible", "store_pickup_quote": avail.get("storePickupQuote"), "pickup_search_quote": avail.get("pickupSearchQuote"), "pickup_display": avail.get("pickupDisplay"), } def assemble_availability_text(product_number, store_ids): avail_text = "" for store_id in store_ids: avail = fetch_availability(product_number, store_id) avail_text += f'{avail["store_name"]}: {avail["store_pickup_quote"]}\n' return avail_text def create_file_if_not_exists(filepath): if not os.path.exists(filepath): with open(filepath, "w") as f: f.write("") def do_it(part_no, store_ids, **kwargs): availability_text = assemble_availability_text(part_no, store_ids) create_file_if_not_exists("/tmp/cache.txt") with open("/tmp/cache.txt", "r+", encoding="utf-8") as f: if f.read() == availability_text: print("No Changes", flush=True) else: print("Changes detected", availability_text, flush=True) if kwargs["pushover_enabled"] == "1": requests.post( "https://api.pushover.net/1/messages.json", data={ "token": kwargs["pushover_token"], "user": kwargs["pushover_user"], "message": availability_text, "title": "CHANGES DETECTED", }, headers={"Content-Type": "application/x-www-form-urlencoded"}, ) f.truncate(0) f.seek(0) f.write(availability_text) if __name__ == "__main__": while True: do_it( os.environ["MONITORED_PART_NO"], os.environ["MONITORED_STORES"].split(","), pushover_enabled=os.environ["PUSHOVER_ENABLED"], pushover_token=os.environ["PUSHOVER_TOKEN"], pushover_user=os.environ["PUSHOVER_USER"], ) time.sleep(int(os.environ["POLLING_DELAY_SECONDS"])) Das Script liegt im Repository dprandzioch/apple-store-notifier auf GitHub. ...

19. März 2022 · 2 Minuten · 228 Wörter

Dropbox auf Uberspace

Dieses Blog und weitere Dienste hoste ich bei Uberspace.de. Vor einigen Jahren konnte man den Dropbox-Client im eigenen Benutzerkonto installieren. Seitdem Uberspace auf CentOS 7 gewechselt ist, geht das leider nicht mehr. Vor einigen Wochen erfuhr ich von Maestral, einem Dropbox-Client eines Drittanbieters. Zuerst müssen wir die Software pip aktualisieren. Das geht ganz einfach mit folgendem Befehl: python3 -m pip install --upgrade pip --user Jetzt können wir Maestral installieren, das geht ähnlich einfach: ...

30. September 2021 · 2 Minuten · 362 Wörter