Hoe kan ik de naam van een campagne opvragen uit een array?

Status
Niet open voor verdere reacties.

ariecade

Gebruiker
Lid geworden
5 jun 2019
Berichten
146
Ik gebruik LaPosta om nieuwsbrieven te versturen.

Nu wil ik graag een PHP scriptje maken die controleert of een bpaalde naam van een campagne al bestaat, b.v. naam campagne = "campagne januari".

Hier staat de documentatie van LaPosta: https://api.laposta.nl/doc/?lib=php

Daarin staat halverwege bij het hoofdstuk "Alle campagnes van een account opvragen" het volgende:

Code:
require_once('./lib/Laposta.php');
Laposta::setApiKey('xxxxxxxxxxxxxxxxxxxx');
$campaign = new Laposta_Campaign();
$result = $campaign->all();

En als antwoord krijg je dan zo iets:

Code:
{
    "data": [
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "njhgaf61ye",
                "created": "2014-12-11 11:26:19",
                "modified": "2014-12-11 11:27:31",
        "type": "regular",
        "delivery_requested": null,
                "delivery_started": "2014-12-11 11:27:29",
                "delivery_ended": "2014-12-11 11:27:31",
                "name": "campagne januari",
                "subject": "campagne januari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
        "list_ids": [
            "nnhnkrytua",
            "srbhotdwob"
        ],
        "stats": {
            "ga": "true",
            "mtrack": "false"
        },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/njhgaf61ye",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/9dknAdbAXm.2.png"
                }
            }
        },
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "qzgllqculd",
                "created": "2014-12-11 11:27:45",
                "modified": "2014-12-11 11:27:56",
        "type": "regular",
        "delivery_requested": null,
                "delivery_started": null,
                "delivery_ended": null,
                "name": "campagne februari",
                "subject": "campagne februari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
        "list_ids": [
            "nnhnkrytua",
            "srbhotdwob"
        ],
        "stats": {
            "ga": "true",
            "mtrack": "false"
        },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/qzgllqculd",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/ClCvez9GXQ.2.png"
                }
            }
        }
    ]
}

Hierna denk ik dat ik de campagnes in $result moet doorlopen (met een foreach), en per campagne testen of de "name" voldoet aan "campagne januari" (met strpos vermoed ik).

Maar ik heb het nodige getest maar ik krijg maar niet de campagne naam uit de $result te pakken.

Ik ben nu gekomen tot:

Code:
foreach ($result as $value) {
  echo "email = " . $value["data"]["campaign"]["name"] . "<br />";
}

Maar dit is hem dus nog niet helemaal :rolleyes:

Enig idee hoe ik de naam te pakken kan krijgen en dan controleren of er een campagne met de naam "campagne januari" bestaat?

mod. api key verwijderd.
 
Laatst bewerkt door een moderator:
Jouw response data heb ik als voorbeeld gebruikt
Code:
<?php
$result = '{
    "data": [
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "njhgaf61ye",
                "created": "2014-12-11 11:26:19",
                "modified": "2014-12-11 11:27:31",
                "type": "regular",
                "delivery_requested": null,
                "delivery_started": "2014-12-11 11:27:29",
                "delivery_ended": "2014-12-11 11:27:31",
                "name": "campagne januari",
                "subject": "campagne januari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
                "list_ids": [
                    "nnhnkrytua",
                    "srbhotdwob"
                ],
                "stats": {
                    "ga": "true",
                    "mtrack": "false"
                },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/njhgaf61ye",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/9dknAdbAXm.2.png"
                }
            }
        },
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "qzgllqculd",
                "created": "2014-12-11 11:27:45",
                "modified": "2014-12-11 11:27:56",
                "type": "regular",
                "delivery_requested": null,
                "delivery_started": null,
                "delivery_ended": null,
                "name": "campagne februari",
                "subject": "campagne februari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
                "list_ids": [
                    "nnhnkrytua",
                    "srbhotdwob"
                ],
                "stats": {
                    "ga": "true",
                    "mtrack": "false"
                },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/qzgllqculd",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/ClCvez9GXQ.2.png"
                }
            }
        }
    ]
}';

$data = json_decode($result, true);
$camps = count($data["data"]);
for ($i = 0; $i < $camps; $i++) {
    $campname = $data["data"][$i]["campaign"]["name"];
    // voorbeeld
    echo $campname . '<br>';
    if ($campname == 'campagne januari') {
        echo 'januari bestaat' . '<br>';
    }
}
 
Laatst bewerkt:
Een tipje:

Een $value in je je foreach is een array.
Dus je kan tijdens het ontwikkelen prima print_r() in je foreach gebruiken zodat je een mooi boom-overzicht ziet met alle elementen.


PHP:
<?php
foreach($result as $value) {
   echo "<pre>".print_r($value,true)."</pre>";
}
?>

Let er wel op dat dit alle parent-elementen afloopt, dus als je een hoop records hebt, krijg je een flinke pagina.
Je kan voor het gemak tijdens het testen, en omdat alles toch hoogstwaarschijnlijk dezelfde opbouw heeft, dit limiteren tot de eerste twee records met array_slice($result, 0, 2):

PHP:
<?php
foreach(array_slice($result, 0, 2) as $value) {
   echo "<pre>".print_r($value,true)."</pre>";
}
?>
 
Een tipje:

Een $value in je je foreach is een array.
Dus je kan tijdens het ontwikkelen prima print_r() in je foreach gebruiken zodat je een mooi boom-overzicht ziet met alle elementen.


PHP:
<?php
foreach($result as $value) {
   echo "<pre>".print_r($value,true)."</pre>";
}
?>

Let er wel op dat dit alle parent-elementen afloopt, dus als je een hoop records hebt, krijg je een flinke pagina.
Je kan voor het gemak tijdens het testen, en omdat alles toch hoogstwaarschijnlijk dezelfde opbouw heeft, dit limiteren tot de eerste twee records met array_slice($result, 0, 2):

PHP:
<?php
foreach(array_slice($result, 0, 2) as $value) {
   echo "<pre>".print_r($value,true)."</pre>";
}
?>

Super PHP4U, bedankt!

Met een var_dump kreeg ik het iets minder gestructeerd op beeld staan :D

Maar die laatste foreacht geeft bij mij nog steeds alle records terug, op zich geen probleem want het alleen tijdelijk voor de info die ik uit de array kan halen maar wel vreemd want het zou moeten werken met array_slice :confused:
 
Jouw response data heb ik als voorbeeld gebruikt
Code:
<?php
$result = '{
    "data": [
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "njhgaf61ye",
                "created": "2014-12-11 11:26:19",
                "modified": "2014-12-11 11:27:31",
                "type": "regular",
                "delivery_requested": null,
                "delivery_started": "2014-12-11 11:27:29",
                "delivery_ended": "2014-12-11 11:27:31",
                "name": "campagne januari",
                "subject": "campagne januari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
                "list_ids": [
                    "nnhnkrytua",
                    "srbhotdwob"
                ],
                "stats": {
                    "ga": "true",
                    "mtrack": "false"
                },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/njhgaf61ye",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/9dknAdbAXm.2.png"
                }
            }
        },
        {
            "campaign": {
                "account_id": "wFiUS4HL4e",
                "campaign_id": "qzgllqculd",
                "created": "2014-12-11 11:27:45",
                "modified": "2014-12-11 11:27:56",
                "type": "regular",
                "delivery_requested": null,
                "delivery_started": null,
                "delivery_ended": null,
                "name": "campagne februari",
                "subject": "campagne februari",
                "from": {
                    "name": "Laposta API",
                    "email": "api@laposta.nl"
                },
                "reply_to": "api@laposta.nl",
                "list_ids": [
                    "nnhnkrytua",
                    "srbhotdwob"
                ],
                "stats": {
                    "ga": "true",
                    "mtrack": "false"
                },
                "web": "https://laposta-api.email-provider.nl/web/wFiUS4HL4e/qzgllqculd",
                "screenshot": {
                    "113x134": "https://app.laposta.nl/clients/images/screenshots/ClCvez9GXQ.2.png"
                }
            }
        }
    ]
}';

$data = json_decode($result, true);
$camps = count($data["data"]);
for ($i = 0; $i < $camps; $i++) {
    $campname = $data["data"][$i]["campaign"]["name"];
    // voorbeeld
    echo $campname . '<br>';
    if ($campname == 'campagne januari') {
        echo 'januari bestaat' . '<br>';
    }
}

Hoi Bron,

Bedankt voor de hulp!

Blijkbaar is $result al een array en is json_decode niet nodig want ik kreeg deze melding:

json_decode() expects parameter 1 to be string, array given

Ik heb jouw code dus een klein beetje aanpast en nu werkt het prima:

Code:
// $data = json_decode($result, true);
$camps = count($result["data"]);
for ($i = 0; $i < $camps; $i++) {
    $campname = $result["data"][$i]["campaign"]["name"];
    // voorbeeld
    echo $campname . '<br>';
    if ($campname == 'campagne januari') {
        echo 'januari bestaat' . '<br>';
    } else {
      echo 'januari bestaat NIET' . '<br>';
    }
}
 
Ik heb het hier geprobeerd zonder de echte response van LaPosta, die had ik niet.
Daarom gokte ik op een json string $result = '{....}' . Variabele $result is geen string begrijp ik nu :)
 
Ik heb het hier geprobeerd zonder de echte response van LaPosta, die had ik niet.
Daarom gokte ik op een json string $result = '{....}' . Variabele $result is geen string begrijp ik nu :)

Klopt als een bus!

Was ook alleen maar een opmerking mijnerzijds om te laten weten dat het gelukt is :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan