Martin Tranberg 33fbdc244d Tilføj 30 MB grænse for hash-validering
- Spring hash-tjek over for filer over 30 MB for at spare tid ved store filer (f.eks. 65 GB)
- Filer over grænsen sammenlignes kun på størrelse
- Tilføjer logning når hash-tjek springes over
2026-03-29 17:40:55 +02:00

SharePoint Folder Download Tool

Dette script gør det muligt at downloade specifikke mapper fra et SharePoint dokumentbibliotek til din lokale computer ved hjælp af Microsoft Graph API. Scriptet er designet til professionelt brug med fokus på hastighed, stabilitet og dataintegritet.

Funktioner

  • Moderne GUI (UX): Flot mørkt interface med CustomTkinter, der gør det nemt at gemme indstillinger, vælge mapper og se status i realtid.
  • Stop-funktionalitet: Afbryd synkroniseringen midt i processen direkte fra UI.
  • Paralleldownload: Benytter ThreadPoolExecutor (default 5 tråde) for markant højere overførselshastighed.
  • Resume Download: Understøtter HTTP Range headers, så afbrudte downloads af store filer (f.eks. >50GB) genoptages fra det sidste byte i stedet for at starte forfra.
  • Auto-Refresh af Downloads & Tokens: Håndterer automatisk udløbne download-links og Access Tokens (401 Unauthorized). Værktøjet fornyer både URL'er og adgangsnøgler midt i processen uden at afbryde synkroniseringen.
  • Exponential Backoff: Håndterer automatisk Microsoft Graph throttling (429 Too Many Requests) og netværksfejl med intelligente genforsøg — gælder alle API-kald, inkl. URL-refresh.
  • Dybdebeskyttelse: Mappegennemgang stopper ved 50 niveauers dybde og logger en advarsel, så unormalt dybe strukturer ikke kan crashe synkroniseringen.
  • Struktureret Logging: Gemmer detaljerede logs i sharepoint_download.log samt en CSV-fejlrapport for hver kørsel.
  • Paginering: Håndterer automatisk mapper med mere end 200 elementer via @odata.nextLink.
  • Smart Skip & Integritet: Skipper filer der allerede findes lokalt med korrekt størrelse og bestået QuickXorHash-validering. Filer med korrekt størrelse men forkert indhold (korrupt) detekteres og re-downloades automatisk.
  • Entra ID Integration: Benytter MSAL for sikker godkendelse via Client Credentials flow med automatisk token-refresh.

Installation

  1. Sørg for at have Python 3 installeret.
  2. Installer de nødvendige biblioteker:
    pip install -r requirements.txt
    

Opsætning i Microsoft Entra ID (Azure AD)

For at scriptet kan få adgang til SharePoint, skal du oprette en App-registrering:

  1. Log ind på Microsoft Entra admin center.
  2. Gå til Identity > Applications > App registrations > New registration.
  3. Giv appen et navn (f.eks. "SharePoint Download Tool") og vælg "Accounts in this organizational directory only". Klik på Register.
  4. Noter din Application (client) ID og Directory (tenant) ID.
  5. Gå til API permissions > Add a permission > Microsoft Graph.
  6. Vælg Application permissions.
  7. Søg efter og tilføj Sites.Read.All (eller Sites.ReadWrite.All hvis du har brug for skriveadgang).
  8. VIGTIGT: Klik på Grant admin consent for [dit domæne] for at godkende rettighederne.
  9. Gå til Certificates & secrets > New client secret. Tilføj en beskrivelse og vælg udløbsdato.
  10. VIGTIGT: Kopier værdien under Value med det samme (det er din CLIENT_SECRET). Du kan ikke se den igen senere.

Anvendelse

Der er to måder at køre værktøjet på:

1. GUI Version (Anbefalet)

For en moderne grafisk brugerflade, kør:

python sharepoint_gui.py

Her kan du nemt indtaste indstillinger, gemme dem, vælge destinationsmappe og starte/stoppe synkroniseringen.

2. CLI Version (Til automatisering)

Hvis du ønsker at køre scriptet direkte fra terminalen:

  1. Kopier connection_info.template.txt til connection_info.txt.
  2. Udfyld dine oplysninger.
  3. Kør:
    python download_sharepoint.py
    

Logfiler

  • sharepoint_download.log: Teknisk log over alle handlinger og fejl.
  • download_report_YYYYMMDD_HHMMSS.csv: En hurtig oversigt over filer der fejlede.

Sikkerhed

Husk at .gitignore er sat op til at ignorere connection_info.txt, så dine adgangskoder ikke uploades til Git.

Description
No description provided
Readme 251 KiB
Languages
Python 100%