Quantcast
Channel: Affiliate Archives - ruudkok.nl
Viewing all articles
Browse latest Browse all 25

Eigen affiliate stats: combineer meerdere netwerken

$
0
0

Veel affiliates werken samen met verschillende netwerken om zo een compleet aanbod op hun sites te kunnen leveren, of bijvoorbeeld om risico’s qua betalingen te spreiden. Echter, als je met meerdere netwerken zaken doet, wordt het wel steeds lastiger om een overzicht te houden van welke campagnes nou goed lopen, en welke niet.

Daarom kan het wenselijk zijn om de statistieken van de verschillende netwerken samen te voegen in een eigen affiliate systeem. Afhankelijk van hoe uitgebreid je het zelf bouwt, kun je dan de voor jou gewenste data naar boven halen. Eerste doelstelling voor mijzelf was om één allesomvattende laatste leads pagina te bouwen, maar nadat deze basis er lag kon ik vrij eenvoudig uitbreidingen maken (daarover later meer).

PHP script om transacties (leads/sales) te downloaden van:
Affilinet
Daisycon
TradeTracker
Zanox

UPDATE: na de overname van M4N door zanox, en het daarmee verdwijnen van het systeem van M4N, is een deel van de ondergenoemde scripts overbodig geworden. In principe werken de scripts van de andere netwerken ook zonder dat je het M4N API systeem opzet, je hoeft dan enkel de database structuur op te zetten.

Als fundament voor mijn eigen statistieken systeem heb ik het API script van M4N genomen. Daarmee kun je alvast de M4N statistieken naar je eigen systeem halen, andere netwerken hoef je dan alleen nog maar toe te voegen, hetgeen ik dan ook allemaal in de m4n_api tabel heb gedaan. Mijn eerste uitbreiding was echter de toevoeging van M4Dart data waardoor ik extra informatie over de binnengekomen leads heb (bij andere netwerken gebruik je hiervoor de subid’s). Kwestie van de leadtabel uitbreiden met de gewenste velden, en het importscript dat de API aanroept iets tweaken.

M4N API interface screenshot

Nadat deze basis er stond, was het een kwestie van andere netwerken toevoegen. Omdat niet elk script even sexy code bevat zal ik hier nu eerst Daisycon, TradeTracker en Affilinet als voorbeeldcode meegeven. Doe er je voordeel mee! 😉

Leads downloaden voor TradeTracker
Allereerst zul je toegang tot de webservices van TradeTracker moeten vragen, de verificatie data kun je vervolgens in regel 7 van het script invoeren:

<?php
$link = mysql_connect($db_host, $db_user, $db_pass) or die ('Error connecting to MySQL');
mysql_select_db($db_name);

$client = new SoapClient('http://ws.tradetracker.com/soap/affiliate?wsdl', array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP));
//vul hieronder je eigen verificatie data in
$client->authenticate(12345, '349dae9097c9809d90f0989ee8790898710ab90c');

//geef hier je eigen site ID's in, enkel leads van de genoemde sites worden opgehaald (je kunt de lijst rustig langer maken)
$siteIDs = array();
$siteIDs[0] = 123;
$siteIDs[1] = 456;
$siteIDs[2] = 789;

$statuses = array();
$statuses[0] = 'pending';
$statuses[1] = 'accepted';
$statuses[2] = 'rejected';

for ($e = 0; $e < count($siteIDs); $e++)
	{
	$affiliateSiteID = $siteIDs[$e];
	$fromdate = date("Y-m-d", strtotime("-3 months"));
	$todate = date("Y-m-d");
	for ($i = 0; $i < count($statuses); $i++)
		{
		$leadstatus = $statuses[$i];
		$options = array (
			'registrationDateFrom' => $fromdate,
			'registrationDateTo' => $todate,
			'transactionStatus' => $leadstatus
		);

		//geef in de database netjes mee van welk netwerk deze leads komen
		$network = 'tradetracker';
		$leadstatuses = array();
		//elk netwerk gebruikt zijn eigen statussen, hieronder worden ze omgezet tot de standaard die het M4N script hanteert
		$leadstatuses['pending'] = 'TO_BE_APPROVED';
		$leadstatuses['accepted'] = 'ACCEPTED';
		$leadstatuses['rejected'] = 'REJECTED';

		foreach ($client->getConversionTransactions($affiliateSiteID, $options) as $transaction)
			{
			$leadid = $transaction->ID;
			$leaddescription = $transaction->description;
			$leadreward = $transaction->commission;
			$leadstatus = $transaction->transactionStatus;
			$leadstatus = $leadstatuses[$leadstatus];

			//Check if lead exists
			$SQL_check="SELECT id FROM m4n_api where id='".$leadid."'";
			$SQL_check_res=mysql_query($SQL_check);
			$SQL_check_aantal=mysql_num_rows($SQL_check_res);

			//Row exists, update row
			if($SQL_check_aantal>0)
				{
				$SQL_update="UPDATE `".$db_name."`.`m4n_api` SET
				description='".$leaddescription."',
				reward='".$leadreward."',
				status='".$leadstatus."'
				WHERE
				id='".$leadid."'
				";
				$SQL_update_res=mysql_query($SQL_update);
				}
			else
				{
				$leadleadtime = $transaction->registrationDate;
				$leadleadtime = str_replace("T", " ", $leadleadtime);
				$leadmerchant = $transaction->campaign->name;
				$leadmerchantid = $transaction->campaign->ID;
				$leadprice = $transaction->orderAmount;
				$hash = $transaction->reference;

				$SQL_insert="INSERT into `".$db_name."`.`m4n_api`
				(
					id,
					leadtime,
					description,
					merchant,
					merchantID,
					price,
					reward,
					status,
					m4dadvn,
					network
				)
				values
				(
					'".$leadid."',
					'".$leadleadtime."',
					'".$leaddescription."',
					'".$leadmerchant."',
					'".$leadmerchantid."',
					'".$leadprice."',
					'".$leadreward."',
					'".$leadstatus."',
					'".$hash."',
					'".$network."'
				)";

				$SQL_insert_res=mysql_query($SQL_insert);
				}
			}
		}
	}
?>


Leads downloaden voor Affilinet
Ook bij Affilinet zul je eerst toegang tot de webservices moeten vragen, en deze verificatie data kun je dan in regel 9 van het Affilinet script invoeren:

<?php
$link = mysql_connect($db_host, $db_user, $db_pass) or die ('Error connecting to MySQL');
mysql_select_db($db_name);

define ("WSDL_LOGON", "https://api.affili.net/V2.0/Logon.svc?wsdl");
define ("WSDL_STATS",  "https://api.affili.net/V2.0/PublisherStatistics.svc?wsdl");

$Username   = '123456'; // the publisher ID
$Password   = 'Mafdsafda5ffoLafafdhP74asfgN1otNo'; // the publisher web services password

$SOAP_LOGON = new SoapClient(WSDL_LOGON);
$Token      = $SOAP_LOGON->Logon(array(
             'Username'  => $Username,
             'Password'  => $Password,
             'WebServiceType' => 'Publisher'
             ));

//Bij affilinet is het aantal leads dat je per request kunt ophalen beperkt, pas je StartDate en EndDate daarop aan (bij meer leads kun dan je meerdere requests doen)
$StartDate = strtotime("-1 months");
$EndDate   = strtotime("-1 minutes");
$Status	= 'All';

$params = array(
		'StartDate' => $StartDate,
		'EndDate' => $EndDate,
		'TransactionStatus' => $Status
        );

$pagesize = array(
		'CurrentPage' => 1,
		'PageSize' => 100
        );

$SOAP_REQUEST = new SoapClient(WSDL_STATS);
$req = $SOAP_REQUEST->GetTransactions(array(
            'CredentialToken' => $Token,
            'TransactionQuery' => $params,
			'PageSettings' => $pagesize
            ));

//geef in de database netjes mee van welk netwerk deze leads komen
$network = 'affilinet';
$leadstatuses = array();
//elk netwerk gebruikt zijn eigen statussen, hieronder worden ze omgezet tot de standaard die het M4N script hanteert
$leadstatuses['Open'] = 'TO_BE_APPROVED';
$leadstatuses['Confirmed'] = 'ACCEPTED';
$leadstatuses['Cancelled'] = 'REJECTED';

if(!empty($req))
	{
	$salescount = $req->TotalRecords;
	//print 'REQUEST SUCCESFUL: '.$salescount.' transactions.<br>';
	if ($salescount > 1)
		{
		for ($e = 0; $e < $salescount; $e++)
			{
			$leadid = $req->TransactionCollection->Transaction[$e]->TransactionId;
			$leaddescription = $req->TransactionCollection->Transaction[$e]->RateInfo->RateDescription;
			$leadreward = $req->TransactionCollection->Transaction[$e]->PublisherCommission;
			$leadstatus = $req->TransactionCollection->Transaction[$e]->TransactionStatus;
			$leadstatus = $leadstatuses[$leadstatus];
			//print $leadid.' - '.$leadstatus.'<br>';

			//Check if lead exists
			$SQL_check="SELECT id FROM m4n_api where id='".$leadid."'";
			$SQL_check_res=mysql_query($SQL_check);
			$SQL_check_aantal=mysql_num_rows($SQL_check_res);

			//Row exists, update row
			if($SQL_check_aantal>0)
				{
				$SQL_update="UPDATE `".$db_name."`.`m4n_api` SET
				description='".$leaddescription."',
				reward='".$leadreward."',
				status='".$leadstatus."'
				WHERE
				id='".$leadid."'
				";
				$SQL_update_res=mysql_query($SQL_update);
				}
			else
				{
				$leadclicktime = $req->TransactionCollection->Transaction[$e]->ClickDate;
				$leadclicktime = str_replace("T", " ", $leadclicktime);
				$leadleadtime = $req->TransactionCollection->Transaction[$e]->RegistrationDate;
				$leadleadtime = str_replace("T", " ", $leadleadtime);
				$leadmerchant = $req->TransactionCollection->Transaction[$e]->ProgramTitle;
				$leadmerchantid = $req->TransactionCollection->Transaction[$e]->ProgramId;
				$leadprice = $req->TransactionCollection->Transaction[$e]->NetPrice;
				$hash = $req->TransactionCollection->Transaction[$e]->SubId;

				$SQL_insert="INSERT into `".$db_name."`.`m4n_api`
				(
					id,
					clicktime,
					leadtime,
					description,
					merchant,
					merchantID,
					price,
					reward,
					status,
					m4dadvn,
					network
				)
				values
				(
					'".$leadid."',
					'".$leadclicktime."',
					'".$leadleadtime."',
					'".$leaddescription."',
					'".$leadmerchant."',
					'".$leadmerchantid."',
					'".$leadprice."',
					'".$leadreward."',
					'".$leadstatus."',
					'".$hash."',
					'".$network."'
				)";

				$SQL_insert_res=mysql_query($SQL_insert);
				}
			}
		}
	else
		{
		$leadid = $req->TransactionCollection->Transaction->TransactionId;
		$leaddescription = $req->TransactionCollection->Transaction->RateInfo->RateDescription;
		$leadreward = $req->TransactionCollection->Transaction->PublisherCommission;
		$leadstatus = $req->TransactionCollection->Transaction->TransactionStatus;
		$leadstatus = $leadstatuses[$leadstatus];
		//print $leadid.' - '.$leadstatus.'<br>';

		//Check if lead exists
		$SQL_check="SELECT id FROM m4n_api where id='".$leadid."'";
		$SQL_check_res=mysql_query($SQL_check);
		$SQL_check_aantal=mysql_num_rows($SQL_check_res);

		//Row exists, update row
		if($SQL_check_aantal>0)
			{
			$SQL_update="UPDATE `".$db_name."`.`m4n_api` SET
			description='".$leaddescription."',
			reward='".$leadreward."',
			status='".$leadstatus."'
			WHERE
			id='".$leadid."'
			";
			$SQL_update_res=mysql_query($SQL_update);
			}
		else
			{
			$leadclicktime = $req->TransactionCollection->Transaction[$e]->ClickDate;
			$leadclicktime = str_replace("T", " ", $leadclicktime);
			$leadleadtime = $req->TransactionCollection->Transaction[$e]->RegistrationDate;
			$leadleadtime = str_replace("T", " ", $leadleadtime);
			$leadmerchant = $req->TransactionCollection->Transaction[$e]->ProgramTitle;
			$leadmerchantid = $req->TransactionCollection->Transaction[$e]->ProgramId;
			$leadprice = $req->TransactionCollection->Transaction[$e]->NetPrice;
			$hash = $req->TransactionCollection->Transaction[$e]->SubId;

			$SQL_insert="INSERT into `".$db_name."`.`m4n_api`
			(
				id,
				clicktime,
				leadtime,
				description,
				merchant,
				merchantID,
				price,
				reward,
				status,
				m4dadvn,
				network
			)
			values
			(
				'".$leadid."',
				'".$leadclicktime."',
				'".$leadleadtime."',
				'".$leaddescription."',
				'".$leadmerchant."',
				'".$leadmerchantid."',
				'".$leadprice."',
				'".$leadreward."',
				'".$leadstatus."',
				'".$hash."',
				'".$network."'
			)";

			$SQL_insert_res=mysql_query($SQL_insert);
			}
		}
	}
else
	{
	print 'AFFILINET LEAD SCRIPT ERROR: EMPTY REQUEST';
	}
?>


Sales downloaden van Daisycon
Bij Daisycon heb je automatisch toegang tot de API, je kunt hiervoor je reguliere gebruikersnaam en het bijbehorende wachtwoord in het PHP script invoeren.

<?php
$link = mysql_connect($db_host, $db_user, $db_pass) or die ('Error connecting to MySQL');
mysql_select_db($db_name);

//voer je gebruikersnaam / wachtwoord in
$sUsername = 'enteryourusername';
$sPassword = 'enteryourpassword';
$sWsdl = "http://api.daisycon.com/publisher/soap/transaction/wsdl/";
$aOptions = array(
	'login'		=> $sUsername,
	'password'	=> md5($sPassword),
	'features'	=> SOAP_SINGLE_ELEMENT_ARRAYS,
	'encoding'	=> 'utf-8',
	'trace'		=> 1,
);

//Bij Daisycon kun je per request data van maximaal 3 maanden ophalen, pas je selection_start en selection_end aan en maak een nieuw request als je meer dan 3 maanden wil downloaden (enkel nodig als je sales langer dan 90 dagen open staan)
$aFilter = array(
	'selection_start'	=> date('Y-m-d', strtotime('-3 months')),
	'selection_end'		=> date('Y-m-d'),
	'offset'			=> 0
);

$oSoapClient = new SoapClient($sWsdl, $aOptions);
$aResult = $oSoapClient->getTransactions($aFilter);

//geef in de database netjes mee van welk netwerk deze leads komen
$network = 'daisycon';

$leadstatuses = array();
$leadstatuses['open'] = 'TO_BE_APPROVED';
$leadstatuses['pending'] = 'TO_BE_APPROVED';
$leadstatuses['confirmed'] = 'ACCEPTED';
$leadstatuses['rejected'] = 'REJECTED';

for ($i = 0; $i < $aResult['responseInfo']->totalResults; $i++)
	{
	//Check if lead exists
	$SQL_check="SELECT id FROM m4n_api where id='".$aResult['return'][$i]->affiliatemarketing_id."'";
	$SQL_check_res=mysql_query($SQL_check);
	$SQL_check_aantal=mysql_num_rows($SQL_check_res);

	if($SQL_check_aantal>0)
		{
		//Row exists, update row
		$SQL_update="UPDATE `".$db_name."`.`m4n_api` SET
		description='".$aResult['return'][$i]->description."',
		reward='".$aResult['return'][$i]->commision."',
		status='".$leadstatuses[$aResult['return'][$i]->status]."'
		WHERE
		id='".$aResult['return'][$i]->affiliatemarketing_id."'
		";

		$SQL_update_res=mysql_query($SQL_update);
		}
	else
		{
		//Insert new row
		$pattern = '/([0-9]{2})-([0-9]{2})-([0-9]{4})[ ]([0-9]{2})[:]([0-9]{2})/';
		$replacement = '$3-$2-$1 $4:$5:00';

		$clicktime = $aResult['return'][$i]->date_click;
		$clicktime = preg_replace($pattern, $replacement, $clicktime);

		$leadtime = $aResult['return'][$i]->date_transaction;
		$leadtime = preg_replace($pattern, $replacement, $leadtime);

		$SQL_insert="INSERT into `".$db_name."`.`m4n_api`
		(
			id,
			clicktime,
			leadtime,
			description,
			ipaddress,
			merchant,
			merchantID,
			price,
			reward,
			status,
			m4dadvn,
			network
		)
		values
		(
			'".$aResult['return'][$i]->affiliatemarketing_id."',
			'".$clicktime."',
			'".$leadtime."',
			'".$aResult['return'][$i]->description."',
			'".$aResult['return'][$i]->ip."',
			'".$aResult['return'][$i]->program_name."',
			'".$aResult['return'][$i]->program_id."',
			'".$aResult['return'][$i]->revenue."',
			'".$aResult['return'][$i]->commision."',
			'".$leadstatuses[$aResult['return'][$i]->status]."',
			'".$aResult['return'][$i]->sub_id."',
			'".$network."'
		)";
		$SQL_insert_res=mysql_query($SQL_insert);
		}
	}
?>


Sales downloaden van Zanox
Bij Zanox moet je sowieso de ApiClient.php nog even downloaden en op je server plaatsen. Verder werkt onderstaand script vergelijkbaar met de eerder genoemde netwerken, zodat alles in 1 database terecht komt.

<?php
require_once('client/ApiClient.php');

$link = mysql_connect($db_host, $db_user, $db_pass) or die ('Error connecting to MySQL');
mysql_select_db($db_name);

$client = ApiClient::factory(PROTOCOL_SOAP);
//vul hieronder je eigen API credentials in
$client->setConnectId('61E8CCD31F914ABBC546');
$client->setSecretKey('1234567/1234abc');
$network = 'zanox';

for ($days = 0; $days < 91; $days++)
	{
	$date = mktime(0,0,0,date(m),date(d)-$days,date(Y));
	$date = date('Y-m-d', $date);
	
	$sales = $client->getSales($date, 'trackingDate', NULL, NULL, NULL, 0, 50);
	//print_r($sales);
	$leadstatuses = array();
	$leadstatuses['open'] = 'TO_BE_APPROVED';
	$leadstatuses['confirmed'] = 'ACCEPTED';
	$leadstatuses['approved'] = 'ACCEPTED';
	$leadstatuses['rejected'] = 'REJECTED';

	$pattern = '/([0-9]{4})-([0-9]{2})-([0-9]{2})[T]([0-9]{2})[:]([0-9]{2})[:]([0-9]{2})\\.([0-9]{3})\\+([0-9]{2})[:]([0-9]{2})/';
	$replacement = '$1-$2-$3 $4:$5:$6';

	for ($i = 0; $i < $sales->total; $i++)
		{
		$leadid = $sales->saleItems->saleItem[$i]->id;
		$clicktime = $sales->saleItems->saleItem[$i]->clickDate;
		$clicktime = preg_replace($pattern, $replacement, $clicktime);
		$leadtime = $sales->saleItems->saleItem[$i]->trackingDate;
		$leadtime = preg_replace($pattern, $replacement, $leadtime);
		$merchant = $sales->saleItems->saleItem[$i]->program->_;
		$merchantid = $sales->saleItems->saleItem[$i]->program->id;
		$leaddescription = $sales->saleItems->saleItem[$i]->trackingCategory->_;
		$leadprice = $sales->saleItems->saleItem[$i]->amount;
		$leadreward = $sales->saleItems->saleItem[$i]->commission;
		$leadstatus = $sales->saleItems->saleItem[$i]->reviewState;
		$leadstatus = $leadstatuses[$leadstatus];
		$hash = $sales->saleItems->saleItem[$i]->gpps->gpp[0]->_;
		
		//Check if lead exists
		$SQL_check="SELECT id FROM m4n_api where id='".$leadid."'";
		$SQL_check_res=mysql_query($SQL_check);
		$SQL_check_aantal=mysql_num_rows($SQL_check_res);

		if($SQL_check_aantal>0)
			{
			//Row exists, update row
			$SQL_update="UPDATE `".$db_name."`.`m4n_api` SET 
			description='".$leaddescription."',
			reward='".$leadreward."',
			status='".$leadstatus."' 
			WHERE 
			id='".$leadid."'
			";

			$SQL_update_res=mysql_query($SQL_update);
			}
		else
			{
			//Insert new row

			$SQL_insert="INSERT into `".$db_name."`.`m4n_api`
			(
				id,
				clicktime,
				leadtime,
				description,
				merchant,
				merchantID,
				price,
				reward,
				status,
				m4dadvn,
				network
			)
			values
			(
				'".$leadid."',
				'".$clicktime."',
				'".$leadtime."',
				'".$leaddescription."',
				'".$merchant."',
				'".$merchantid."',
				'".$leadprice."',
				'".$leadreward."',
				'".$leadstatus."',
				'".trim($hash)."',
				'".$network."'
			)";
			$SQL_insert_res=mysql_query($SQL_insert);
			}
		}
	}

Met deze scripts heb je in ieder geval al 5 netwerken in je eigen affiliate statistieken opgenomen. Uitbreidingen naar andere affiliate netwerken kun je op basis hierval wellicht zelf uitwerken.

Een extra functionaliteit die ik zelf nog heb toegevoegd is een koppeling naar al mijn clicks. Hiervoor sla ik alle uitgaande clicks op inclusief data zoals traffic source, keywords en pagina waarop de click is gedaan. Door de click data te combineren met alle leads, kun je voor jezelf een overzicht maken van de omzet per site, best presterende pagina’s, beste keywords etc. Je kunt het zo gek maken als je zelf wilt, maar belangrijkste is dat je de data boven tafel haalt, waarop je ook daadwerkelijk actie wilt ondernemen.

N.B. Let erop dat bovenstaande PHP scripts aangepast dienen te worden op je eigen situatie. Zelf heb ik voor extra data enkele kolommen in de database toegevoegd; als een script voor jou niet werkt, check dan of alle benodigde kolommen in je database aanwezig zijn.

Eigen affiliate stats: combineer meerdere netwerken is een blogpost van ruudkok.nl.


Viewing all articles
Browse latest Browse all 25

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Imágenes de Robin Hood para colorear


Dino Rey para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Toro para colorear


People Walk Away Quotes, Inspire Quotes


Inspirational Tagalog quotes and Motivational English Quotes


Love Quotes Tagalog


RE: Mutton Pies (mely)


Pokemon para colorear


Winx Club para colorear


Girasoles para colorear


Sapos para colorear


Renos para colorear


Dromedario para colorear


Selos Quotes – Tagalog Love Quotes


Long Distance Relationship Tagalog Love Quotes


Tamis Ng tagumpay


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC