0

Download aller Attachments einer Tabelle bzw. der Ansicht einer Tabelle

Problem:

Ich möchte einen Download aller Attachments, die den Datensätzen einer Tabelle hinterlegt sind (zumeist sind das pdf-Files).

Bisheriger Lösungsversuch:

Mittels eines kleinen Python-Scripts kann ich auf die Tabelle zugreifen und bekomme die Datensätze angezeigt. Aber ich weiß nicht, wie ich auf die Attachments zugreifen kann.

Hier der Versuch meines Scripts:


import requests
import os

# === KONFIGURATION ===
API_KEY = "MeinApiKey"
TEAM_ID = "....."
DATABASE_ID = "....."
TABLE_ID = "G"
DOWNLOAD_ORDNER = "ninox_downloads"

# API-URL mit Variablen
url = f"https://api.ninox.com/v1/teams/....../databases/........./tables/G/records"
headers = {
    "Authorization": f"Bearer MeinApiKey"
}

# Erstelle den Download-Ordner, falls nicht vorhanden
os.makedirs(DOWNLOAD_ORDNER, exist_ok=True)

# API-Request senden
response = requests.get(url, headers=headers)
data = response.json()
print(data)  # Debug-Ausgabe der API-Daten

# Alle Attachments herunterladen
for record in data:
    if "Attachments" in record:
        for file_url in record["Attachments"]:
            file_name = file_url.split("/")[-1]
            file_path = os.path.join(DOWNLOAD_ORDNER, file_name)

# Datei herunterladen
            file_response = requests.get(file_url)
            with open(file_path, "wb") as file:
                file.write(file_response.content)
            print(f"Heruntergeladen: {file_name}")

print("Alle Dateien wurden erfolgreich heruntergeladen!")

1 Antwort

null
    • Josef_Koenig
    • gestern
    • Gemeldet - anzeigen

    WORKAROUND GEFUNDEN

    Ich glaube, dass man den direkten Download aller Files einer Tabelle nicht ansprechen kann. Ich habe aber einen Workaround gefunden:

    1. Download einer Datensicherung
    2. Ergebnis: MEINEDATENBANK.ninox
    3. Umbenennen dieser Datei in: MEINEDATENBANK.zip
    4. Entpacken der Datei, Ergebnis: MEINEDATENBANK
    5. Sieht man sich die Filestruktur in MEINEDATENBANK dann an, dann sieht man dort einen Ordner files. In dem befinden sich alle Attachments. Die Buchstaben der Unterordner von files geben die Tabelle in der NINOX-Datenbank an. Den Buchstaben der NINOX-Tabelle findet man heraus, indem man in ein Funktionsfeld tableId("MEINETABELLE") schreibt.
    6. Die einzelnen Attachments finden sich dann in nummerierten Unterordnern. Um nicht alle Unterordner einzeln öffnen zu müssen und die Files herauszukopieren, habe ich ein kleines vbs-Script geschrieben, das Attachments (in meinem Beispiel aus dem Ordner G) herauskopiert und in einen Ordner XYZ schreibt. 
    7. Hier das vbs-Script:
      Dim fso
      Dim HauptOrdner
      Dim UnterOrdner
      Dim Datei
      Dim ZielOrdner
      Dim ZielPfad
      
      ' Erstelle ein FileSystemObject
      Set fso = CreateObject("Scripting.FileSystemObject")
      
      ' Pfad zum Hauptordner
      Dim HauptPfad
      HauptPfad = "I:\NINOX_Datensicherung\MEINEDATENBANK\files\G"
      
      ' Pfad zum Zielordner
      ZielPfad = fso.BuildPath(HauptPfad, "..\XYZ")
      
      ' Erstelle den Zielordner, falls er nicht existiert
      If Not fso.FolderExists(ZielPfad) Then
          fso.CreateFolder ZielPfad
      End If
      
      ' Setze den Zielordner
      Set ZielOrdner = fso.GetFolder(ZielPfad)
      
      ' Durchsuche alle Unterordner im Hauptordner
      Set HauptOrdner = fso.GetFolder(HauptPfad)
      For Each UnterOrdner In HauptOrdner.SubFolders
          ' Durchsuche alle Dateien im Unterordner
          For Each Datei In UnterOrdner.Files
              ' Kopiere die Datei in den Zielordner
              fso.CopyFile Datei.Path, fso.BuildPath(ZielPfad, Datei.Name)
          Next
      Next
      
      ' Aufräumen
      Set fso = Nothing
      Set HauptOrdner = Nothing
      Set UnterOrdner = Nothing
      Set Datei = Nothing
      Set ZielOrdner = Nothing
      
      MsgBox "Dateien wurden erfolgreich in den Ordner XYZ kopiert."
      
    8. Gut wäre es - das fällt mir jetzt aber leider erst rückwirkend ein, wenn man alle Attachments sinnvoll benennt, z.B. YYYY_MM_DDDD__Rn_Firmenbezeichnung