Public/Export/Export-Raindrop.ps1

function Export-Raindrop {
    param (
        [Parameter(Mandatory)]
        [string] $ApiToken,

        [Parameter(Mandatory = $false)]
        [int] $CollectionId = 0,

        [Parameter(Mandatory = $true)]
        [ValidateSet("csv", "html", "zip")]
        [string] $Format,

        [Parameter(Mandatory = $false)]
        [string] $OutFile,

        [Parameter(Mandatory = $false)]
        [ValidateSet('-created', 'created', 'score', '-sort', 'title', '-title', 'domain', '-domain')]
        [string] $Sort,

        [Parameter(Mandatory = $false)]
        [string] $Search
    )

    $headers = Get-RaindropAuthHeader -ApiToken $ApiToken

    $params = @{}
    if ($PSBoundParameters.ContainsKey('Sort')) { $params['sort'] = $Sort }
    if ($PSBoundParameters.ContainsKey('Search')) { $params['search'] = $Search }

    $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$($_.Value)" }) -join '&'

    $url = "$Global:RaindropBaseUrl/raindrops/$CollectionId/export.$($Format)?$queryString"

    try {
        if ([string]::IsNullOrEmpty($OutFile)) {
            $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get
            return $response
        }
        else {
            Invoke-WebRequest -Uri $url -Headers $headers -Method Get -OutFile $OutFile
        }
    }
    catch {
        Write-Error "Failed to retrieve projects: $_"
    }
}