Zoeken op Blue 2 Blond

Facebook Marketing Product API XML feed

logo

Voor een auto-portal, diende een ATOM XML feed gerealiseerd te worden met als doel dat de auto's als advertenties terug kunnen komen binnen Facebook. Alternatieven naast ATOM XML waren CSV, TSV of RSS XML.

Lees verder
Opdrachtgever:
Meceda te Assen
Talen:
PHP, XML
Oplevering:
Winter 2016

Het script is voor deze specifieke klant dusdanig opgezet, dat er naast een Facebook toepassing, eenvoudig andere classes aan gehangen kunnen worden, om al dan niet met andere API's te koppelen. Ook is het script voorzien van een caching mechanisme, om gezien de database-omvang onnodige queries te voorkomen.
Daarnaast is het gewenste doel (in dit geval Facebook) als ook extensie (in dit geval XML), te bepalen door een specifieke url aan te roepen, bijvoorbeeld domein.nl/feed/facebook.xml of juist domein.nl/feed/facebook.json. Dit is gedaan in cominatie met de volgende htaccess-regels:

          RewriteCond % !(index\.php)$ [NC]  RewriteRule .+ index.php [L]

Op basis van de url zal de juiste class worden geladen en het gevraagde product worden gegenereerd. Indien een specifieke extensie voor de toepassing niet aanwezig is, zal er een Exception worden gegenereerd.

PHP voorbeeld code voor Facebook XML

Voorbeeld code (waarin de wpdb-variabele verraadt dat het om een Wordpress-toepassing gaat):

<?php  

$REQUEST_URI
= parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

$params = array
(
'limit' => empty($_GET['limit']) ? 0: intval($_GET['limit']),
'file' => preg_replace('/[^[:alnum:]|_]/', null, strtolower( pathinfo($REQUEST_URI, PATHINFO_FILENAME) ) ),
'type' => preg_replace('/[^[:alnum:]]/', null, strtolower( pathinfo($REQUEST_URI, PATHINFO_EXTENSION) ) ),
);

try {

if ( !
file_exists($params['file'] . '.php') && $params['file'] != 'index' ) // 'cause I am the index
throw new Exception( 'Not supported' );

require
'abstract.Feed.php';
require
$params['file'] . '.php';

global
$wpdb;
$params['class'] = ucfirst( $params['file'] );

$feed = new $params['class']( $wpdb, $params['type'], $params['limit'] );
$feed->loadCars();

$feed->setHeaders();
echo
$feed->getContent();
exit;

} catch (
Exception $e) {

// something critical went wrong, solution required
echo '<pre><strong>' . $e->getMessage() . '</strong><hr />';

// show complete log
echo "\r\nComplete log:\r\n" . print_r( $feed->getLogs(), 1 ) . "</pre>";
}