• Home
  • Handleidingen

bol.com product API

 Met de bol url parser kun je gegevens via de bol.com api importeren.

Om te beginnen moet de in de feeds.php een aantal constanten definiëren:

 

define('BOLAPIKEY', 'ABCDEF0123456789'); #API key

define('BOLAFFID', '1091783'); #affilaite ID. Deze staat in het partner account op de pagina 'Account' onder 'Website'

define('BOLAFFNAME', 'BOLLINK');#Rapportage kenmerk (Naam). De parser voegt zelf een subid toe

 

De feed-url die je gebruikt is een gewone bol.com webshop link, voorbeeld (aff). Maar je kunt ook een api.bol.com url gebruiken.

De parser vertaald de informatie uit de url naar API aanvragen.

Dit werkt voor zoekopdrachten, product filters en losse producten.

Dat zijn links die beginnen met:

  • https://www.bol.com/*/nl/s/
  • https://www.bol.com/*/nl/l/
  • https://www.bol.com/*/nl/p/

Waarbij * be of nl is.

 

De informatie die de API teruggeeft is zeer beperkt. Technisch is het mogelijk meer informatie op te halen. Dit geeft echter zeer veel API-aanroepen en  rechtstreeks vanuit de parser geen goed idee

 

Kortingscodefeeds integreren

Daisycon

de kortingscode feed van daisycon kan opgenomen worden als datafeed.

Export voorbereiden

kies in het actiecodes menu je media en zo je wilt landen en categorieen, selecteer ook het filter op 'aanmeld status' = goedgekeurd. Zoeken en dan de programma's selecteren. Kies ook het vinkje onderaan 'Nieuwe actiecodes automatisch toevoegen'. Ga naar het tab 'exporteren' en kies CSV en 'Kolom namen toevoegen' zet het vinkje 'external' aan. Nu krijg je de feed link die je in de component kunt gebruiken. Kies in de component als class 'CSV ; en "'

Feed gebruiken

De inhoud van de feed wijkt wat af van gewone datafeeds. Via de list/text velden onderin de configuratie f een callback filter kun je de description aanvullen met de code en datums.

Integratie met product feeds

Interessant wordt het om bij een product ook de actiecode van die aanbieder te tonen. Dit zou je kunnen doen via een custom mod_datamenu. Dat kan eenvoudig mits de naam in 'program name' binnen de kortingscode feed identiek is aan het veld 'naam' in de feed configuratie van de bijbehorende product feed.

 

 

 

google en affiliate sites

Op hoeveel paarden wed je op de renbaan, spreekwoordelijk in ieder geval op meer dan een. Je hebt meerdere sites, op verschillende servers staan, je promoot meerdere webwinkels via verschillende affiliate netwerken, toch? En toch ben je voor bezoekers volledig afhankelijk van 1 bron: google?

Toegegeven het was en is niet echt makelijk, google heeft een behoorlijke dominantie met meer dan 90% marktaandeel. Nederland is hiermee koploper, zou ‘gratis’ ermee te maken hebben dat we ons volledig afhankelijk hebben gemaakt. (ik tik dit verhaal trouwens in google docs) En het was eigenlijk altijd relatief makkelijk om in ieder geval op de long tail lekker te scoren in google.

Helaas is dat over. Heel veel affiliate sites hebben harde klappen gehad. Toch is het niet helemaal uit de lucht komen vallen, de regels van google over thin-affiliate sites waren al lang duidelijk. Men is ze alleen strengen en concequenter gaan toepassen. Wellicht om ruimte te maken voor hun eigen thin-affiliate sites onder de noemer google shopping? We zijn met zijn alleen verslaafd geraakt aan de gratis diensten van google, maar ook gratis moet ergens zijn geld verdienen.

Daarnaast is er de afgelopen tijd een toename geweest van zowel hobby webmasters die een graantje wilden meepikken als de meer profesionelle sites die hun deel van de markt opeisen. Grote vergelijkingssites, cach-back en kortingscodes sites bieden de bezoeker wat ze willen, informatie en koopjes.  Afgezien dat google het moeilijker maakt is er ook nog eens veel meer concurrentie, zowel in kwantiteit als kwaliteit.

‘content is king’ een site met unieke inhoud scoort goed in google, of scoorde? Het schrijven van unieke inhoud is zo moeilijk niet, dat het een prettig leesbaar verhaal is is een tweede. Het schrijven van unieke informatie is al een stuk lastiger. Welke bezoeker zal het boeien dat op jouw site het duizend-en-eenste verhaaltje over Arabië staat? Google net zo min. Wat gaat jouw site onderscheiden zodat een bezoeker jouw pagina’s gaat bookmarken, liken en tweeten, en zorgt ervoor dat hij nog een keer terugkomt.

Wellcht nog belangrijker dan content is het concept van de site, wat is het USP van je site. Dat geld voor affilaite sites, waar je site in feite je product is. Maak ook sites die een product aan de man proberen te brengen. Wat onderscheid jouw webwinkel?

Het concept hoeft niet zo vernieuwend te zijn als marktplaats een tijdje terug of twitter en facebook.

Geld verdienen zou bij het bedenken van een concept van een site op het tweede plan moeten staan, wat wil ik bieden wat nog nergens anders op deze unieke manier te vinden is.  Uniek als in anders of beter dan de anderen. Er zijn voldoende niches waar de grote vergelijkingssites het laten liggen, kunst is alleen ze te vinden, en er genoeg bezoekers voor te krijgen.

 

Is er nog geld te verdienen met affiliate (feeds). Zekers maar je zult er (weer) hard voor moeten werken. Site/Concept/Content en dan pas cashen. Of een heel briljant idee hebben.

Feeds delen en inkomsten verdelen

Hulp nodig bij het opzetten en beheren van feeds? Vraag naar de mogelijkheden, gratis, betaald of op basis van gemeenschappelijke inzet.

Zelf geen zin of kennis om de feeds te beheren? Het is mogelijk feeds en vooral combinaties van feeds die hier voorgekookt zijn op je eigen site te gebruiken. Dit kan ook op basis van een selectie op category/rubriek bijvoorbeeld alleen tuinmeubelen of reizen naar Afrika

Inclusief support voor het inrichten van de site. De inkomsten worden gedeeld volgens een afgesproken verhouding.

Aan deze kant komt er een export script dat de gewenste items in een feed zet, aan jouw kant importeer je de feed in je site.Omdat alle bewerkingen al gedaan zijn is dit een recht toe recht aan import zonder noemenswaardig onderhoud

 

Feeds  delen en inkomsten verdelen kan op twee manieren

1. via affiliatefeeds.nl/brambring.nl

Alle kliks en dus de leads/sales lopen via de accounts van brambring.nl. Van elke sale krijg je het afgesproken deel. Er komt een overzicht als deze: https://www.gryla.biz/s777.php waar je wel je sales kunt volgen. Periodiek wordt er via een (credit)factuur afrekend.

Voordeel is dat het snel op te zetten is en je hoeft je niet zelf aan te melden voor programma's. Nadeel is dat je minder zicht hebt om de tracking (met name de kliks).

2. via je eigen id's

Volgens de afgesproken verhouding worden in de deeplinks jouw site-ID's geplaatst. Hier worden dus niet de inkomsten verdeelt maar de kliks.

 

 

Gebruik van 404 caching voor afbeeldingen.

Vrijwel alle affiliate productfeeds zijn voorzien van afbeeldingen. De afbeeldingen staan meestal op de server van de webwinkel, in enkele gevallen op de server van het affiliatenetwerk. Het kan aantrekkelijk zijn de afbeeldingen zelf te hosten i.p.v. ze vanaf andere servers te gebruiken:

  1. veel afbeeldingen van verschillende servers kan een trigger voor google zijn: affiliatesite !!!
  2. de afbeeldingen zijn soms erg groot hetgeen in trage pagina’s resulteert.
  3. je kunt de afbeeldingen van een eigen cookie-loos domein aanbieden ( is een advies van google page-speed)

Nu kun je de afbeeldingen allemaal gaan ophalen op het moment dat je de datafeed inleest, de eigenaar van de server zal je dat echter niet in dank afnemen. een interessante optie is het om de plaatjes op te halen als ze nodig zijn en dan locaal op te slaan. Dit mechanisme gebruikt dezelfde truck als ‘404 caching’

Note: er zijn wat problemen in dit artikel met de voorbeelden, joomla knipt nogal wat html code weg. Het kan zijn dat het verhaal daardoor nog iets onbegrijpbaarder is.

De database.

in de database staan 1 of meer tabellen voor de informatie over de items in de feed in opgeslagen staan. Van belang is de tabel met het veld van de afbeelding voorbeeld:

ID,img_url,titel,omschrijving,etc etc

bij gewoon gebruik van de afbeelding plaats je iets als

<img src="/$img_url" border="0" alt="" />

in je code. om over te stappen op eigen afbeeldingen maak je hier van:

<img src="http:/images.example.com/$ID" border="0" alt="" />
 

volgende stap is het '404' gedeelte, dit kan op apache server m.b.v. .htaccess en een error document. Onderstaande voorbeeld gebruikt de rewrite engine:

Rewriteengine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php


de eerste keer dat een afbeelding opgevraagd wordt bestaat deze nog niet en komt 'index.php' in aktie, de volgede keren staat de afbeelding in de 'cache' en gebruikt de webserver deze. Rest nog invulling te geven aan de index.php die de afbeelding ophaalt en bewerkt:

$db_host= “jouw host”;
$db_user= “jouw db user”;
$db_password=“jouw db password”;
$db_database=“jouw db”;
$db_table= “jouw tabel”;

if (!($_resource = mysql_connect( $db_host, $db_user, $db_password, true ))) {
$_errorNum = 2;
$_errorMsg = 'Could not connect to MySQL';
print $_errorMsg;
exit;
}
mysql_select_db( $db_database, $_resource );
$img=(int)$_SERVER['REQUEST_URI']; # int tegen injection
$feed_q="select img from $db_table where id = $img limit 1";
$_feeds=mysql_query($feed_q,$_resource);
@$p=mysql_result($_feeds,0);
if ( ! $p ) {
$p="noimage.jpg";
}
createthumb($p,$img,150,150);

#haalt de afbeelding op ( $name ) maakt er een standaard formaat van
#plaats de afbeelding in de directory en stuurt deze als response
function createthumb($name,$filename,$new_w,$new_h)
{
$src_img=false;
$name=str_replace(array('[',']',' '),array('%5B','%5D','%20'),$name);
$src_img=imagecreatefromstring(file_get_contents($name));
if ( ! $src_img ) {
if (preg_match("/(jpg|jpeg)$/i",$name)){
$src_img=imagecreatefromjpeg($name);
}
if (preg_match("/gif$/i",$name)){
$src_img=imagecreatefromgif($name);
}
if (preg_match("/png$/i",$name)){
$src_img=imagecreatefrompng($name);
}
}
if ( ! $src_img ) {
error_log("No IMAGE $name");
$src_img=imagecreatefromjpeg('noimage.jpg');
}
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
if ($old_x > $old_y)
{
$thumb_w=$new_w;
$thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y)
{
$thumb_w=$old_x*($new_w/$old_y);
$thumb_h=$new_h;
}
if ($old_x == $old_y)
{
$thumb_w=$new_w;
$thumb_h=$new_h;
}
$d_h=$thumb_h > 200?200:$thumb_h;
$dst_img=ImageCreateTrueColor($thumb_w,$d_h);
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
imagejpeg($dst_img,$filename);
header("Content-type: image/jpg");
imagejpeg($dst_img);
imagedestroy($dst_img);
imagedestroy($src_img);
}



Dit is een basic script, als je veel afbeeldingen hebt is het verstandig met sub-mappen te werken; het script lost het probleem van niet bestaande afbeeldingen slechts deels op. Het script zal gewijzigde afbeeldingen niet oppikken; sommige feeds gebruiken dezelfde afbeelding verschillende keren, je zou kunnen overwegen een hash van de image url te gebruiken:

<img src="http:/images.example.com/crc32($img_url)" border="0" alt="" />

en de query om de afbeelding uit de database te halen ook aan te passen. Dit lost ook het probleem op als een product een andere img url krijgt

Selecties filteren en weergeven

Er zijn scenarios denkbaar waar je slechts een deel van het aanbod uit een feed wilt gebruiken, bijvoorbeeld omdat je een site specifiek gericht hebt op een onderwerp. Globaal zijn er twee mogelijklheden

  1. Door middel van een callback functie items die je niet wilt opnemen wegfilteren.
  2. Alles importeren en het menu gebruiken als filter

Hieronder een beschrijving van de methodes aan de hand van voorbeelden.

Algemene configuratie van de feed en menu

Stel we hebben een site over 'wijn' en willen daarbij een lijst met  boeken over  wijn  weergeven.

Allereerst met er een leverancier met een geschikte feed gevonden worden. Daisycon bijvoorbeeld heeft boek.net en bruna met datafeeds in het programma zitten. De feed van boek.net is megagroot bevat veel niet gerelateerde producten en bovenal bevat geen rubricering, we kunnen dus niet bepalen welke boeken in de rubriek 'wijn' thuishoren.

De feed van bruna is hanteerbaarder in heeft ook een rubricering waar we wellicht iets me kunnen. Bij de invoer van de feed is het ivm de performance verstandig het csv formaat te kiezen. In de ruwe data zien we dat het veld category gevuld is met termen als 'boek' en 'ebook' geen nuttige info voor onze filter akties. De sub_category bevat echter wel termijn die nuttig zijn. In de field selectie nemen we dan ook de sub_category als 'Select 1', voor 'Select 0' is dan Boeken een voor de hand liggende keuze.

Met een import wordt nu de complete datafeed  ingeladen.

Maak een nieuw menu item aan om de boeken weer te geven. Voer bij 'Main Selection' het Select 0 in met als parameter Boeken

Het menu zal nu alle boeken uit de database weergeven. Als je het menu op de front end bekijkt zie je een enorm lange lijst, dit komt deels doordat er veel rubrieken 'Engelstalig' zijn, m.b.v. van de callback functie die we toch gaan maken kunnen we de Engelse boeken een niveau lager zetten (zie script aan einde van de pagina).

Na een nieuwe import is de lijst korten en zien we er een rubriek 'Wijn en Dranken' is. Dit zijn de boeken waar we in geïnteresseerd zijn. Om het wat fraaier te maken herschrijven we de naam naar Wijn in de callback functie. De indeling bij Bruna is niet fijner dan 'Wijn en dranken'. Het is dus niet goed mogelijk alleen de wijn boeken eruit te filteren. Wel zou je in de titel kunnen gaan zoeken naar termen die niets met wijn te maken hebben zoals Wiskey.

Filteren in het menu

Zoals beschreven in de inleiding kunnen we nu verschillende kanten op:filteren van de items bij de import d.m.v. een callback  filteren met het menu.

Eerst het tweede geval, filteren met het menu. Onder het Advenced tab is een tweede filter. Hier kunnen we dan filteren op Select1 met als keuze Wijn ( als er alleen datafeeds met boeken zijn kun je ook het eerste filter op boeken laten vervallen en daar Select1 -> Wijn van maken)

Het idee van bovenstaande opzet is dat je twee menu's aanmaakt, eentje met de wijn boeken, en daaronder een menu met alle boeken, je bent toch al bezig met importeren en dan zou je kunnen overwegen die items ook maar te laten zien.

de boeken demo site demonstreert dit (in een andere volgorde), hoofdmenu is 'boeken' submenu is wijn. Daarbij zit ook nog een sub-menu naar het bier. Dit is een deeplink binnen het boeken menu. Dat is de derde mogelijkheid om te selecteren: maak een menu item aan op een onopvallende plek ( of in een onzichtbaar menu) en maak dan in het hoofdmenu een deeplink-menuitem ( externe link) aan.

Filteren bij de import

In het geval dat je de overige boeken helemaal niet wilt importeren kun je ze ook volledige weg filteren door in de callback functie het item te wissen.

de callback functie bruna2_cb verzorgt dit. Dit script filtert alle boeken uit de rubrieken met de term wijn of bier. Daarnaast kijkt het in de titel van de boeken naar bekende drank termen of zelf subrubrieken te maken.

drank boeken demo

 

Meer feeds

als je nog andere (boeken) feeds gaat toevoegen kun je stukken van de callback gaan hergebruiken. voorbeeld hiervan is het stukje 'hernoem_drank in onderstaand voorbeeld.

Callback voorbeeld regio's

Een veel voorkomend probleem in feeds zijn de verschillende schrijfwijzen, bijvoorbeeld in reizen en vakantie feeds worden landen en regio's op verschillende wijzen geschreven.  Neem bijvoorbeeld

 

'Vierwaldstaettersee' versus 'Vierwoudstedenmeer' of 'Saasdal' en 'Saasdal Noord'

 

Bovenstaande zijn twee voorbeelden van veel voorkomende problemen in de vakantie feeds, verschillende schrijfwijzen voor hetzelfde, of varianten van regio's. zoals twee regio's die elkaar overlapen en die je wellicht toch als 1 wilt presenteren. Onderstaande script geeft een illustratie hoe deze twee problemen op te lossen zijn.

 

Read more …Callback voorbeeld regio's

Referentie tracking

Verschillende aanbieders hebben de mogelijkheid om een referentie of subid mee te geven. Ermee kun je van een click of sale zijn waar deze vandaag komt.

Voor de bekende aanbieders wordt de referentie meegegeven.

Werkt je met andere feeds gebruik dan DF-REF. Deze wordt omgezet in iets als  S015-I119389-C46-Broek-van-levis

De S<waaarde> is een numeriek waarde, om deze toe te voegen aan de feeds plaats je in de feeds.php een definitie:

define("M4DART",015 ); 

elke site geeft je hiermee een uniek nummer, welke feed je ook gebruik van welke aanbieder het S nummer is voor een site altijd hetzelfde.

note: de M4DART was  iets specifieks voor m4n, het wordt in de component echter generiek gebruikt om elke site te identificeren.

 

Als je een eigen tracking wilt gebruiken, kun je dus de DF-REF toevoegen.

Tradetracker

Gebruik DF-REF als refentie in de feed link generator

Daisycon

Voeg &ws=DF-REF toe aan de feed url of vul DF-REF in als Sub id in de feed link generator

 

 

 

 

Referentie tracking uitschakelen

define('DF_SKIP_DFREF',true);

'eenvoudige' feeds

De ene feed is eenvoudiger te gebruiken dan de ander. Naast technische problemen zoals verkeerde coderingen kan hem dat ook zitten in bijvoorbeeld het gebruik van bijzondere indelingen van de categorieen.

 

Onderstaande een lijst met selectie van feeds die eigenlijk zonder problemen te gebruiken zijn. Soms geeft de feed bij de ene aanbieder wel problemen maar bij een ander niet. Kwestie van proberen. Vrijwel alle feeds ook de eenvoudige hebben een soort van verwerking nodig, ook een feed die op zich prima is gaat op bijvoorbeeld fashionsales door een rename script heen, om ervoor te zorgen dat schrijfwijzen van producten en rubrieken identiek zijn ( dames, woman, women, ladies). (en ja op die site is het ook niet perfect...)