Hent Data Fra Ekstern Kilde

I de tidligere forløb i Sociale Medier 1 og 2, hvor vi har arbejdet med en blog, har vi selv været ejer af det data, der blev benyttet i applikationen. I Sociale Medier 3 er situationen anderledes, idet vi i stedet for at have adgang til vores data fra en SQL database, ønsker at trække data fra en ekstern kilde.
Typisk vil man hente data fra en ekstern kilde via en web-service eller et feed, der bliver stillet til rådighed af den eksterne kilde. Det kunne fx være http://oiorest.dk/danmark/, der stiller information om forskellige dele af Danmark til rådighed (regioner, kommuner, sogne, postdistrikter, valgdistrikter, skoledistrikter, grundskoler, veje og adresser med koordinater).

I vores tilfælde stiller Lectio ikke noget data til rådighed på en nem måde, hvorfor vi er tvunget til selv at trække og parse data fra deres hjemmeside. Rent praktisk skriver vi noget programmeringskode, der downloader selve hjemmesiden med ens skema på Lectio ned og behandler/parser alle html-tags igennem for at trække det data, man ønsker.

Strukturen kunne fx se således ud:

<html>
<head><title>Lectio</title></head>
 
<body>
    <table>
        <tr>
        <td>Mandag</td>
        <td>Tirsdag</td>
        <td>Onsdag</td>
        <td>Torsdag</td>
        <td>Fredag</td>
        </tr>
 
        <tr>
        <td>Matematik</td>
        <td>Dansk</td>
        <td>Fysik</td>
        <td>IT</td>
        <td>Historie</td>
        </tr>
    </table>
</body>
</html>

Ud fra ovenstående html-tags gælder det om at finde de steder, hvor der står noget relevant tekst. Rent teknisk skal vi benytte en simpel html parser, så vi slipper for at lave al arbejdet helt fra bunden (Kilde: http://simplehtmldom.sourceforge.net).

For at benytte parseren skal vi inkludere filen i toppen af vores php-fil:

<?php
include('libs/simple_html_dom.php');

Derefter kan vi benytte parseren til at hente Lectio hjemmesiden ned.

$html= file_get_html("https://www.lectio.dk/lectio/256/SkemaNy.aspx?type=laerer&laererid=1426458732");
 
foreach($html->find('tr') as $tr) {
 
    foreach($tr->find('td') as $td) {
 
        $text = $td->text();
 
    }
 
}

I ovenstående eksempel henter vi en side på Lectio og kalder funktionen "find" på indholdet af hjemmesiden. Vi leder efter alle <tr> tags, som betyder table row (en række i en tabel). Derefter kalder vi find efter <td> tags for at få alle celler i en række. Til sidst kalder vi text() funktionen for at få indholdet af cellen.
Kunsten er at analysere indholdet og strukturen af en hjemmeside ved at danne sig et overblik over hvilke html-tags, der er benyttet på siden, og om der eventuelt er benyttet nogle id'er eller class på de forskellige tags. På den måde kan vi søge efter disse elementer i indholdet af hjemmesiden og derefter trække data'et ud.

I kan se den komplette parser til et Lectio skema på følgende addresse: https://github.com/jakobadam/iftek/blob/master/lectio/lectio.php

Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License