Kim Ludvigsen skrev:
>> Hvor mange valutaer snakker vi om?
>
> 13
Okay, her er koden. Jeg har lagt kommentarlinjer ind for at
opdele koden i logiske afsnit. Det gør jeg altid, og det er en
god vane. Jeg har slået linjeopdeling fra i mit mailprogram
så det leverer uendeligt lange linjer.
<?
// ---------------- Constants ----------------
$currencies = array('USD', 'GBP', 'EUR', 'JPY', 'INR', 'AUD', 'RUB', 'CNY', 'HKD', 'MYR', 'SGD', 'TWD', 'DKK');
$url_0 = "
https://apigw1.bot.or.th/bot/public/Stat-ExchangeRate/DAILY_AVG_EXG_RATE_V1/?currency=";
$url_1 = "&start_period=$idag&end_period=$idag";
$idag = date(Y-m-d);
// ---------------- Main ----------------
$kurser = "";
foreach ($currencies as $currency) {
$url = $url_0.$currency.$url_1;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "$url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"x-ibm-client-id: XXXXX"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$kurs = floatval(substr($response,strpos($response,'mid_rate')+11));
$dato = substr($response,strpos($response,'last_updated')+15,10);
$kurser .= "$kurs,$dato,";
}
$kurser = trim($kurser,",");
file_put_contents($filnavn,$kurser, LOCK_EX);
?>
Kommentarer:
Jeg har splittet urlen op i to dele - dog uden koden for valutaen.
Løkken gennemløber alle valutakoderne og giver dem
variabelnavnet $currency. Jeg kan derfor bygge den nødvendige
url ved at sammensætte de tre dele, og dertil bruger PHP
punktum mellem elementerne:
(1) $url = $url_0.$currency.$url_1;
Sidst i løkken samler jeg valuta-elementerne op i en streng.
Det gøres med
(2) $kurser .= "$kurs,$dato,";
hvor jeg har variable indeni anførselstegn fordi de skal blandes
med almindelige tegn (her kommaer). Tegnet ".=" er en kortform
som du skal vænne dig til. (2) kunne også skrives på denne måde:
(2a) $kurser = $kurser."$kurs,$dato,";
Samme kortform kan bruges ved mange andre operatorer. Eksempler:
x+=5; //(x=x+5)
x*=8; // (x=x*8)
osv.
Denne linje:
(3) $kurser = trim($kurser,",");
er kosmetisk. Den fjerner det komma der ellers ville hænge
til sidst i linjen $kurser. trim() alene fjerner
for- og efterhængt whitespace.
Note:
Dine anførselstegn om $filename er uskadelige, men overflødige.
Et 'råt' variabelnavn virker (oversættes) altid alene. Kun hvis
det skal blandes med almindelige tegn bruger man anførselstegn.
Eksempel:
"Info gemmes i filen: $filename"
--
/Bertel