Avatar billede Martin Kjær Novice
26. oktober 2016 - 21:49 Der er 4 kommentarer og
1 løsning

Postnord API opslag

Hejsa,

Jeg skal hente data fra Postnord's API (via https://api2.postnord.com/rest/businesslocation/v1/servicepoint/findNearestByAddress.json?apikey=MIN_API_KODE_SLETTET_HER) på min website (PHP/MYSQL på Apache server). Jeg kan fint kalde URL'en og får de ønskede data - men jeg kan ikke få dem struktureret indlæs via PHP.

Nogle der har forslag til lidt kode, som kan hjælpe mig videre her ? Jeg vil gerne ende med, at have data fra outputtet indlæg i et array eller simple variabler.

Hilsen
Martin

Output fra API'en er i dette format:
{
  "servicePointInformationResponse" : {
    "customerSupportPhoneNo" : "+4570111230",
    "servicePoints" : [ {
      "servicePointId" : "2755",
      "name" : "Posthus KIWI",
      "routeDistance" : 409,
      "visitingAddress" : {
        "streetName" : "Centrumgaden",
        "streetNumber" : "3",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "deliveryAddress" : {
        "streetName" : "Centrumgaden",
        "streetNumber" : "3",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "coordinate" : {
        "srId" : "EPSG:4326",
        "northing" : 55.731214,
        "easting" : 12.361024
      },
      "openingHours" : [ {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "MO"
      }, {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "TU"
      }, {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "WE"
      }, {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "TH"
      }, {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "FR"
      }, {
        "from1" : "0700",
        "to1" : "2200",
        "day" : "SU"
      } ]
    }, {
      "servicePointId" : "635",
      "name" : "Pakkeboks 635 V / Postbygning",
      "routeDistance" : 595,
      "visitingAddress" : {
        "streetName" : "Banegårdspladsen",
        "streetNumber" : "7",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "deliveryAddress" : {
        "streetName" : "Banegårdspladsen",
        "streetNumber" : "7",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "coordinate" : {
        "srId" : "EPSG:4326",
        "northing" : 55.730559,
        "easting" : 12.357986
      },
      "openingHours" : [ {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "MO"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "TU"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "WE"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "TH"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "FR"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "SA"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "SU"
      } ]
    }, {
      "servicePointId" : "635",
      "name" : "Pakkeboks 635 V / Postbygning Handikapvenlig",
      "routeDistance" : 595,
      "visitingAddress" : {
        "streetName" : "Banegårdspladsen",
        "streetNumber" : "7",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "deliveryAddress" : {
        "streetName" : "Banegårdspladsen",
        "streetNumber" : "7",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "coordinate" : {
        "srId" : "EPSG:4326",
        "northing" : 55.730559,
        "easting" : 12.357986
      },
      "openingHours" : [ {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "MO"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "TU"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "WE"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "TH"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "FR"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "SA"
      }, {
        "from1" : "0000",
        "to1" : "2359",
        "day" : "SU"
      } ]
    }, {
      "servicePointId" : "8012",
      "name" : "Pakkeboks 8012 Grantoftecentret V/selskabslokalerne",
      "routeDistance" : 1815,
      "visitingAddress" : {
        "streetName" : "Grantoftestræde",
        "streetNumber" : "11",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "deliveryAddress" : {
        "streetName" : "Grantoftestræde",
        "streetNumber" : "11",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "coordinate" : {
        "srId" : "EPSG:4326",
        "northing" : 55.727351,
        "easting" : 12.343242
      },
      "openingHours" : [ {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "MO"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "TU"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "WE"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "TH"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "FR"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "SA"
      }, {
        "from1" : "0630",
        "to1" : "2130",
        "day" : "SU"
      } ]
    }, {
      "servicePointId" : "2762",
      "name" : "Posthus Egebjerg Kiosk",
      "routeDistance" : 2452,
      "visitingAddress" : {
        "streetName" : "Egebjerg Bygade",
        "streetNumber" : "37",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "deliveryAddress" : {
        "streetName" : "Egebjerg Bygade",
        "streetNumber" : "37",
        "postalCode" : "2750",
        "city" : "BALLERUP",
        "countryCode" : "DK"
      },
      "coordinate" : {
        "srId" : "EPSG:4326",
        "northing" : 55.750519,
        "easting" : 12.377767
      },
      "openingHours" : [ {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "MO"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "TU"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "WE"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "TH"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "FR"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "SA"
      }, {
        "from1" : "0800",
        "to1" : "2100",
        "day" : "SU"
      } ]
    } ]
  }
}
Avatar billede Slater Ekspert
26. oktober 2016 - 21:57 #1
json_decode()

Det burde være alt du behøver.
Avatar billede Martin Kjær Novice
29. oktober 2016 - 11:11 #2
Super. Så langt så godt. Nu har så et array med disse data, $app_info. Jeg er ikke så erfaren mht at få output fra arrayet, når der er flere dimoentioner. Jeg prøver fiks med dette - uden held....

echo $app_info[servicePointInformationResponse][servicePoints][name]

Hvad gør jeg galt?

Hilsen
Martin
Avatar billede Slater Ekspert
29. oktober 2016 - 11:54 #3
Der er et par ting.

For det første skal du skrive et array-index som en streng, med anførselstegn omkring, ellers tror PHP det er en konstant. Altså array["index"] i stedet for array[index]. Det andet kan fungere an på PHP's indstillinger, men det er ikke en god ide.

For det andet returnerer json_decode() som standard et objekt, ikke et array, og det behandles på en anden måde, som $app_info->servicePointInformation i stedet for $app_info['servicePointInformation']
Du kan dog godt få det som et array, hvis du bedre kan lide den syntaks, ved at smide true som andet parameter på funktionen, altså json_decode($data, true);

For det tredje er servicePoints et array med flere ting i, så det giver ikke mening at spørge om 'name' på servicePoints, for der er flere ting med navne under det.
Hvis du vil have fat i det første index i servicePoints, så er det (i objekt-syntaks):
$app_data->servicePointInformationResponse->servicePoints[0]->name;

Hvis du vil have allesammen, skal du køre det gennem en løkke eller lignende.
Avatar billede Slater Ekspert
29. oktober 2016 - 11:55 #4
Hov, jeg kom til at skrive $app_data et sted i stedet for $app_info, som du kaldte den. Den har du nok selv regnet ud var en fejl.
Avatar billede Martin Kjær Novice
29. oktober 2016 - 15:15 #5
Jeps, den fangede jeg. 1000 tak for hjælpen - nu tror jeg, at jeg er på rette spor.
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

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