22. oktober 2020 - 14:06 Der er 7 kommentarer og
1 løsning

Læse streng fra nettet, som giver filnavn. Powershell?

Jeg skal hente indholdet af en fil på nettet. Filnavnet, som ændres løbende, gives her på denne adresse, og jeg skal således læse denne streng for at få navnet:

https://leidata-preview.gleif.org/api/v2/golden-copies/publishes

I powershell er det nemt:
powershell wget 'https://leidata-preview.gleif.org/api/v2/golden-copies/publishes' -outfile data.txt

Jeg kunne starte et dos prompt med SHELL, men Access fortsætter jo, uden SHELL er færdig. Så skulle jeg teste på, om data er fundet osv osv.
Er der ikke en nemmere måde i Access?
Til info er strengen lige nu
{"data":[{"publish_date":"2020-10-22 08:00:00","lei2":{"type":"lei2","publish_date":"2020-10-22 08:00:00","full_file":{"csv":{"type":"lei2","format":"csv","record_count":1729054,"size":185501253,"size_human_readable":"176.91 MB","delta_type":"GoldenCopy","url":"https:\/\/leidata-preview.gleif.org\/storage\/golden-copy-files\/2020\/10\/22\/404909\/20201022-0800-gleif-goldencopy-lei2-golden-copy.csv.zip"},"js ....

For at være mere præcis er det altså filnavnet, jeg skal bruge, så det må gerne være svaret, men ellers henter jeg det selv ud fra strengen. Altså her er det:
https:\\leidata-preview.gleif.org\storage\golden-copy-files\2020\10\22\404909\20201022-0800-gleif-goldencopy-lei2-golden-copy.csv.zip
og det ændrer sig løbende...

Det er meget ligetil og meget besværligt beskrevet :-).
Any clues?
Gustav Mester
22. oktober 2020 - 14:33 #1
I vores project VBA.CVRAPI:

https://github.com/CactusData/VBA.CVRAPI

både hentes og parses en Json-streng.
Du kan nok ikke bruge funktionerne direkte til at fiske dit filnavn ud, men det skulle give et godt startpunkt.
Det er RetrieveDataResponse, der er kernefunktionen:

' Retrieve a Json response from a service URL.
' Retrieved data is returned in parameter ResponseText.
'
' Returns True if success.
'
Public Function RetrieveDataResponse( _
    ByVal ServiceUrl As String, _
    ByRef ResponseText As String, _
    Optional ByVal UserAgent As String) _
    As Boolean

    ' ServiceUrl is expected to have URL encoded parameters.
   
    ' User defined constants.
    Const DefaultUserAgent  As String = "Min organisation - Mit projekt"
    ' Fixed constants.
    Const Async            As Boolean = False
    Const StatusOk          As Integer = 200
    Const StatusNotFound    As Integer = 404
   
    ' Engine to communicate with the Json service.
    Dim XmlHttp            As XMLHTTP60
   
    Dim Result              As Boolean
 
    On Error GoTo Err_RetrieveDataResponse
   
    Set XmlHttp = New XMLHTTP60
   
    If UserAgent = "" Then
        ' Set default string for User-Agent.
        UserAgent = DefaultUserAgent
    End If
   
    XmlHttp.Open "GET", ServiceUrl, Async
    XmlHttp.setRequestHeader "User-Agent", UserAgent

    XmlHttp.send

    ResponseText = XmlHttp.ResponseText
    Select Case XmlHttp.status
        Case StatusOk
            Result = True
        Case StatusNotFound
            ' Special case for CVRAPI which returns 404 and a valid Json error message:
            ' {"error":"NOT_FOUND","t":0,"version":6}
            If _
                InStr(1, ResponseText, "{", vbBinaryCompare) = 1 And _
                InStr(1, ResponseText, "error", vbBinaryCompare) = 3 And _
                InStr(1, ResponseText, "}", vbBinaryCompare) = 39 Then
                ' Json error message received.
                Result = True
            End If
    End Select
    If Result = False Then
        If ResponseText = "" Then
            ResponseText = XmlHttp.statusText
        End If
        ResponseText = CStr(XmlHttp.status) & ":" & vbCrLf & ResponseText
    End If
   
    RetrieveDataResponse = Result

Exit_RetrieveDataResponse:
    Set XmlHttp = Nothing
    Exit Function

Err_RetrieveDataResponse:
    MsgBox "Error" & Str(Err.Number) & ": " & Err.Description, vbCritical + vbOKOnly, "Web Service Error"
    Resume Exit_RetrieveDataResponse

End Function
terry Ekspert
22. oktober 2020 - 15:03 #2
Simple example to download file here, found on YouTube

Option Explicit
'Tutorial link: https://youtu.be/H4-w6ULc_qs
#If VBA7 Then
  Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _
      szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As LongPtr
#Else
  Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
      szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If

Function download_file()
'-----------------------------
'Thanks for downloading the code.
'Please visit our channel for a quick explainer on how to use this code.
'Feel free to update the code as per your need and also share with your friends.
'Download free codes from http://vbaa2z.blogspot.com
'Support our channel: youtube.com/vbaa2z
'Author: L Pamai (vbaa2z.team@gmail.com)
'-----------------------------

Dim downloadStatus As Variant
Dim url As String
Dim destinationFile_local As String

url = "https://leidata-preview.gleif.org/api/v2/golden-copies/publishes"

destinationFile_local = "C:\Users\Terry\Downloads\" & fileName(url)

downloadStatus = URLDownloadToFile(0, url, destinationFile_local, 0, 0)

If downloadStatus = 0 Then
    MsgBox "Downloaded Succcessfully!"
    Else
    MsgBox "Download failed"
End If

End Function

Function fileName(file_fullname) As String

    fileName = Mid(file_fullname, InStrRev(file_fullname, "/") + 1)

End Function
Gustav Mester
22. oktober 2020 - 15:16 #3
Det er ikke en fil, der skal downloades.
Det er et filnavn, der skal findes i en streng med Json-data. Der er ingen grund til at skrive denne streng til en fil.
terry Ekspert
22. oktober 2020 - 15:31 #4
If your code does whats required then no problem Gustav ;-)
22. oktober 2020 - 15:35 #5
Gustav - jeg skal lige tygge mig igennem koden. Jeg skulle jo gerne kunne vedligeholde den, og jeg skal øjensynligt også trylle lidt mere for at få det til at virke.
Filen er en zipfil og skal faktisk downloades og unzippes efterfølgende.
Gustav Mester
22. oktober 2020 - 16:00 #6
Ja. Da kan du med fordel bruge function DownloadCacheFile i modulet Internet.bas i mit projekt VBA.PictureURL:

https://github.com/GustavBrock/VBA.PictureUrl

og funktionen UnZip fra et andet project, VBA.Compress:

https://github.com/GustavBrock/VBA.Compress

Med hensyn til trylleriet, er det sandt nok, især hvad angår Json. Her er et andet eksempel:

https://github.com/GustavBrock/VBA.CurrencyCode
terry Ekspert
22. oktober 2020 - 17:18 #7
Some nice usefull links there Gustav.

Once you have downloaded the file you can use the Instr() function to extract the filename which can then be downloaded ready to unzip
22. oktober 2020 - 19:12 #8
Gustav, det ser cool ud. Jeg tjekker det ud senere, når jeg er blevet træt af min høkerløsning.
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I dag 00:58 Tæl dato i Excel Af ltp i Excel
I dag 00:31 msata størrelse Af cocococo i PC
I går 19:55 SQL database Af John i Visual Basic
I går 19:03 Finde e-mail adresser i sin G-Mail Af Ikke-ekspert i E-mail programmer
I går 18:06 Nedtælling Af prinsib i Excel


Premium
Nets risikerer at skulle betale bod efter stor forsinkelse af MitID Erhverv: Forhandler med Digitaliseringsstyrelsen
Kontrakten mellem Digitaliseringsstyrelsen og Nets rummer mulighed for, at Nets kan blive ramt af en bod på grund af forsinkelsen af MitID Erhverv.
Computerworld
Stein Bagger gør comeback i ny branche: "De lignede et mafiahold, førte sig frem som nyrige og plaprede løs om urealistiske drømme"
Stein Bagger har skiftet navn og fører sig nu frem i store biler i en helt ny branche, skriver en dansk avis.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
Job & Karriere
Se Waoos forklaring: Derfor har selskabet fyret topchef Jørgen Stensgaard med omgående virkning
Waaos bestyrelse opsiger fiberselskabets topchef, Jørgen Stensgaard, der fratræder med omgående virkning. Se hele forklaringen fra Waao her.
White paper
Optimér produktiviteten og lad din printer følge med ud i skyen
De fleste virksomheder investerer betydelige beløb i den digitale transformationsproces, men skriver alligevel dokumenter ud som aldrig før, og medarbejdere opfatter decideret print som en forudsætning for at kunne arbejde effektivt. Alligevel er virksomhedens printstruktur ofte et systemmæssigt stedbarn, der er sammenstykket af mange forskellige enheder og platforme – hvilket skaber forvirring og betydeligt tidsspilde. Print passer heller helt ind i hverken den eksisterende digitale infrastruktur eller i den cloudbaserede infrastruktur, virksomheden sigter mod. Det udfordrer både sikkerhed, produktivitet og digital strategi som hele. I denne hvidbog kan du læse om udfordringerne og om, hvordan du håndterer dem mest effektivt som et led i den digitale transformationsproces.