Vinnaren i pepparkakshustävlingen!
2024-02-13, 09:24
  #1
Medlem
Har förut läst av Svenska Spels API med javascript , men vill hellre göra det med endast php så jag kan fixa hämtningen med cron job istället . Jag tog min gamla kod där api´n laddas ner i $resp . När jag echoar ut den variabeln så skrivs hela APIet ut .

Problemet är när jag ska leta efter t.ex. lagets namn så får jag inte ut ett dugg när jag skriver som jag gjorde i javascript.

Kod:
   "events":[{"eventNumber":1,"description":"Feyenoord-Roma","cancelled":false,"extraInfo":null,"eventTypeDescription":"","participantType":"team","outcomes":null,"odds":{"home":"1,97","draw":"3,55","away":"3,88"},"distribution":{"date":"2024-02-13T08:32:07.575+01:00","refDate":"2024-02-13T02:30:25.185+01:00","home":"42","draw":"26","away":"32","refHome":"40","refDraw":"27","refAway":"33"},"newspaperAdvice":null,"league":{"id":10,"name":"Europa League","season":{"id":0,"name":"Europa League 23/24"},"country":{"id":1,"name":"Internationell"}},"participants":[{"id":219,"type":"home","name":"Feyenoord"},{"id":57,"type":"away","name":"Roma"}],"sportEventId":31739,"sportEventStart":"2024-02-15T18:45:00+01:00","sportEventStatus":"Inte startat","favouriteOdds":{"home":"48","draw":"27","away":"25"},"startOdds":{"home":"2,00","draw":"3,39","away":"3,65"},"randomResultProbability":{"home":"47","draw":"27","away":"26"},"complementaryOdds":null,"complementaryFavouriteOdds":null,"providerIds":[{"provider":"BetRadar","type":"Normal","id":"46296955"}]},{"eventNumber":2," 
   
Så ser Api ut för första matchen på stryktipset .

Så här läser jag av namnet på hemmalaget i första matchen i javascript , text är variabeln där apiet finns .
Kod:
  text["draws"][0]["events"][0]["participants"]["0"]["name"]  

Hur kan jag få ut samma med php ? Koden jag använder för att få ner apiet till php ser ut så här .

Kod:
$curl curl_init();curl_setopt_array($curl, array( CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_TIMEOUT => 30,CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST => "GET",CURLOPT_HTTPHEADER => array("cache-control: no-cache"),));$resp curl_exec($curl);$err curl_error($curl);curl_close($curl); 
Citera
2024-02-13, 10:20
  #2
Medlem
Enterprises avatar
1. Du ska omvandla svaret från Curl-anropet till ett objekt läsbart i PHP genom json_decode. Om du anger true efteråt så omvandlas resultatet till en associative array istället för ett PHP-objekt, vilket nog underlättar för dig som är van vid JS-syntax:

Kod:
$result json_decode($resptrue); 

2. Sen kan du hämta värdet på motsvarande sätt som i JS

Kod:
$name $result["draws"][0]["events"][0]["participants"][0]["name"]; 

Om du vill slippa hålla på med php, så går det utmärkt att hämta JSON-filen direkt i terminalen (eller shell-script) och hämta ut vad du behöver genom jq.
__________________
Senast redigerad av Enterprise 2024-02-13 kl. 10:27.
Citera
2024-02-13, 10:24
  #3
Medlem
SchrodingersPizzas avatar
Använd json_decode för att göra om det till en associativ array.

Kod:
if (!$err) {
    
$data json_decode($resptrue);
    
$name $data['draws'][0]['events'][0]['participants'][0]['name'];
    echo 
$name;
} else {
    echo 
"CURL Error: " $err;

Citera
2024-02-13, 10:36
  #4
Medlem
Citat:
Ursprungligen postat av SchrodingersPizza
Använd json_decode för att göra om det till en associativ array.

Kod:
if (!$err) {
    
$data json_decode($resptrue);
    
$name $data['draws'][0]['events'][0]['participants'][0]['name'];
    echo 
$name;
} else {
    echo 
"CURL Error: " $err;


Tackar så mycket
Citera
2024-02-13, 10:43
  #5
Medlem
Citat:
Ursprungligen postat av Enterprise
1. Du ska omvandla svaret från Curl-anropet till ett objekt läsbart i PHP genom json_decode. Om du anger true efteråt så omvandlas resultatet till en associative array istället för ett PHP-objekt, vilket nog underlättar för dig som är van vid JS-syntax:

Kod:
$result json_decode($resptrue); 

2. Sen kan du hämta värdet på motsvarande sätt som i JS

Kod:
$name $result["draws"][0]["events"][0]["participants"][0]["name"]; 

Om du vill slippa hålla på med php, så går det utmärkt att hämta JSON-filen direkt i terminalen (eller shell-script) och hämta ut vad du behöver genom jq.

Tacksam för svar . Det besparade mig många timmar . Nu är jag ju helt borttappad när jag kommer utanför jquery men tror nog att jag ska kunna få ner alla uppgifter från apiet till en fil på servern med hjälp av php och cron och eran hjälp . Sen kan jag hämta upp dom till mitt program i jquery och aldrig mer behöva tänka på vad den här php-koden gjorde
Citera
2024-02-13, 13:01
  #6
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av UHJ
Tacksam för svar . Det besparade mig många timmar . Nu är jag ju helt borttappad när jag kommer utanför jquery men tror nog att jag ska kunna få ner alla uppgifter från apiet till en fil på servern med hjälp av php och cron och eran hjälp . Sen kan jag hämta upp dom till mitt program i jquery och aldrig mer behöva tänka på vad den här php-koden gjorde
Inget problem!
Om du är bekväm i Javascript kan du ju istället göra ett skript på serversidan i Node som du kör återkommande med cron.
Även Jquery kan användas med Node, https://www.geeksforgeeks.org/how-to...-with-node-js/
Citera
2024-02-13, 16:55
  #7
Medlem
Citat:
Ursprungligen postat av Enterprise
Inget problem!
Om du är bekväm i Javascript kan du ju istället göra ett skript på serversidan i Node som du kör återkommande med cron.
Även Jquery kan användas med Node, https://www.geeksforgeeks.org/how-to...-with-node-js/
Aha intressant . Började försöka lära mig grunderna i python för ett par veckor sedan . Mest för att jag skulle prova Vs code (har använt notepad++) . Om man ändå ska leka sig runt i en ny miljö så kan man ju samtidigt försöka lära sig ett nytt språk .

Men då kanske jag ska kolla in Node istället .

När man väl hade kommit ifrån dom krångliga raderna i php . Så var den uträknande koden i princip likadan som i javascript , det var inte många tecken man behövde ändra på . Så nu har jag 2 php-script som hämtar hem det jag vill konternuerligt . Det enda jag är osäker på om Null funkar i php oxå för att kolla om inget finns . Tack igen
Kod:
<?php

 $url
="";
 
$curl curl_init();curl_setopt_array($curl, array( CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_TIMEOUT => 30,CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST => "GET",CURLOPT_HTTPHEADER => array("cache-control: no-cache"),));$resp curl_exec($curl);$err curl_error($curl);curl_close($curl);$resp json_decode($resptrue);
$oddset = array(array());$svf = array(array());$lagen = array(array());
if( 
strlen($resp["draws"][0]["events"][0]["participants"]["0"]["name"])>0){
    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["favouriteOdds"]== null){$oddset[$i][0]=0;$oddset[$i][1]=0;$oddset[$i][2]=0;}else{$oddset[$i][0]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["home"];$oddset[$i][1]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["draw"];$oddset[$i][2]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["away"];}}
    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["distribution"]== null){$svf[$i][0]=0;$svf[$i][1]=0;$svf[$i][2]=0;}else{$svf[$i][0]=$resp["draws"][0]["events"][$i]["distribution"]["home"];$svf[$i][1]=$resp["draws"][0]["events"][$i]["distribution"]["draw"];$svf[$i][2]=$resp["draws"][0]["events"][$i]["distribution"]["away"];}}

    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["participants"]== null){$lagen[$i][0]="BolleBall";$lagen[$i][1]="BalleBoll";}else{$lagen[$i][0]=$resp["draws"][0]["events"][$i]["participants"]["0"]["name"];$lagen[$i][1]=$resp["draws"][0]["events"][$i]["participants"]["1"]["name"];}}
    for(
$i=0;$i<13;$i++){$lagen[$i][2]=$resp["draws"][0]["events"][$i]["sportEventStart"];}
    for(
$i=0;$i<13;$i++){$a=$svf[$i][0];$b=$svf[$i][1];$c=$svf[$i][2];
    
$svf[$i][3]=($a>=$b && $a>=$c)+2*($a>=$b && $a<$c || $a>=$c && $a<$b)+3*($a<$b && $a<$c)-1;
    
$svf[$i][4]=($b>$a && $b>=$c)+2*($b>$a && $b<$c || $b>=$c && $b<=$a)+3*($b<=$a && $b<$c)-1;    
    
$svf[$i][5]=($c>$a && $c>$b)+2*($c>$a && $c<=$b || $c>$b && $c<=$a)+3*($c<=$a && $c<=$b)-1;    
    
$svf[$i][6]=($svf[$i][3]==0)+2*($svf[$i][4]==0)+3*($svf[$i][5]==0)-1;
    
$svf[$i][7]=($svf[$i][3]==1)+2*($svf[$i][4]==1)+3*($svf[$i][5]==1)-1;
    
$svf[$i][8]=($svf[$i][3]==2)+2*($svf[$i][4]==2)+3*($svf[$i][5]==2)-1;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][6]]<$svf[$x][$svf[$x][6]] && $i<$x || $svf[$i][$svf[$i][6]]<=$svf[$x][$svf[$x][6]] && $i>$x );}$svf[$i][9]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][7]]<$svf[$x][$svf[$x][7]] && $i<$x || $svf[$i][$svf[$i][7]]<=$svf[$x][$svf[$x][7]] && $i>$x );}$svf[$i][10]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][8]]<$svf[$x][$svf[$x][8]] && $i<$x || $svf[$i][$svf[$i][8]]<=$svf[$x][$svf[$x][8]] && $i>$x );}$svf[$i][11]=$y;}
    for(
$i=0;$i<13;$i++){$a=$oddset[$i][0];$b=$oddset[$i][1];$c=$oddset[$i][2];
    
$oddset[$i][3]=($a>=$b && $a>=$c)+2*($a>=$b && $a<$c || $a>=$c && $a<$b)+3*($a<$b && $a<$c)-1;
    
$oddset[$i][4]=($b>$a && $b>=$c)+2*($b>$a && $b<$c || $b>=$c && $b<=$a)+3*($b<=$a && $b<$c)-1;    
    
$oddset[$i][5]=($c>$a && $c>$b)+2*($c>$a && $c<=$b || $c>$b && $c<=$a)+3*($c<=$a && $c<=$b)-1;    
    
$oddset[$i][6]=($oddset[$i][3]==0)+2*($oddset[$i][4]==0)+3*($oddset[$i][5]==0)-1;
    
$oddset[$i][7]=($oddset[$i][3]==1)+2*($oddset[$i][4]==1)+3*($oddset[$i][5]==1)-1;
    
$oddset[$i][8]=($oddset[$i][3]==2)+2*($oddset[$i][4]==2)+3*($oddset[$i][5]==2)-1;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][6]]<$oddset[$x][$oddset[$x][6]] && $i<$x || $oddset[$i][$oddset[$i][6]]<=$oddset[$x][$oddset[$x][6]] && $i>$x );}$oddset[$i][9]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][7]]<$oddset[$x][$oddset[$x][7]] && $i<$x || $oddset[$i][$oddset[$i][7]]<=$oddset[$x][$oddset[$x][7]] && $i>$x );}$oddset[$i][10]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][8]]<$oddset[$x][$oddset[$x][8]] && $i<$x || $oddset[$i][$oddset[$i][8]]<=$oddset[$x][$oddset[$x][8]] && $i>$x );}$oddset[$i][11]=$y;}
    
file_put_contents('svf.json'json_encode($svf));
    
file_put_contents('odds.json'json_encode($oddset));
    
file_put_contents('lagen.json'json_encode($lagen));
}else{die;}
?>
Citera
2024-02-14, 07:36
  #8
Moderator
Protons avatar
Citat:
Ursprungligen postat av UHJ
Aha intressant . Började försöka lära mig grunderna i python för ett par veckor sedan . Mest för att jag skulle prova Vs code (har använt notepad++) . Om man ändå ska leka sig runt i en ny miljö så kan man ju samtidigt försöka lära sig ett nytt språk .

Men då kanske jag ska kolla in Node istället .

När man väl hade kommit ifrån dom krångliga raderna i php . Så var den uträknande koden i princip likadan som i javascript , det var inte många tecken man behövde ändra på . Så nu har jag 2 php-script som hämtar hem det jag vill konternuerligt . Det enda jag är osäker på om Null funkar i php oxå för att kolla om inget finns . Tack igen
Kod:
<?php

 $url
="";
 
$curl curl_init();curl_setopt_array($curl, array( CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_TIMEOUT => 30,CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST => "GET",CURLOPT_HTTPHEADER => array("cache-control: no-cache"),));$resp curl_exec($curl);$err curl_error($curl);curl_close($curl);$resp json_decode($resptrue);
$oddset = array(array());$svf = array(array());$lagen = array(array());
if( 
strlen($resp["draws"][0]["events"][0]["participants"]["0"]["name"])>0){
    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["favouriteOdds"]== null){$oddset[$i][0]=0;$oddset[$i][1]=0;$oddset[$i][2]=0;}else{$oddset[$i][0]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["home"];$oddset[$i][1]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["draw"];$oddset[$i][2]=$resp["draws"][0]["events"][$i]["favouriteOdds"]["away"];}}
    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["distribution"]== null){$svf[$i][0]=0;$svf[$i][1]=0;$svf[$i][2]=0;}else{$svf[$i][0]=$resp["draws"][0]["events"][$i]["distribution"]["home"];$svf[$i][1]=$resp["draws"][0]["events"][$i]["distribution"]["draw"];$svf[$i][2]=$resp["draws"][0]["events"][$i]["distribution"]["away"];}}

    for(
$i=0;$i<13;$i++){if($resp["draws"][0]["events"][$i]["participants"]== null){$lagen[$i][0]="BolleBall";$lagen[$i][1]="BalleBoll";}else{$lagen[$i][0]=$resp["draws"][0]["events"][$i]["participants"]["0"]["name"];$lagen[$i][1]=$resp["draws"][0]["events"][$i]["participants"]["1"]["name"];}}
    for(
$i=0;$i<13;$i++){$lagen[$i][2]=$resp["draws"][0]["events"][$i]["sportEventStart"];}
    for(
$i=0;$i<13;$i++){$a=$svf[$i][0];$b=$svf[$i][1];$c=$svf[$i][2];
    
$svf[$i][3]=($a>=$b && $a>=$c)+2*($a>=$b && $a<$c || $a>=$c && $a<$b)+3*($a<$b && $a<$c)-1;
    
$svf[$i][4]=($b>$a && $b>=$c)+2*($b>$a && $b<$c || $b>=$c && $b<=$a)+3*($b<=$a && $b<$c)-1;    
    
$svf[$i][5]=($c>$a && $c>$b)+2*($c>$a && $c<=$b || $c>$b && $c<=$a)+3*($c<=$a && $c<=$b)-1;    
    
$svf[$i][6]=($svf[$i][3]==0)+2*($svf[$i][4]==0)+3*($svf[$i][5]==0)-1;
    
$svf[$i][7]=($svf[$i][3]==1)+2*($svf[$i][4]==1)+3*($svf[$i][5]==1)-1;
    
$svf[$i][8]=($svf[$i][3]==2)+2*($svf[$i][4]==2)+3*($svf[$i][5]==2)-1;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][6]]<$svf[$x][$svf[$x][6]] && $i<$x || $svf[$i][$svf[$i][6]]<=$svf[$x][$svf[$x][6]] && $i>$x );}$svf[$i][9]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][7]]<$svf[$x][$svf[$x][7]] && $i<$x || $svf[$i][$svf[$i][7]]<=$svf[$x][$svf[$x][7]] && $i>$x );}$svf[$i][10]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($svf[$i][$svf[$i][8]]<$svf[$x][$svf[$x][8]] && $i<$x || $svf[$i][$svf[$i][8]]<=$svf[$x][$svf[$x][8]] && $i>$x );}$svf[$i][11]=$y;}
    for(
$i=0;$i<13;$i++){$a=$oddset[$i][0];$b=$oddset[$i][1];$c=$oddset[$i][2];
    
$oddset[$i][3]=($a>=$b && $a>=$c)+2*($a>=$b && $a<$c || $a>=$c && $a<$b)+3*($a<$b && $a<$c)-1;
    
$oddset[$i][4]=($b>$a && $b>=$c)+2*($b>$a && $b<$c || $b>=$c && $b<=$a)+3*($b<=$a && $b<$c)-1;    
    
$oddset[$i][5]=($c>$a && $c>$b)+2*($c>$a && $c<=$b || $c>$b && $c<=$a)+3*($c<=$a && $c<=$b)-1;    
    
$oddset[$i][6]=($oddset[$i][3]==0)+2*($oddset[$i][4]==0)+3*($oddset[$i][5]==0)-1;
    
$oddset[$i][7]=($oddset[$i][3]==1)+2*($oddset[$i][4]==1)+3*($oddset[$i][5]==1)-1;
    
$oddset[$i][8]=($oddset[$i][3]==2)+2*($oddset[$i][4]==2)+3*($oddset[$i][5]==2)-1;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][6]]<$oddset[$x][$oddset[$x][6]] && $i<$x || $oddset[$i][$oddset[$i][6]]<=$oddset[$x][$oddset[$x][6]] && $i>$x );}$oddset[$i][9]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][7]]<$oddset[$x][$oddset[$x][7]] && $i<$x || $oddset[$i][$oddset[$i][7]]<=$oddset[$x][$oddset[$x][7]] && $i>$x );}$oddset[$i][10]=$y;}
    for(
$i=0;$i<13;$i++){$y=0;for($x=0;$x<13;$x++){$y=$y+($oddset[$i][$oddset[$i][8]]<$oddset[$x][$oddset[$x][8]] && $i<$x || $oddset[$i][$oddset[$i][8]]<=$oddset[$x][$oddset[$x][8]] && $i>$x );}$oddset[$i][11]=$y;}
    
file_put_contents('svf.json'json_encode($svf));
    
file_put_contents('odds.json'json_encode($oddset));
    
file_put_contents('lagen.json'json_encode($lagen));
}else{die;}
?>
Tur att det är en dator som ska tolka innehållet i det där och inte en människa.
Har enter slutat att fungera, eller vad hände egentligen?

Funkar det så funkar det, men jag skulle inte vilja få uppdraget att försöka refaktorera den där koden om behov skulle uppstå.

Ska vi även återgå till ditt javascript finns även json.parse att tillgå för att parsa ditt jsondata till ett js-objekt, så du kan hämta ut dina properties sen med simpel punktnotation:

https://www.w3schools.com/js/js_json_parse.asp
__________________
Senast redigerad av Proton 2024-02-14 kl. 07:39.
Citera
2024-02-14, 10:17
  #9
Medlem
Citat:
Ursprungligen postat av Proton
Tur att det är en dator som ska tolka innehållet i det där och inte en människa.
Har enter slutat att fungera, eller vad hände egentligen?

Funkar det så funkar det, men jag skulle inte vilja få uppdraget att försöka refaktorera den där koden om behov skulle uppstå.

Ska vi även återgå till ditt javascript finns även json.parse att tillgå för att parsa ditt jsondata till ett js-objekt, så du kan hämta ut dina properties sen med simpel punktnotation:

https://www.w3schools.com/js/js_json_parse.asp

Har aldrig sparat i en json fil förut . Läste om json.parse , eftersom jag hämtar med $.getJSON så verkar den redan ha gjort jobbet och jag behöver inte använda json.parse . Arrayen jag får då är redan en läsbar multiarray på 13x3 när jag hämtar denna json fil med koden nedanför .

Kod:
[["Manchester City","Chelsea","2024-02-17T18:30:00+01:00"],["Burnley","Arsenal","2024-02-17T16:00:00+01:00"],["Tottenham","Wolverhampton","2024-02-17T16:00:00+01:00"],["Fulham","Aston Villa","2024-02-17T16:00:00+01:00"],["Newcastle","Bournemouth","2024-02-17T16:00:00+01:00"],["Nottingham","West Ham","2024-02-17T16:00:00+01:00"],["Birmingham","Sunderland","2024-02-17T16:00:00+01:00"],["Bristol City","Queens Park Rangers","2024-02-17T16:00:00+01:00"],["Huddersfield","Hull","2024-02-17T16:00:00+01:00"],["Norwich","Cardiff","2024-02-17T16:00:00+01:00"],["Preston","Blackburn","2024-02-17T16:00:00+01:00"],["Stoke","Coventry","2024-02-17T16:00:00+01:00"],["Swansea","Ipswich","2024-02-17T16:00:00+01:00"]]


	$.getJSON("lagen.json", function(data){lagnamn=data;for(i=0;i<13;i++){lagnamn[i][2]=lagnamn[i][2].split("T");lagnamn[i][2]=lagnamn[i][2][1].slice(0, 5);$(".hemmalag:eq("+(i+1)+")").text(lagnamn[i][0]);$(".bortalag:eq("+(i+1)+")").text(lagnamn[i][1]+" "+lagnamn[i][2]);}});

Allting efter data är kod som tar fram starttid . Hade ingen aning om hur jag skulle få fram det i php så hela texten fick följa med , samt att den lägger texten i divarna där dom visas på skärmen .

Får nog läsa på mer om json filer för dom verkar användbara om man nån gång i framtiden skulle ha behov av att använda objekt .
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback