Alla fyndtips från mellandagsrean

API, json, php för resultatlista i en Videostream

Permalänk

API, json, php för resultatlista i en Videostream

Hej min målbild är som denna:
https://www.youtube.com/watch?v=GjAqYEsj9qU en videostream från sportevenemang.

Jag har tänkt lite men vet inte om jag sett den lättaste vägen.

Tänkte använda OBS Studio för att skapa videoströmmen

För att få till resultatlistan finns en API på liveresultat.orientering.se
Tanken jag hade var att hämta data från APIn genom en php sida på en server jag har som sedan hämtas av streamen.
Problemet är att jag är totalt nybörjare på API, php och JSON.

Har i alla fall hittat Postman och fått en kodsnippet därifrån:

<html lang="sv">
<head>
<meta charset="utf-8">
<title>Senaste resultat</title>
</head>
<body>
<h1>Sprint DM Sörmland 2020</h1>
<p>Senaste Resultat</p>
<br>
<?php echo date('Y-m-d H:i:s'); ?>

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "http://liveresultat.orientering.se/api.php?method=getcompetit...",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
?>

<br>
http://liveresultat.orientering.se/api.php?method=getcompetit...
</body>
</html>

Men denna kod genererar bara HTML till efter <?php echo date('Y-m-d H:i:s'); ?> sedan inget mer.

Tacksam på förhand vaf gör jag för fel?

Visa signatur

ASRock Z68 Extreme 3 | 2500K @ 3.3GHz | ASUS Radeon 7950 DCII Top | Corsair Vengeance 8Gb 1600MHz |Intel 330 180GB| Crucial m4 64GB | WD Blue 750GB | Thermaltake Thoughpower 750 W

Permalänk
Medlem

Fungerar som jag förväntar mig när jag kör från kommandorad under Ubuntu Linux, programmet genererar en HTML-fil som ser OK ut. Den ser nog inte ut som du har tänkt, men det är ju en annan sak.

Att köra php från kommandorad är ett rätt bra sätt att felsöka, man slipper hela web-server-problematiken. Bara att dumpa utdata till en fil som man kan öppna med webbläsare.

Jag körde:

php test.php > test.html

där test.php innehåller din kod och test.html innehåller resultatet.

Om jag ska gissa vad du gjort fel så är det att php-curl inte är installerat. Jag körde detta för att installera (återigen, Ubuntu):

sudo apt-get install php-curl

test.html ser ut så här:

<html lang="sv"> <head> <meta charset="utf-8"> <title>Senaste resultat</title> </head> <body> <h1>Sprint DM Sörmland 2020</h1> <p>Senaste Resultat</p> <br> 2020-09-02 20:14:41 {"id": 17984, "name": "DM Sprint Södermanland", "organizer": "Katrineholms OK", "date": "2020-09-06", "timediff": 0, "timezone": "", "isPublic": 1} <br> http://liveresultat.orientering.se/api.php?method=getcompetit.... </body> </html>

Permalänk

[quote postid="18579361" userid="267782" name="KAD"]
Fungerar som jag förväntar mig när jag kör från kommandorad under Ubuntu Linux, programmet genererar en HTML-fil som ser OK ut. Den ser nog inte ut som du har tänkt, men det är ju en annan sak.

Att köra php från kommandorad är ett rätt bra sätt att felsöka, man slipper hela web-server-problematiken. Bara att dumpa utdata till en fil som man kan öppna med webbläsare.

Great succsess!
Det va Curl som tydligen spökade! Jag trodde de va installerat och jag hade ex kunnat köra curl --help

Men nu använde jag din apt-get å då blev det bättre

Du skall ha ett jättetack!

Visa signatur

ASRock Z68 Extreme 3 | 2500K @ 3.3GHz | ASUS Radeon 7950 DCII Top | Corsair Vengeance 8Gb 1600MHz |Intel 330 180GB| Crucial m4 64GB | WD Blue 750GB | Thermaltake Thoughpower 750 W

Permalänk

Nu har jag kört fast igen.

cURL funkar fint och jag får ner JSON svaret

Nu försöker jag använda det till något bra typ en HTML tabell.

HTML som nedan:

<table> <tr> <th>Name</th> <th>Age</th> <th>Birthday</th> </tr> <tbody id="myTable"> </tbody>

JSON svaret som ligger i $response

{ "status": "OK", "passings" : [{"passtime": "16:20:29", "runnerName": "Andrew Blyth", "class": "H45", "control": 1000, "controlName" : "", "time": "111:26" },{"passtime": "16:12:15", "runnerName": "Erica Blyth", "class": "D21", "control": 1000, "controlName" : "", "time": "108:09" },{"passtime": "15:59:54", "runnerName": "Björn Normark", "class": "H21", "control": 1000, "controlName" : "", "time": "felst." }], "hash": "4d3d4a2d9d3fefe360568918ed63cc99"}

Java:

<script> var myArray = [ <?php echo $response; ?> ] buildTable(myArray) function buildTable(data){ var table = document.getElementById('myTable') for (var i = 0; i < data.length; i++){ var row = `<tr> <td>${data[i].status}</td> <td>${data[i].runnerName}</td> <td>${data[i].class}</td> </tr>` table.innerHTML += row } } </script>

Jag får ut första jättefint med denna kod data[i].status sen har jag försökt på många olika sätt få ut det som ligger under passings i JSON-svaret.
Som sagt egentligen är jag way to noob för detta men tacksam för all hjälp.

/Sebbe

Visa signatur

ASRock Z68 Extreme 3 | 2500K @ 3.3GHz | ASUS Radeon 7950 DCII Top | Corsair Vengeance 8Gb 1600MHz |Intel 330 180GB| Crucial m4 64GB | WD Blue 750GB | Thermaltake Thoughpower 750 W

Permalänk
Medlem
Skrivet av Erixon_81:

Nu har jag kört fast igen.

cURL funkar fint och jag får ner JSON svaret

Nu försöker jag använda det till något bra typ en HTML tabell.

HTML som nedan:

<table> <tr> <th>Name</th> <th>Age</th> <th>Birthday</th> </tr> <tbody id="myTable"> </tbody>

JSON svaret som ligger i $response

{ "status": "OK", "passings" : [{"passtime": "16:20:29", "runnerName": "Andrew Blyth", "class": "H45", "control": 1000, "controlName" : "", "time": "111:26" },{"passtime": "16:12:15", "runnerName": "Erica Blyth", "class": "D21", "control": 1000, "controlName" : "", "time": "108:09" },{"passtime": "15:59:54", "runnerName": "Björn Normark", "class": "H21", "control": 1000, "controlName" : "", "time": "felst." }], "hash": "4d3d4a2d9d3fefe360568918ed63cc99"}

Java:

<script> var myArray = [ <?php echo $response; ?> ] buildTable(myArray) function buildTable(data){ var table = document.getElementById('myTable') for (var i = 0; i < data.length; i++){ var row = `<tr> <td>${data[i].status}</td> <td>${data[i].runnerName}</td> <td>${data[i].class}</td> </tr>` table.innerHTML += row } } </script>

Jag får ut första jättefint med denna kod data[i].status sen har jag försökt på många olika sätt få ut det som ligger under passings i JSON-svaret.
Som sagt egentligen är jag way to noob för detta men tacksam för all hjälp.

/Sebbe

Tror du blandat ihop var arrayen är, så att säga. Svaret ser inte ut att vara en array av objekt med en status och en enda passing, utan ett enda objekt med en status och en array av passings.

Det ska alltså inte vara till exempel

var data = [ <?php echo $response; ?> ]

och

let x = data[i].passings.class

eller

let x = data[i].class

utan det ska snarare vara

var data = <?php echo $response; ?> let x = data.passings[i].class

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem
Skrivet av Erixon_81:

Java: JavaScript

Vill du förkorta JavaScript är det JS som gäller. Java är ett orelaterat (bortsett från namnet) språk och du kommer få väldigt svårt att hitta relevanta lösningar till problem om du använder java som sökterm istället för javascript.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.