Foto Rasbak (CC-BY)
Aan de eicodes kunnen fipronil-eieren herkend worden.

Fipronil op de kaart: zo vond ik de getroffen bedrijven

Een van mijn taken als liaison bij NRC is bedenken wat ik online kan toevoegen aan artikelen uit de krant. Afgelopen week was één van die artikelen een profiel van Chickfriend, het bedrijf dat de spil vormt in de fipronil-crisis.Wat zou hier geschikte verrijking zijn? Een tijdlijn, een kaart? En waarvan dan?

Een kaart van de bedrijven waar fipronil is aangetroffen leek me wel wat. Dat zou immers kunnen laten zien hoe Chickfriend in het hele land klanten wist te werven, maar ook welke regio’s het zwaarst getroffen werden.

Eén probleem: de getroffen bedrijven waren niet bekend. De NVWA publiceerde bewust alleen de eicodes van mogelijk besmette eieren, om de bedrijven buiten schot te houden. (Om dezelfde reden zal ik hier niet in te veel detail treden)

Wat probeer ik te vinden?

Elke eicode is als volgt opgebouwd: X-NL-XXXXX-XX, met als eerste een getal dat aangeeft wat voor eieren het zijn (biologisch, vrije uitloop, etc), dan de landcode voor Nederland, dan een getal voor het bedrijf en tot slot twee cijfers die meestal een stalnummer vormen. Het zou toch mogelijk moeten zijn om die codes tot bedrijven te herleiden… Spoiler alert: het is gelukt. Met de gevonden codes kon ik deze kaart maken, waarop te zien is hoe de Fipronil-crisis landelijk is, maar vooral in de buurt van Barneveld veel schade veroorzaakt.

Hoe dan?

Na wat zoekwerk ontdekte ik twee opties. Er is een Duitse site waarop je een eicode kunt opzoeken en een app van o.a. keuringsinstantie IKB-ei. Op de Duitse site probeerde ik een paar codes op te zoeken, maar dat ging tamelijk klungelig. Met de app ging het iets beter.

Ik had niet heel veel zin om ruim 180 codes in te typen in die (vrij slechte) app. Dan liever scrapen. Maar hoe?

De app had een internetverbinding nodig om een eicode op te zoeken. Blijkbaar zocht de app de code dus op, vermoedelijk in een api. Als ik erachter kon komen waar en hoe die request gedaan werd, kon ik een script schrijven om snel alle codes op te zoeken.

Android-app afluisteren

Mijn eerste idee (naar een tip van collega Rik Wassens) was om de Androidversie van de app te installeren in een virtual machine op mijn computer, een soort gesimuleerde Androidtelefoon. Die virtual machine aanmaken lukte met wat moeite, maar de app wilde vervolgens niet draaien.

Toen ontdekte ik het programma BlueStacks, een kant-en-klare Android-simulator. Daarop lukte het wel de app te installeren. Om de url van de api-request te achterhalen, wilde ik Wireshark gebruiken. Dat is een programma waarmee je al het internetverkeer van je computer kunt ‘afluisteren’. Hopelijk zou ik dan te zien krijgen hoe de eicode-app informatie ophaalde. Met Wireshark aan voerde ik een code in in de app. Fijne verrassing: in BlueStacks werd het resultaat weergegeven in een browserscherm dat niet helemaal goed was vormgegeven, waardoor de url gewoon te zien was. Heel Wireshark had ik dus niet nodig. En toen kwam alles weer samen, want de app haalde zijn informatie van die eerdergenoemde Duitse website.

Nu ik de url had kon ik de eicodes scrapen. Ik schreef een Python-script om elke code op te zoeken. De lijst met codes kwam van de NVWA, maar daar stonden geen volledige codes. Zowel het eerste cijfer (het soort ei) als de laatste twee (het stalnummer) miste vaak.

Het missende stalnummer bleek geen probleem, want opzoeken in de api werkte ook als er op die plaats ‘xx’ stond.

Het eerste ontbrekende getal was wél nodig. Gelukkig zijn daar niet veel opties voor: 0, 1, 2 of 3. Ik kon dus een vrij onelegante oplossing gebruiken. Eerst zocht ik alle codes op met begincijfer 0, vervolgens nog eens allemaal met begincijfer 1, etc, tot ik alle codes in alle mogelijke combinaties had gezocht.

172 gevonden Fipronil-codes

Dit leverde uiteindelijk 172 resultaten op, van de 187 eicodes op de lijst. Van elke code had ik nu het achterliggende pluimveebedrijf én de plaats waar dat bedrijf zit. Er zaten nog wel dubbelingen tussen, van bedrijven die bijvoorbeeld met meerdere stallen op de lijst stonden, of bedrijven een zowel biologische- als vrijeuitloopeieren produceren. Ook stond hetzelfde bedrijf soms op twee nét verschillende manieren gespeld. Ik moest de data dus een beetje netter maken. Daarna kon ik het aantal bedrijven per plaats bepalen (met een pivot table) en een kaart genereren in LocalFocus.

Geheimtipje voor LocalFocus: in de tooltip op een nieuwskaart kun je maar één waarde weergeven, bijvoorbeeld de plaats of het aantal, maar niet allebei. Om dat tóch te krijgen kun je een extra kolom toevoegen aan je spreadsheet waarin je de tekst voor de tooltip zet. Met de Excel-functie =CONCATENATE plak je meerdere stukjes tekst aan elkaar. In dit geval plakte ik de plaatsnaam en het aantal bedrijven achter elkaar, met een dubbele punt en een spatie ertussen. Misschien is het obvious, maar ik vond het wel slim van mezelf.

Ik ben trouwens niet de eerste die de bedrijven wist te achterhalen waar Fipronil is aangetroffen. Zo’n tien minuten nadat het gelukt was kwam ik erachter dat RTL op vrijwel precies dezelfde manier achter dezelfde informatie is gekomen, maar dan een week eerder. Applausje voor RTL.

2 reacties op “Fipronil op de kaart: zo vond ik de getroffen bedrijven”

  • perry schreef:

    Leuk!

    Overigens hebben wij op bíjna dezelfde manier de boerderijen achterhaald. Ik ben iets minder handig met de techniek 🙂
    We hebben ze wel één voor één ingetoetst 🙂
    In het kader van vele handen maken licht werk.
    Groet en succes!
    Perry (chef economie RTL)

    • Wouter van Dijke schreef:

      Hi Perry!
      Dat moet een rotklusje zijn geweest, complimenten daarvoor. Voor de volgende keer misschien toch eens verdiepen in Python? 😉

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *