Talentree gebruikt een MYSQL database. De inhoudelijke data (de trees) zijn opgeslagen in de Nested set Setup. De library gebruikt om data te behandelen/opslaan/verwerken: Baum. Momenteel worden er voor iedere branche een aparte tabellen aangemaakt:
De huidige branches die worden ondersteund:
Naast bovenstaande branches is er één losse structuur voor alle globale zaken. Dit is:
The API ontsluit alle data die in bovenstaande tabellen is opgenomen. Eigenschappen van de api:
API documentatie en test interface is te vinden op Api documentatie
Er is een client library gebouwd ter ondersteuning van gebruikers van talentree. Deze library is een wrapper om Guzzle HTTP library om snel en makkelijk requests te doen naar de API. Naast deze wrapper maakt deze library het leven iets makkelijker door:
Download de laatste versie via: Github of via Packagist
composer require "viancen/talentree-client"
Eerst heb je een API-Key nodig, vraag deze aan via info@talentree.io. In de package zit een voorbeeld configuratie bestand (documentation/talentree-config.php). Deze dien je toe te voegen aan je applicatie. Onderstaande configuratie is een voorbeeld. Het is altijd de bedoeling dat Inforvision een basis setup doet / deze configuratie naar gelang de behoefte van de klant deze data levert, tenzij de klant zelf een interpertatie doet of de standaard library niet gebruikt.
1 <?php 2 /** 3 * You should set the parts of Talentree you want to use. An example of how this configuration works 4 */ 5 $config = [ 6 'apiKey' => 'YOUR_API_KEY', 7 'apiRoot' => 'https://talentree.io/v1/ict', //only for internal use 8 'apiOptions' => [ 9 'settings' => [ 10 25 => [ 11 'id' => 25, 12 'icon' => 'fa fa-bookmark', 13 'name' => 'Functierol', 14 'items' => [ 15 [ 16 'id' => 25, 17 'name' => 'Functierol' 18 ] 19 ] 20 ], 21 17 => [ 22 'id' => 17, 23 'icon' => 'fa fa-bolt', 24 'name' => 'Functiegebied', 25 'items' => [ 26 [ 27 'id' => 17, 28 'name' => 'Functiegebied' 29 ] 30 ] 31 ], 32 1738 => [ 33 'id' => 1738, 34 'icon' => 'fa fa-briefcase', 35 'name' => 'Kennisgebieden', 36 'items' => [ 37 [ 38 'id' => 1738, 39 'name' => 'Kennisgebieden' 40 ] 41 ] 42 ], 43 11 => [ 44 'id' => 11, 45 'icon' => 'fa fa-cog', 46 'name' => 'Vaardigheden', 47 'items' => 'all-children' 48 ], 49 37 => [ 50 'id' => 37, 51 'icon' => 'fa fa-flask', 52 'name' => 'Methoden', 53 'items' => [ 54 [ 55 'id' => 37, 56 'name' => 'Methoden' 57 ] 58 ] 59 ], 60 604 => [ 61 'id' => 604, 62 'icon' => 'fa fa-male', 63 'name' => 'Persoonlijke eigenschappen', 64 'items' => [ 65 [ 66 'id' => 604, 67 'name' => 'Persoonlijke eigenschappen' 68 ] 69 ] 70 ] 71 ], 72 'filter_settings' => [ 73 25 => 'Functierol', 74 17 => 'Functiegebied', 75 1738 => 'Kennisgebieden', 76 11 => 'Vaardigheden', 77 37 => 'Methoden', 78 ] 79 ] 80 ]; 81
Eerste stap is connectie maken met de api en een instantie starten van \TalentreeClient
en een de lijsten met subitems uit de configuratie op te halen.
1 <?php 2 include __DIR__.'/vendor/autoload.php'; 3 include __DIR__.'/talentree-config.php'; 4 5 $talentree = new TalentreeClient($config['apiKey'],$config['apiRoot'],$config['apiOptions']); 6 7 /** 8 * haalt de 'settings' node uit de configuratie op en haalt voor ieder hoofditem 9 * alle children op. 10 */ 11 $array = ($talentree->getSettingLists()); 12 var_export($array);
Bovenstaande zal resulteren in een array van alle items onder de gedefinieerde hoofdgroepen in de configuratie zoals Functierol
Het parsen van een CV is redelijk eenvoudig met de volgende stappen:
1 <?php 2 include __DIR__ . '/vendor/autoload.php'; 3 include __DIR__ . '/talentree-config.php'; 4 5 $talentree = new TalentreeClient($config['apiKey'], $config['apiRoot'], $config['apiOptions']); 6 7 /** 8 * Talentree verwacht een bestandsnaam en de base64 gecodeerde inhoud van het bestand. 9 * 10 */ 11 $resumeData = [ 12 'filename' => 'Resume_2016_JanJanssen.pdf', //PDF,DOCX,DOC,XLSX,RTF,TXT 13 'base64source' => base64_encode(file_get_contents(__DIR__ . '/uploads/Resume_2016_JanJanssen.pdf')), 14 ]; 15 16 $array = ($talentree->parseResume($resumeData)); 17 18 var_export($array);
Bovenstaande zal resulteren in de volgende response:
1 <?php 2 array( 3 'talentree' => 4 array( 5 'idList' => 6 array( 7 0 => 9, 8 1 => 10, 9 2 => 11, 10 3 => 287, 11 4 => 281, 12 5 => 288, 13 6 => 1893, 14 7 => 2484, 15 8 => 502, 16 9 => 1551, 17 10 => 514, 18 11 => 604, 19 12 => 1454, 20 13 => 1500, 21 14 => 1455, 22 15 => 1519, 23 16 => 1520, 24 17 => 1569, 25 18 => 1570, 26 19 => 1571, 27 20 => 2238, 28 21 => 2239, 29 22 => 2464, 30 23 => 2781, 31 ), 32 'results' => 33 array( 34 1520 => 35 array( 36 'id' => 1520, 37 'name' => 'Verantwoordelijk', 38 'long_name' => NULL, 39 'count' => 3, 40 ), 41 9 => 42 array( 43 'id' => 9, 44 'name' => 'Functie', 45 'long_name' => NULL, 46 'count' => 3, 47 ), 48 1570 => 49 array( 50 'id' => 1570, 51 'name' => 'Nederlands', 52 'long_name' => '', 53 'count' => 3, 54 ), 55 2239 => 56 array( 57 'id' => 2239, 58 'name' => 'Frans', 59 'long_name' => NULL, 60 'count' => 3, 61 ), 62 2238 => 63 array( 64 'id' => 2238, 65 'name' => 'Duits', 66 'long_name' => NULL, 67 'count' => 3, 68 ), 69 1571 => 70 array( 71 'id' => 1571, 72 'name' => 'Engels', 73 'long_name' => '', 74 'count' => 3, 75 ), 76 10 => 77 array( 78 'id' => 10, 79 'name' => 'Branche', 80 'long_name' => NULL, 81 'count' => 2, 82 ), 83 2781 => 84 array( 85 'id' => 2781, 86 'name' => 'Zakelijke dienstverlening', 87 'long_name' => NULL, 88 'count' => 2, 89 ), 90 1893 => 91 array( 92 'id' => 1893, 93 'name' => 'Software', 94 'long_name' => '', 95 'count' => 1, 96 ), 97 1500 => 98 array( 99 'id' => 1500, 100 'name' => 'Concluderend', 101 'long_name' => NULL, 102 'count' => 1, 103 ), 104 514 => 105 array( 106 'id' => 514, 107 'name' => 'Ms Word', 108 'long_name' => NULL, 109 'count' => 1, 110 ), 111 288 => 112 array( 113 'id' => 288, 114 'name' => 'Assistent', 115 'long_name' => '', 116 'count' => 1, 117 ), 118 281 => 119 array( 120 'id' => 281, 121 'name' => 'Medewerker (algemeen)', 122 'long_name' => '', 123 'count' => 1, 124 ), 125 2464 => 126 array( 127 'id' => 2464, 128 'name' => 'Spaans', 129 'long_name' => NULL, 130 'count' => 1, 131 ), 132 11 => 133 array( 134 'id' => 11, 135 'name' => 'Vaardigheden', 136 'long_name' => '', 137 'count' => 1, 138 ), 139 ), 140 ),
Dit resultaat dient vervolgens te worden ge-interpeteerd via de frontends configuratie. Hiervoor is een functie aanwezig in de library die de resultaten van TT omzet naar een tussenformaat wat we later weer gebruiken. Een voorbeeld hiervan:
1 <?php 2 include __DIR__ . '/vendor/autoload.php'; 3 include __DIR__ . '/talentree-config.php'; 4 5 $talentree = new TalentreeClient($config['apiKey'], $config['apiRoot'], $config['apiOptions']); 6 7 /** 8 * Talentree verwacht een bestandsnaam en de base64 gecodeerde inhoud van het bestand. 9 * 10 */ 11 $resumeData = [ 12 'filename' => 'Resume_2016_JanJanssen.pdf', //PDF,DOCX,DOC,XLSX,RTF,TXT 13 'base64source' => base64_encode(file_get_contents(__DIR__ . '/uploads/Resume_2016_JanJanssen.pdf')), 14 ]; 15 16 /** 17 * get default tt data 18 */ 19 $array = $talentree->parseResume($resumeData); 20 21 /** 22 * Zie sortResults in library. 23 * @description 24 * 25 * 1. Loopt door alle settings (uit config heen) 26 * 2. Haalt van iedere setting (op 1e niveau) alle childs op OF 27 * wanneer er childs zijn gedefineerd: alleen die childs met /flat-tree/ dus platte array 28 * 3. Loopt door iedere subboom / child hierboven heen 29 * 4. Als recognizable = false, wordt deze verwijderd 30 * Als het id van de Child niet voorkomt in de idList van het resultaat wordt deze vewijderd 31 * Wat er overblijft zijn ALLE nodes die onder de instelling vallen EN herkend zijn 32 * Van deze nodes wordt de beschrijving toegevoegd (wat niet in de parser zit) 33 * De resultaten worden gesorteerd op basis van de herkende scores (dus count) 34 * 5. De scores worden omgezet naar procentuele weergave (de maximale score = 100% en relatief daarvan de rest) 35 * Deze resultaten worden verrijkt met bv label uit instellingen en icon. 36 * 37 */ 38 $hrResult = $talentree->sortResults($array); 39 40 var_export($hrResult);
Bovenstaande actie resulteert in het volgende:
1 <?php 2 array( 3 'Vaardigheden' => 4 array( 5 'Software' => 6 array( 7 0 => 8 array( 9 'item' => 10 array( 11 'id' => 514, 12 'name' => 'Ms Word', 13 'long_name' => NULL, 14 'count' => 1, 15 ), 16 'score' => 50, 17 'icon' => 'fa fa-cog', 18 ), 19 1 => 20 array( 21 'item' => 22 array( 23 'id' => 1893, 24 'name' => 'Software', 25 'long_name' => '', 26 'count' => 1, 27 ), 28 'score' => 50, 29 'icon' => 'fa fa-cog', 30 ), 31 ), 32 ), 33 'Persoonlijke eigenschappen' => 34 array( 35 'Persoonlijke eigenschappen' => 36 array( 37 0 => 38 array( 39 'item' => 40 array( 41 'id' => 1520, 42 'name' => 'Verantwoordelijk', 43 'long_name' => NULL, 44 'count' => 3, 45 ), 46 'score' => 100.0, 47 'icon' => 'fa fa-male', 48 ), 49 1 => 50 array( 51 'item' => 52 array( 53 'id' => 1500, 54 'name' => 'Concluderend', 55 'long_name' => NULL, 56 'count' => 1, 57 ), 58 'score' => 33.0, 59 'icon' => 'fa fa-male', 60 ), 61 ), 62 ), 63 );
In bovenstaand resultaat zijn alle herkende zaken die niet terugkomen in de instellingen verwijderd. En is er een resultaatset gemaakt met - en gesorteerd op - procentuele score. Hiermee zou dan een presentatie gedaan kunnen worden van bijvoorbeeld een CV op een vacaturebank:
1 <?php 2 include __DIR__ . '/vendor/autoload.php'; 3 include __DIR__ . '/talentree-config.php'; 4 5 ini_set('xdebug.var_display_max_depth', -1); 6 ini_set('xdebug.var_display_max_children', -1); 7 ini_set('xdebug.var_display_max_data', -1); 8 9 $talentree = new TalentreeClient($config['apiKey'], $config['apiRoot'], $config['apiOptions']); 10 11 /** 12 * Talentree verwacht een bestandsnaam en de base64 gecodeerde inhoud van het bestand. 13 * 14 */ 15 $resumeData = [ 16 'filename' => 'Resume_2016_JanJanssen.pdf', //PDF,DOCX,DOC,XLSX,RTF,TXT 17 'base64source' => base64_encode(file_get_contents(__DIR__ . '/uploads/Resume_2016_JanJanssen.pdf')), 18 ]; 19 20 /** 21 * get default tt data 22 */ 23 $array = $talentree->parseResume($resumeData); 24 //var_dump($array); 25 /** 26 * Zie sortResults in library. 27 * @description 28 * 29 * 1. Loopt door alle settings (uit config heen) 30 * 2. Haalt van iedere setting (op 1e niveau) alle childs op OF 31 * wanneer er childs zijn gedefineerd: alleen die childs met /flat-tree/ dus platte array 32 * 3. Loopt door iedere subboom / child hierboven heen 33 * 4. Als recognizable = false, wordt deze verwijderd 34 * Als het id van de Child niet voorkomt in de idList van het resultaat wordt deze vewijderd 35 * Wat er overblijft zijn ALLE nodes die onder de instelling vallen EN herkend zijn 36 * Van deze nodes wordt de beschrijving toegevoegd (wat niet in de parser zit) 37 * De resultaten worden gesorteerd op basis van de herkende scores (dus count) 38 * 5. De scores worden omgezet naar procentuele weergave (de maximale score = 100% en relatief daarvan de rest) 39 * Deze resultaten worden verrijkt met bv label uit instellingen en icon. 40 * 41 */ 42 $hrResult = $talentree->sortResults($array); 43 44 /** 45 * Geeef de data weer in een tabel 46 */ 47 48 foreach ($hrResult as $hoofdGroep => $items) { 49 50 //get icon... 51 $icon = ''; 52 foreach ($items as $subGroep => $subItems) { 53 if (empty($subItems)) continue 2; 54 foreach ($subItems as $talent) { 55 $icon = $talent['icon']; 56 break 2; 57 } 58 } 59 ?> 60 <h3><i class="<?php echo $icon ?>"></i> <?php echo $hoofdGroep ?></h3> 61 <?php foreach ($items as $subGroep => $subItems) { ?> 62 <table class="table table-default table-bordered table-conensed table-hover "> 63 <thead> 64 <tr> 65 <td><strong><?php echo $subGroep ?></strong></td> 66 <td><strong>Ervaring/kunde</strong></td> 67 </tr> 68 <tr> 69 <td></td> 70 <td> 71 <i class="fa fa-minus-circle"></i> 72 <i class="fa fa-plus-circle pull-right"></i> 73 </td> 74 </tr> 75 </thead> 76 <tbody> 77 <?php 78 foreach ($subItems as $talent) { 79 ?> 80 <tr id="talentree-row-<?php echo $talent['item']['id'] ?>"> 81 <td width="300"><?php echo $talent['item']['name'] ?></td> 82 <td class="text-center" width="50"><?php echo $talent['score'] ?></td> 83 </tr> 84 <?php } 85 ?> 86 </tbody> 87 </table> 88 <?php } 89 } 90 ?>