anarchator
Goto Top

Per batch prüfen ob url zu .json funktioniert oder nicht

Hallo Experten,

per Batch hab ich bisher immer mit aria2c.exe eine .json Datei heruntergeladen von

https://prayertimes.api.abdus.dev/api/diyanet/prayertimes?location_id=11 ...

und dann geprüft, ob das Tagesdatum enthalten ist und ob die Datei eine bestimmte Größe hat. Funktioniert super.
Seit 3 Tagen jedoch ist die o. g. URL nicht erreichbar. Das heißt bei Aufruf rödelt der Browser einige Sekunden und zeigt dann "Internal Server Error".

Ich habe versucht, per Batch eine Prüfung zu ergänzen, ob der Host erreichbar ist. Aber das Problem ist, dass der Host "prayertimes.api.abdus.dev" zwar erreichbar ist, aber der Pfad zur .json (siehe oben) trotzdem nicht funktioniert. Konkret hab ich nämlich das Problem, dass der Download mit aria2c.exe mit errorCode=22 abbricht und mein Batchfile dann nicht weiterläuft.

Letztendlich benötige ich also eine Prüfung per Batch, ob die oben genannte URL tatsächlich einen Inhalt liefert. Falls nicht, würde ich ein goto irgendwas setzen (um den Vorgang zu skippen).

Wie kann ich das erreichen? Bin für jeden Tipp dankbar!

Content-ID: 4668870615

Url: https://administrator.de/forum/per-batch-pruefen-ob-url-zu-json-funktioniert-oder-nicht-4668870615.html

Ausgedruckt am: 22.12.2024 um 10:12 Uhr

Penny.Cilin
Penny.Cilin 20.05.2024 um 11:26:21 Uhr
Goto Top
Hallo

und wo ist Deine Batchdatei?
Muss das Batch sein?
Eventuell kann man das auch via Powershell erledigen.

Gruss Penny.
CamelCase
CamelCase 20.05.2024 um 11:29:54 Uhr
Goto Top
Moin,

mein Tipp wäre ja, PowerShell statt batch zu verwenden...

try {
    $result = Invoke-WebRequest 'https://prayertimes.api.abdus.dev/api/diyanet/prayertimes?location_id=11104' -ErrorAction Stop   
}
catch {
    Write-Output "Failed: $_"  
    exit 1
}

Write-Output "Success: $($result.StatusCode)"  
Write-Output "Content: $($result.Content)"  
anarchator
anarchator 20.05.2024 aktualisiert um 11:39:02 Uhr
Goto Top
vielen Dank erstmal. Ich möchte es schon per Batch lösen, sofern möglich. Denn es läuft davor eine andere Batch, die dann folgenden Batch per call aufruft und danach geht es nochmal weiter mit einer weiteren batch, die wieder per call aufgerufen wird.

Mein File sieht aktuell so aus, fällt aber auf die Nase, wenn der Aufruf der .json aufgrund Internal Server Error fehlschlägt. Bei Zeile 18 fällt es momentan auf die Nase mit errorCode=22 aufgrund des temporären "Internal Server Errors".

@echo off
TITLE Download ID file 11104 (Kempten) from API1 and upload to both hosts if size matches
set filepath=https://prayertimes.api.abdus.dev/api/diyanet/prayertimes?location_id=11104
set correctsizeinbyte=3814
set folder=Y:\!DoNotTouch!\aria2c-11104-KE
REM set filename=%date:~6,4%-%date:~3,2%-%date:~0,2%_11104.json
set host1=mein.server1.de
set username1=meinuser1
set password1=meinpwd1
set host2=mein.server2.de
set username2=meinuser2
set password2=meinpwd2
cls
echo Downloading current .json for ID 11104 (KE)
y:
cd %folder%
if exist *.json del *.json 
aria2c.exe %filepath% -o prayer.json
for %%F in (%folder%\prayer.json) do set groesse=%%~zF
if %groesse% equ %correctsizeinbyte% goto sizematches
color 4f
echo !!! Size not %correctsizeinbyte% Byte
del /q prayer.json
color
timeout 2 > nul
goto eof
:sizematches
cls
echo !!! File Size matches, that's good!  

echo proceed to upload the .json for ID 11104 (KE) to 1
"G:\Meine Ablage\!DoNotTouch!\winscp.com" /command "open ftp://%username1%:%password1%@%host1%" "put %folder%\prayer.json" "exit"  

echo proceed to upload the .json for ID 11104 (KE) to 2
"G:\Meine Ablage\!DoNotTouch!\winscp.com" /command "open ftp://%username2%:%password2%@%host2%" "put %folder%\prayer.json" "exit"  

:eof
CamelCase
CamelCase 20.05.2024 aktualisiert um 11:48:44 Uhr
Goto Top
na wenn's sein muss...

aria2c.exe %filepath% -o prayer.json
if %ERRORLEVEL% neq 0 (
    echo Download failed with error level %ERRORLEVEL%
    REM hier dein Code falls fehler, z.B.:
    exit /b %ERRORLEVEL%
) else (
    echo Download successful
    REM hier dein Code falls erfolg
)
anarchator
anarchator 20.05.2024 um 20:32:47 Uhr
Goto Top
danke, aber funktioniert leider nicht.
aria2c bleibt eine Weile hängen bei

05/20 20:31:18 [NOTICE] Downloading 1 item(s)
[#6d08c4 0B/0B CN:1 DL:0B]

und schmiert dann ab.
anarchator
Lösung anarchator 20.05.2024 um 20:57:27 Uhr
Goto Top
ich glaube ich habe die "Lösung": Ich verwende einfach nicht mehr aria2c.exe, sondern wget.exe (https://eternallybored.org/misc/wget/)
wget schreibt in diesem Fall in die Zieldatei prayer.json folgendes:

--2024-05-20 20:49:21-- https://prayertimes.api.abdus.dev/api/diyanet/prayertimes?location_id=11 ...
Resolving prayertimes.api.abdus.dev (prayertimes.api.abdus.dev)... 78.47.61.167
Connecting to prayertimes.api.abdus.dev (prayertimes.api.abdus.dev)|78.47.61.167|:443... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2024-05-20 20:49:41 ERROR 500: Internal Server Error.

Das macht erstmal nichts, Hauptsache das Batch läuft weiter. Und im konkreten Fall merkt es dann halt, dass die Dateigröße nicht equal %correctsizeinbyte% ist.