Navigatie

Facebook Marketing Product API XML feed Scripts & projects

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. 
Opdrachtgever:
Meceda te Assen
Talen:
PHP, XML
Oplevering:
Winter 2016
Facebook Marketing Product API XML feed

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']) ? 0intval($_GET['limit']),
        
'file'            => preg_replace('/[^[:alnum:]|_]/'nullstrtolowerpathinfo($REQUEST_URIPATHINFO_FILENAME) ) ),
        
'type'            => preg_replace('/[^[:alnum:]]/'nullstrtolowerpathinfo($REQUEST_URIPATHINFO_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(), ) . "</pre>";
}