Advertisement
nicolaslagios

final.php

Mar 9th, 2023
1,045
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.96 KB | None | 0 0
  1. <?php
  2.  
  3. $errors = false; //if true then display errors
  4. $resources = true; //if true then have memory and time unlimited
  5. $test = 0; //if 0 work normal, if 1 loads test xml from old/test/xml.xml and prints the entire array, if 2 prints just the first 100 products in array
  6.  
  7. if ($errors) {
  8.     ini_set('display_errors', '1');
  9.     ini_set('display_startup_errors', '1');
  10.     error_reporting(E_ALL);
  11. }
  12.  
  13. if ($resources) {
  14.     ini_set('memory_limit', '-1');
  15.     ini_set('max_execution_time', '0');
  16. }
  17.  
  18. if ($test == 1 || $test == 2) {
  19.     $xml = simplexml_load_file('old/test/xml.xml');
  20. } else {
  21.     $xml = simplexml_load_file('https://www.electriclife.gr/product_feed&token=BTiLGZSWy0xscUOJDB8oel4j5EVNfsh3&cat=101,101-Α,102,103,104,105,105-1,106,107,108,109,112,101-1,105-2,106-1,110,111,113,120,121,122,123,124,125,111-Α,122-A,114,115,116,117,118,119,117-1&extras=i,d,m,a,c,f');
  22. }
  23.  
  24. //οι κεντρικές κατηγορίες που περιέχουν υποκατηγορίες που θέλει - ΓΕΝΙΚΟΤΕΡΑ
  25. $categoriesarray = array(
  26.     0 => 'BLUETOOTH  ΣΥΣΚΕΥΕΣ ΚΑΙ ΚΑΛΩΔΙΩΣΕΙΣ', //
  27.     1 => 'GPS TRACKERS',
  28.     2 => 'MONITOR  & GPS ΤΖΑΜΙΟΥ',
  29.     3 => 'PARKING SETS',
  30.     4 => 'RADIO CD - USB',
  31.     5 => 'TV TUNERS - DAB TUNERS - TV FREE ΑΝΤΑΠΤΟΡΕΣ',
  32.     6 => 'ΑΝΑΚΤΗΣΗ ΕΡΓΟΣΤΑΣΙΑΚΗΣ ΚΑΜΕΡΑΣ, USB, PARKING',
  33.     7 => 'ΑΝΤΑΛΛΑΚΤΙΚΑ ΗΛΕΚΤΡ ΚΙΝΗΤΗΡΑ',
  34.     8 => 'ΕΞΑΡΤΗΜΑΤΑ ΤΟΠΟΘΕΤΗΣΗΣ ΠΗΓΗΣ',
  35.     9 => 'ΗΧΕΙΑ - ΕΝΙΣΧΥΤΕΣ - ΒΑΣΕΙΣ ΗΧΕΙΩΝ - ΓΡΙΛΛΙΕΣ',
  36.     10 => 'ΚΑΜΕΡΕΣ',
  37.     11 => 'ΚΑΤΑΓΡΑΦΙΚΑ (D.V.R)',
  38.     12 => 'ΚΕΡΑΙΕΣ και ΠΑΡΕΛΚΟΜΕΝΑ',
  39.     13 => 'ΜΙΚΡΟΦΩΝΙΚΕΣ ΕΓΚΑΤΑΣΤΑΣΕΙΣ',
  40.     14 => 'ΟΘΟΝΕΣ και ΣΥΝΑΦΗ ΟΘΟΝΩΝ',
  41.     15 => 'ΣΥΝΑΓΕΡΜΟΙ  ΓΙΑ ΜΟΤΟΣΙΚΛΕΤΕΣ',
  42.     16 => 'ΣΥΝΑΓΕΡΜΟΙ - ΣΥΣΤΗΜΑΤΑ ΑΝΤΙΚΛΟΠΗΣ [ΓΙΑ ΑΥΤΟΚΙΝΗΤΑ]',
  43.     17 => 'ΣΥΝΔΕΣΗ AUDIO - VIDEO ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  44.     18 => 'ΣΥΝΔΕΣΗ USB - SD - Iphone ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  45.     19 => 'ΦΩΤΙΣΜΟΣ HEADLIGHTS αναζητηση βασει ΤΥΠΟΥ ΛΑΜΠΑΣ',
  46.     20 => 'ΦΩΤΙΣΜΟΣ ΛΑΜΠΕΣ ΕΙΔΙΚΩΝ ΘΕΣΕΩΝ',
  47. );
  48.  
  49. //οι μικτές κεντρικές κατηγορίες όπου περιέχουν και υποκατηγορίες που θέλει αλλά και άλλες που δεν θέλει
  50. $categoriesarraymiktes = array(
  51.     0 => 'GPS TRACKERS', //
  52.     1 => 'MONITOR  & GPS ΤΖΑΜΙΟΥ',
  53.     2 => 'MONITOR & GPS ΤΖΑΜΙΟΥ',
  54.     3 => 'PARKING SETS',
  55.     4 => 'RADIO CD - USB',
  56.     5 => 'ΑΝΑΚΤΗΣΗ ΕΡΓΟΣΤΑΣΙΑΚΗΣ ΚΑΜΕΡΑΣ, USB, PARKING',
  57.     6 => 'ΑΝΤΑΛΛΑΚΤΙΚΑ ΗΛΕΚΤΡ ΚΙΝΗΤΗΡΑ',
  58.     7 => 'ΕΞΑΡΤΗΜΑΤΑ ΤΟΠΟΘΕΤΗΣΗΣ ΠΗΓΗΣ',
  59.     8 => 'ΗΧΕΙΑ - ΕΝΙΣΧΥΤΕΣ - ΒΑΣΕΙΣ ΗΧΕΙΩΝ - ΓΡΙΛΛΙΕΣ',
  60.     9 => 'ΚΑΜΕΡΕΣ',
  61.     10 => 'ΚΕΡΑΙΕΣ και ΠΑΡΕΛΚΟΜΕΝΑ',
  62.     11 => 'ΟΘΟΝΕΣ και ΣΥΝΑΦΗ ΟΘΟΝΩΝ',
  63.     12 => 'ΣΥΝΑΓΕΡΜΟΙ  ΓΙΑ ΜΟΤΟΣΙΚΛΕΤΕΣ',
  64.     13 => 'ΣΥΝΑΓΕΡΜΟΙ - ΣΥΣΤΗΜΑΤΑ ΑΝΤΙΚΛΟΠΗΣ [ΓΙΑ ΑΥΤΟΚΙΝΗΤΑ]',
  65.     14 => 'ΣΥΝΔΕΣΗ AUDIO - VIDEO ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  66.     15 => 'ΣΥΝΔΕΣΗ USB - SD - Iphone ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  67.     16 => 'ΦΩΤΙΣΜΟΣ ΛΑΜΠΕΣ ΕΙΔΙΚΩΝ ΘΕΣΕΩΝ',
  68. );
  69.  
  70. //οι τελικές κατηγορίες δένδρου προς έλεγχο τις οποίες θέλει ο πελάτης
  71. $categoriesarraylastcat = array(
  72.     0 => 'ΟΧΗΜΑΤΩΝ 12 / 24V',
  73.     1 => 'ΦΟΡΗΤΑ  - PORTABLE',
  74.     2 => 'ΑΚΟΥΣΤΙΚΑ ΓΙΑ ΜΟΝΙΤΟΡ',
  75.     3 => 'ΜΟΝΙΤΟΡ ΠΡΟΣΚΕΦΑΛΩΝ',
  76.     4 => 'ΜΟΝΙΤΟΡ ΑΠΛΑ ΜΕ ΒΑΣΗ',
  77.     5 => 'ΜΟΝΙΤΟΡ ΜΕ GPS - ΒΤ - ΕΙΣΟΔΟ ΚΑΜΕΡΑΣ',
  78.     6 => 'MONITOR HD  ΜΕ ΒΑΣΗ  | HIGH DEFINITION',
  79.     7 => 'PARKING ΜΕ 4 ΑΙΣΘΗΤΗΡΕΣ ΓΙΑ ΕΜΠΡΟΣ',
  80.     8 => 'PARKING ΣΤΗΝ  ΠΙΝΑΚΙΔΑ',
  81.     9 => 'PARKING ΜΕ 4 ΑΙΣΘΗΤΗΡΕΣ ΓΙΑ ΠΙΣΩ',
  82.     10 => 'ΜΕ ΚΑΘΡΕΠΤΗ ΚΑΙ ΚΑΜΕΡΑ',
  83.     11 => 'RADIO CD - RADIO USB - RADIO DVD',
  84.     12 => '1. TUNER TV',
  85.     13 => '2. TUNER RADIO DAB (DIGITAL AUDIO)',
  86.     14 => 'ΑΝΑΚΤΗΣΗ ΕΡΓΟΣΤΑΣΙΑΚΗΣ ΚΑΜΕΡΑΣ - PARKING',
  87.     15 => '07. ΔΙΑΚΟΠΤΕΣ ΤΑΜΠΛΩ,ΚΑΜΠΙΝΑΣ [διαφοροι)',
  88.     16 => '87mm ΗΧΕΙΑ',
  89.     17 => '100mm ΗΧΕΙΑ  - 4 ιντσες',
  90.     18 => '130mm ΗΧΕΙΑ  - 5 ιντσες',
  91.     19 => '165mm ΗΧΕΙΑ - 6 ιντσες',
  92.     20 => 'ΒΑΣΕΙΣ ΗΧΕΙΩΝ',
  93.     21 => 'ΑΠΟΣΤΑΤΕΣ ΗΧΕΙΩΝ - ΤΣΕΠΕΣ ΗΧΕΙΩΝ',
  94.     22 => 'MARINE ΗΧΕΙΑ για σκάφη',
  95.     23 => 'ΗΧΕΙΑ ΦΟΡΗΤΑ ΜΕ BLUETOOTH',
  96.     24 => 'ΚΑΛΩΔΙΑ ΣΥΝΔΕΣΗΣ VIDEO (RCA)',
  97.     25 => 'ΚΑΜΕΡΕΣ OEM ΓΙΑ ΕΡΓΟΣΤΑΣΙΑΚΗ ΘΕΣΗ',
  98.     26 => 'ΚΑΜΕΡΕΣ UNIVERSAL',
  99.     27 => 'ΣΥΝΔΕΣΗ ΟΕΜ ΚΑΜΕΡΑΣ ΣΕ ΠΗΓΗ ΕΜΠΟΡΙΟΥ',
  100.     28 => 'ΚΑΜΕΡΕΣ UNIVERSAL  HD | HIGH DEFINITION',
  101.     29 => 'ΚΕΡΑΙΕΣ  ΡΑΔΙΟΦΩΝΟΥ  FM',
  102.     30 => 'ΕΝΙΣΧΥΤΕΣ ΚΕΡΑΙΑΣ  &  ΚΕΡΑΙΕΣ ΜΕ ΕΝΙΣΧΥΤΗ',
  103.     31 => 'ΜΙΚΡΟΦΩΝΑ σκετα',
  104.     32 => '1-DIN ΠΗΓΕΣ UNIVERSAL',
  105.     33 => 'ΟΕΜ ΠΗΓΕΣ ΕΡΓΟΣΤΑΣΙΑΚΟΥ ΤΥΠΟΥ',
  106.     34 => '2-DIN ΠΗΓΕΣ UNIVERSAL',
  107.     35 => 'CAR PLAY',
  108.     36 => 'ΟΘΟΝΕΣ UNIVERSAL ΑΝΩ ΚΟΝΣΟΛΑ',
  109.     37 => 'DVR - ΚΑΤΑΓΡΑΦΙΚΑ',
  110.     38 => 'OPTICAL BOX',
  111.     39 => 'ΤABLET',
  112.     40 => 'ANDROID STREAMING',
  113.     41 => 'ΣΥΝΑΓΕΡΜΟΙ ΜΟΤΟΣΙΚΛΕΤΑΣ',
  114.     42 => 'ΣΥΝΑΓΕΡΜΟΙ CAN BUS',
  115.     43 => 'ΣΥΝΑΓΕΡΜΟΙ ΑΝΑΛΟΓΙΚΟΙ',
  116.     44 => 'ΣΥΝΑΓΕΡΜΟΙ 24V',
  117.     45 => 'ΣΥΣΚΕΥΕΣ ΑΝΤΙΚΛΟΠΗΣ ΠΡΟΣΤΑΣΙΑΣ',
  118.     46 => 'ΣΥΝΔΕΣΗ AUDIO ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  119.     47 => 'ΣΥΝΔΕΣΗ ΚΑΜΕΡΑΣ Ή TUNER ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  120.     48 => 'ΣΥΝΔΕΣΗ USB - SD - Iphone ΣΕ ΕΡΓΟΣΤΑΣΙΑΚΗ ΠΗΓΗ',
  121.     49 => '2. XENON',
  122.     50 => '1. LED',
  123.     51 => 'ΣΩΛΗΝΩΤΑ - ΠΛΑΦΟΝΙΕΡΑΣ',
  124.     52 => 'ΜΕ ΚΑΛΥΚΑ',
  125.     53 => 'ΑΚΑΛΥΚΑ',
  126.     54 => 'ΜΕ ΕΙΔΙΚΗ ΒΑΣΗ',
  127.     55 => 'CAN BUS ΓΙΑ ΛΑΜΠΑΚΙΑ ΕΙΔΙΚΩΝ ΘΕΣΕΩΝ',
  128.     56 => 'Δείτε όλα τα προϊόντα',
  129. );
  130.  
  131. $i = 0;
  132. while ($i < count($xml->products->product)) {
  133.     $maincategory = preg_replace('/[\s\p{Zs}]*$/u', '',explode(">", $xml->products->product[$i]->site_category)[0]);
  134.     $lastcategory = preg_replace('/^[\s\p{Zs}]|[\s\p{Zs}]$/u', '',explode(">", $xml->products->product[$i]->site_category)[2]);
  135.     $fullcategorytree = (string) $xml->products->product[$i]->site_category;
  136.     if (in_array($maincategory, $categoriesarray)) {
  137.         if (in_array($maincategory, $categoriesarraymiktes)) {
  138.             if (in_array($lastcategory, $categoriesarraylastcat)) {
  139.                 $pinakas[$i] = array(
  140.                             'unique_id' => (string) $xml->products->product[$i]->unique_id,
  141.                             'code' => (string) $xml->products->product[$i]->code,
  142.                             'name' => (string) $xml->products->product[$i]->name,
  143.                             'description' => (string) $xml->products->product[$i]->description,
  144.                             'extra_description' => (string) $xml->products->product[$i]->extra_description,
  145.                             'maincategory' => $maincategory,
  146.                             'category' => (string) $xml->products->product[$i]->site_category,
  147.                             'categorytree' => $fullcategorytree,
  148.                             'quantity' => (string) $xml->products->product[$i]->quantity_ath + (string) $xml->products->product[$i]->quantity_thes,
  149.                             'instock' => (string) $xml->products->product[$i]->instock,
  150.                             'price' => (string) $xml->products->product[$i]->price,
  151.                             'filters' => (string) $xml->products->product[$i]->filters,
  152.                             'image' => (string) $xml->products->product[$i]->image,
  153.                             'extra_images' => str_replace(":::", "|", (string) $xml->products->product[$i]->extra_images),
  154.                             'attribute' => (string) $xml->products->product[$i]->attribute,
  155.                 );
  156.                 foreach($xml->products->product[$i] as $key => $value){
  157.                     if($key == "attribute_group"){
  158.                         $attribute_group = array();
  159.                         foreach($value->children() as $attribute) {
  160.                             $attribute_group[(string)$attribute['name']] = (string)$attribute;
  161.                         }
  162.                         $pinakas[$i]['attribute_group'] = $attribute_group;
  163.                     }elseif(!($key == "site_category" || $key == "quantity_ath" || $key == "quantity_thes")) {
  164.                         $pinakas[$i][$key] = (string) $value;
  165.                     }
  166.                 }
  167.                 handle_element($xml->products->product[$i], $pinakas, $i);
  168.             }
  169.         } else {
  170.             $pinakas[$i] = array(
  171.                         'unique_id' => (string) $xml->products->product[$i]->unique_id,
  172.                         'code' => (string) $xml->products->product[$i]->code,
  173.                         'name' => (string) $xml->products->product[$i]->name,
  174.                         'description' => (string) $xml->products->product[$i]->description,
  175.                         'maincategory' => $maincategory,
  176.                         'category' => (string) $xml->products->product[$i]->site_category,
  177.                         'categorytree' => $fullcategorytree,
  178.                         'quantity' => (string) $xml->products->product[$i]->quantity_ath + (string) $xml->products->product[$i]->quantity_thes,
  179.                         'instock' => (string) $xml->products->product[$i]->instock,
  180.                         'price' => (string) $xml->products->product[$i]->price,
  181.                         'filters' => (string) $xml->products->product[$i]->filters,
  182.                         'image' => (string) $xml->products->product[$i]->image,
  183.                         'extra_images' => str_replace(":::", "|", (string) $xml->products->product[$i]->extra_images),
  184.                         'attribute' => (string) $xml->products->product[$i]->attribute,
  185.             );
  186.             foreach($xml->products->product[$i] as $key => $value){
  187.                 if($key == "attribute_group"){
  188.                     $attribute_group = array();
  189.                     foreach($value->children() as $attribute) {
  190.                         $attribute_group[(string)$attribute['name']] = (string)$attribute;
  191.                     }
  192.                     $pinakas[$i]['attribute_group'] = $attribute_group;
  193.                 }elseif(!($key == "site_category" || $key == "quantity_ath" || $key == "quantity_thes")) {
  194.                     $pinakas[$i][$key] = (string) $value;
  195.                 }
  196.             }
  197.             handle_element($xml->products->product[$i], $pinakas, $i);
  198.         }
  199.     }
  200.     $i++;
  201. }
  202.  
  203. function handle_element($xml_element, &$pinakas, $i) {
  204.     foreach($xml_element as $key => $value) {
  205.         if($key == "attribute_group"){
  206.             $attribute_group = array();
  207.             foreach($value->children() as $attribute) {
  208.                 $attribute_group[(string)$attribute['name']] = (string)$attribute;
  209.             }
  210.             $pinakas[$i]['attribute_group'] = $attribute_group;
  211.         }elseif(!($key == "site_category" || $key == "quantity_ath" || $key == "quantity_thes")) {
  212.             $pinakas[$i][$key] = (string) $value;
  213.         }
  214.  
  215.         if($value->children()) { // If the element has sub-elements
  216.             handle_element($value, $pinakas, $i); // Call the function again to handle the sub-elements
  217.         }
  218.     }
  219. }
  220.  
  221. $pinakas = array_values($pinakas);
  222.  
  223. //ΔΗΜΙΟΥΡΓΙΑ CSV για τις εγγραφές του YMM στην βάση - START
  224. $i = 0;
  225. $finalResult = [];
  226. while ($i < count($pinakas)) {
  227.     if (!empty($pinakas[$i]['filters'])) {
  228.         $filters = $pinakas[$i]['filters'];
  229.         $filtersArray = explode(':::', $filters);
  230.         $result = [];
  231.         foreach ($filtersArray as $filter) {
  232.             $filterParts = explode('|', $filter);
  233.             $year = end($filterParts);
  234.             preg_match_all('/\d{4}/', $year, $matches);
  235.             $result[] = [$pinakas[$i]['unique_id'], ...array_slice($filterParts, 0, -1), ...$matches[0]];
  236.         }
  237.         foreach ($result as $key => $value) {
  238.             $result[$key] = implode(', ', $value);
  239.         }
  240.         $finalResult[] = $result;
  241.     }
  242.     $i++;
  243. }
  244. $fp = fopen('ymm.csv', 'w');
  245. foreach ($finalResult as $fields) {
  246.     foreach ($fields as $subArray) {
  247.         fputcsv($fp, explode(', ', $subArray));
  248.     }
  249. }
  250. fclose($fp);
  251. //ΔΗΜΙΟΥΡΓΙΑ CSV για τις εγγραφές του YMM στην βάση - STOP
  252.  
  253.  
  254. //δημιουργία XML ή εκτύπωση array
  255. if ($test == 1 || $test == 2) {
  256.     echo "<pre>";
  257.     if ($test == 1) {
  258.         print_r($pinakas);
  259.     } else {
  260.         print_r(array_slice($finalResult, 0, 100));
  261.     }
  262.     echo "</pre>";
  263. } else {
  264.     $i = 0;
  265.     $finalxmlpart1 = '<?xml version="1.0" encoding="UTF-8"?>
  266.    <electriclife>
  267.        <products>
  268.        ';
  269.     while ($i < count($pinakas)) {
  270.         $finalxmlpart2[] = '        <product>
  271.                <unique_id>'.$pinakas[$i]['unique_id'].'</unique_id>
  272.                <code><![CDATA['.$pinakas[$i]['code'].']]></code>
  273.                <name><![CDATA['.$pinakas[$i]['name'].']]></name>
  274.                <description><![CDATA['.$pinakas[$i]['description'].']]></description>
  275.                <extra_description><![CDATA['.$pinakas[$i]['extra_description'].']]></extra_description>
  276.                <maincategory><![CDATA['.$pinakas[$i]['maincategory'].']]></maincategory>
  277.                <category><![CDATA['.$pinakas[$i]['category'].']]></category>
  278.                <categorytree><![CDATA['.$pinakas[$i]['categorytree'].']]></categorytree>
  279.                <quantity>'.$pinakas[$i]['quantity'].'</quantity>
  280.                <instock>'.$pinakas[$i]['instock'].'</instock>
  281.                <price>'.$pinakas[$i]['price'].'</price>
  282.                <image><![CDATA['.$pinakas[$i]['image'].']]></image>
  283.                <extra_images><![CDATA['.$pinakas[$i]['extra_images'].']]></extra_images>
  284.                <attribute><![CDATA['.$pinakas[$i]['attribute'].']]></attribute>';
  285.                 if (!empty($pinakas[$i]['filters'])) {
  286.                     $filters = explode(":::", $pinakas[$i]['filters']);
  287.                     $brands = [];
  288.                     $models = [];
  289.                     $dates = [];
  290.                     foreach ($filters as $filter) {
  291.                         list($brand, $model, $date) = explode("|", $filter);
  292.                         $brands[] = $brand;
  293.                         $models[] = $model;
  294.                         $dates[] = $date;
  295.                     }
  296.                     $finalxmlpart2[] = '        <filters>
  297.                        <brand><![CDATA['.implode("|", $brands).']]></brand>
  298.                        <model><![CDATA['.implode("|", $models).']]></model>
  299.                        <date><![CDATA['.implode("|", $dates).']]></date>
  300.                    </filters>';
  301.                 }
  302.                 if(isset($pinakas[$i]['attribute_group'])){
  303.                     $finalxmlpart2[] = '            <attribute_group>';
  304.                     foreach ($pinakas[$i]['attribute_group'] as $key => $value) {
  305.                         $key = str_replace("/", "",str_replace("-", "_",str_replace(".", "",str_replace(" ", "", $key))));
  306.                         $key = str_replace(")", "",str_replace("(", "", $key));
  307.                         $finalxmlpart2[] = '                <'.$key.'><![CDATA['.$value.']]></'.$key.'>';
  308.                     }
  309.                     $finalxmlpart2[] = '            </attribute_group>';
  310.                 }
  311.         $finalxmlpart2[] = '        </product>';
  312.         $i++;
  313.     }
  314.     $finalxmlpart3 = '  </products>
  315.    </electriclife>';
  316.    
  317.     $finalxml = $finalxmlpart1.implode("\n", $finalxmlpart2).$finalxmlpart3;
  318.     file_put_contents('electriclife.xml', $finalxml);
  319.    
  320.     echo "done";
  321. }
  322.  
  323. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement