Avatar billede nemlig Professor
12. marts 2025 - 21:32 Der er 5 kommentarer og
1 løsning

Hjælp til curl()

Hejsa.
Jeg har lavet et lille script, som henter status på en Shelly-enhed.
Den syntax, jeg benytter er nu deprecated, og jeg skal i stedet bruge en ny syntax. Men det kan jeg ikke få til at spille.
Håber på lidt hjælp/input:
Nuværende script:
$key =         '99999';
$url =         'https://shelly-161-eu.shelly.cloud/device/status/?';
$device_id = '00082289c26e';

$data = http_build_query( [
        "auth_key"    => $key,
        "id"         => $device_id
    ] );

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded"] );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

$response = curl_exec($curl);
curl_close($curl);
$result = json_decode($response, true);

print "<pre>";
print_r($result);
print "</pre>";

Den nye syntax ser sådan herud:
curl -X POST 'https://<HOST>/v2/devices/api/get?auth_key=<AUTH_KEY>' \
    -H 'Content-Type: application/json' \
    -d '{"ids":["00082289c26e"],"select":["status","settings"],"pick":{"status":["sys"],"settings":["ble"]}}'

Det er også beskrevet her: https://shelly-api-docs.shelly.cloud/cloud-control-api/communication-v2

Håber på lidt input til, hvordan jeg definerer curl()-parametrene.
Avatar billede arne_v Ekspert
13. marts 2025 - 00:08 #1
Jeg er lidt forvirret.

Den første kode er et PHP script.

Den anden kode er et shell script.

Vil du bruge PHP eller shell?
Avatar billede repox Seniormester
13. marts 2025 - 07:55 #2
Dit $data objekt skal struktureres efter dokumentationen:


$data = [
    'ids' => [
        '00082289c26e',
    ],
    'status' => [
        'select',
        'settings',
    ],
    'pick' => [
        'status' => ['sys',]
        'settings' => ['ble',]
    ]
];

   
Derefter skal du angive at du sender JSON til endpointet og JSON encode dit data objekt:


$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"] );
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
Avatar billede nemlig Professor
13. marts 2025 - 08:36 #3
#2 Tak for meget konkret input - det er værdsat :).

Jeg har lige ændret på linje 5 og 6, så koden ser sådan her ud (byttet om på select og status.
$data = [
    'ids' => [
        '00082289c26e',
    ],
    'select' => [
        'status',
        'settings',
    ],
    'pick' => [
        'status' => ['sys',]
        'settings' => ['ble',]
    ]
];


Men jeg får denne syntax error, og jeg kan bare ikke få øje på fejlen:

Parse error: syntax error, unexpected single-quoted string "settings", expecting "]" in .....shelly.php on line 20 (det er linjen med:  'settings' => ['ble',])
Avatar billede nemlig Professor
13. marts 2025 - 08:38 #4
#1 Beklager Arne, at jeg ikke er helt tydelig.
Jeg benytter PHP, men i API'en vises eksempler i Shell. Derfor en omskrivning til PHP.
Avatar billede repox Seniormester
13. marts 2025 - 08:44 #5
Ah, jeg kan se jeg manglede at sætte et komma efter  ['sys',]

Så der skal stå  ['sys',],
Avatar billede nemlig Professor
13. marts 2025 - 08:56 #6
Sådan - hurra - det spiller.
Jeg skulle også lige have sat noget auth, som jeg satte i URL'en.

Tusind mange tak :)
Avatar billede 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. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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