/bazaarvoice-feed

A PHP library for generating Bazaarvoice XML Product and Interaction Feeds.

Primary LanguagePHPMIT LicenseMIT

Bazaarvoice Product and Interaction feed Library

Latest Version on Packagist Software License Total Downloads Build Status Coverage Status

A PHP library for generating and sFTPing XML Bazaarvoice Feeds.

Install

Via Composer

$ composer require leroy-merlin-br/bazaarvoice-feed

Usage

Creating a Feed.

$productFeed = new \BazaarVoice\Product\Feed();

Creating a feedElement

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

Creating an Incremental feed.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed', true);
$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed')
  ->setIncremental(true);

Creating products and adding them to a feed.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

$productElement = $productFeed->newProduct('my_product', 'My Product', 'product_category_123', 'http://www.example.com/my-product', 'http://www.example.com/images/my-product.jpg');
$feedElement->addProduct($product_element);

$moreProducts = [];

$secondProduct = $productFeed->newProduct('second_product', 'Second Product', 'product_category_456', 'http://www.example.com/second-product', 'http://www.example.com/images/second-product.jpg');
  ->setDescription('This is my second product')
  ->addPageUrl('http://www.example.es/second-product', 'es_SP')
  ->setBrandId('my_brand_123')
  ->addUPC('012345');
  
$moreProducts[] = $secondProduct;

$moreProducts[] = $productFeed->newProduct('third_product', 'Third Product', 'product_category_789', 'http://www.example.com/third-product', 'http://www.example.com/images/third-product.jpg')
  ->addISBN('123-456-7890')
  ->addPageUrl('http://www.example.co.uk/third-product', 'en_UK')
  ->addCustomAttribute('PRODUCT_FAMILY', 'example_products');

$feedElement->addProducts($moreProducts);

Creating categories and adding them to a feed.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ...

$categoryElement = $productFeed->newCategory('my_category', 'My Category', 'http://www.example.com/my-product');
$feedElement->addCategory($categoryElement);

$moreCategories = [];

$secondCategory = $productFeed->newCategory('second_category', 'Second Category', 'http://www.example.com/second-category')
  ->setImageUrl('http://www.example.com/images/second-category.jpg')
  ->addImageUrl('http://www.example.co.uk/images/uk-second-category.jpg', 'en_UK')
  ->setParentId('parent_category_id');

$moreCategories[] = $secondCategory;

$feedElement->addCategories($moreCategories);

Creating brands and adding them to a feed.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ...

$brandElement = $productFeed->newBrand('my_brand', 'My Brand');
$feedElement->addBrand($brandElement);

$moreBrands = [];

$secondBrand = $productFeed->newBrand('second_brand', 'Second Brand')
  ->addName('Duo Brand', 'es_SP')
  ->addName('Brand the Second', 'en_UK');

$moreBrands[] = $secondBrand;

$moreBrands[] = $productFeed->newBrand('third_brand', 'Third Brand');

$feedElement->addBrands($moreBrands);

Creating interactions (orders) and adding them to a feed.

$orderFeed = new \BazaarVoice\Interaction\Feed();
$feedElement = $orderFeed->newFeed('Order feed');

$orderProducts = [
    [
        'id' => 'productId123',
        'name' => 'Product name',
        'category' => 'Product Category',
        'url' => 'http://product-url',
        'imageUrl' => 'http://image-url',
        'price' => 29,
    ],
];
$order = $feed->newInteraction('22/03/1987', 'john@doe.com', 'John Doe', 'userId123', 'pt_BR', $orderProducts);

$feedElement->addInteraction($orderFeed);

// $orderFeed->printFeed();

Print ProductFeed XML string

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ... add products, brands & categories ...

print $productFeed->printFeed($feedElement);

Saving Productfeed as an XML file.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ... add products, brands & categories ...

$productFeed->saveFeed($feedElement, 'path/to/dir', 'my_feed_XYZ');

SFTP ProductFeed to BazaarVoice Production.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ... add products, brands & categories ...

if ($feedFile = $productFeed->saveFeed($feedElement, 'path/to/dir', 'my_feed_XYZ') {  
  try {
    $productFeed->sendFeed($feedFile, $sftpUsername, $sftpPassword);
  } catch (\Exception $e) {
    // Failed to FTP feed file.
  }
}

SFTP ProductFeed to Bazaarvoice Staging.

$productFeed = new \BazaarVoice\Product\Feed();
$feedElement = $productFeed->newFeed('my_feed');

// ... add products, brands & categories ...

if ($feedFile = $productFeed->saveFeed($feedElement, 'path/to/dir', 'my_feed_XYZ') {  
  try {
    $productFeed->useStage()->sendFeed($feedFile, $sftpUsername, $sftpPassword);
  } catch (\Exception $e) {
    // Failed to FTP feed file.
  }
}

Testing

$ composer test

Credits

License

The MIT License (MIT). Please see License File for more information.