Magento 2 has a CSV processor, that is being used to import and export product and customer related data.
For one of my project I had to generate a CSV of the information I received for a product(s) from an API and use the same CSV as an input file for updating the quantity of the product(s).
Below is the file,
<?php /** * @author DecryptWeb * @copyright Copyright (c) 2020 DecryptWeb (https://www.decryptweb.com/) */ namespace DW\Interface\Model; use Magento\Framework\Filesystem\Driver\File; use Magento\Framework\Filesystem\Io\File as CsvFile; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Framework\File\Csv; use Magento\Framework\App\Filesystem\DirectoryList; /** * Class ProductInventoryUpdate created */ class ProductInventoryUpdate { /** * @var \Magento\Framework\File\Csv */ protected $_csvProcessor; /** * @var \Magento\Framework\App\Filesystem\DirectoryList */ protected $_directoryList; /** * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface */ protected $_date; /** * @var \Magento\Framework\Filesystem\Io\File */ protected $_filesystem; /** * @var \Magento\Framework\Filesystem\Driver\File */ protected $_driver; /** * @var array */ protected $response = []; /** * @param DirectoryList $_directoryList * @param Csv $_csvProcessor * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $date * @param \Magento\Framework\Filesystem\Io\File $_filesystem * @param \Magento\Framework\Filesystem\Driver\File $_driver */ public function __construct( DirectoryList $_directoryList, Csv $_csvProcessor, TimezoneInterface $date, CsvFile $_filesystem, File $_driver, ) { $this->_directoryList = $_directoryList; $this->_csvProcessor = $_csvProcessor; $this->_date = $date; $this->_filesystem = $_filesystem; $this->_driver = $_driver; }//end __construct() /** * @param $productArray * @return string * @throws \Magento\Framework\Exception\FileSystemException */ public function writeToCsv($productArray) { $fileDirectoryPath = $this->_directoryList ->getPath(DirectoryList::VAR_DIR) . '/' . 'apis'; if (!$this->_driver->isExists($fileDirectoryPath)) { $this->_filesystem->mkdir($fileDirectoryPath, 0777, true); } $datetime = $this->_date->date()->format('Ymd_His'); $fileName = 'catalog_product_'.$datetime.'.csv'; $filePath = $fileDirectoryPath . '/' . $fileName; $data = []; $data[] = [ 'source_code', 'sku', 'status', 'quantity', ]; /* pass data array to write in csv file */ foreach ($productArray as $k => $product) { $data[] = [ $product['source_code'], $product['sku'], $product['status'], $product['quantity'], ]; } $this->_csvProcessor ->setEnclosure('"') ->setDelimiter(',') ->saveData($filePath, $data); return $filePath; }//end writeToCsv() }//end class
– Above will dynamically generate a file in a specified directory [root_directory]/var/apis/ along with the timestamp
Hope this is helpful