Kelkoo.php 3.95 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

namespace app\Models\parserSkripte;

use App\Models\Searchengine;
use Log;

class Kelkoo extends Searchengine
{
    public $results = [];

    public function __construct($name, \StdClass $engine, \App\MetaGer $metager)
    {
        parent::__construct($name, $engine, $metager);
        $this->getString = $this->UrlSigner();
        $this->hash = md5($this->engine->host . $this->getString . $this->engine->port . $this->name);
    }

       
    public function loadResults($result)
    {
        $result = preg_replace("/\r\n/si", "", $result);
23
24
        # delete namespace, allowing easier xpath access
        $result = str_replace('xmlns="urn:yahoo:prods"', '', $result);
25
26
27
28
29
        try {
            $content = simplexml_load_string($result);
            if (!$content) {
                return;
            }
30
31
32
33
34
35
36
37
38
            # Kekloo gives us the total Result Count
            $resultCount = $content->xpath('/ProductSearch/Products/@totalResultsAvailable');
            if (sizeof($resultCount) > 0) {
                $resultCount = intval($resultCount[0]->__toString());
            } else {
                $resultCount = 0;
            }
            $this->totalResults = $resultCount;
            $results = $content->xpath('/ProductSearch/Products/Product/Offer');
39
40
41

            foreach ($results as $result) {
                $result      = simplexml_load_string($result->saveXML());
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

                $title       = $result->Title[0]->__toString();
                
                $price = floatval($result->Price[0]->Price[0]);
                $deliveryPrice = floatval($result->Price[0]->DeliveryCost[0]);
                $totalPrice = $price + $deliveryPrice;

                $descr = "";
            
                if(isset($result->Description[0]))
                {
                    $descr       = $result->Description[0]->__toString();
                }
                $descr .= "<p>Preis: " . $price . " €</p>";
                $image       = $result->Images[0]->Image[0]->Url[0]->__toString();
                $link        = $result->Url[0]->__toString();
                $anzeigeLink = $result->Merchant[0]->Name[0]->__toString();
59
60
61
62
63
64
65
66
67
                $this->counter++;
                $this->results[] = new \App\Models\Result(
                    $this->engine,
                    $title,
                    $link,
                    $anzeigeLink,
                    $descr,
                    $this->engine->{"display-name"},$this->engine->homepage,
                    $this->counter,
68
69
                    ['image' => $image,
                     'price' => $totalPrice * 100]
70
71
72
73
74
75
76
77
78
                );
            }
        } catch (\Exception $e) {
            Log::error("A problem occurred parsing results from $this->name:");
            Log::error($e->getMessage());
            return;
        }
    }

79
80
81
82
    public function getNext(\App\MetaGer $metager, $result)
    {
    }

83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

    # kelkoogroup.com/kelkoo-customer-service/kelkoo-developer-network/shopping-services/samples/signing-url-php/
    private function UrlSigner(){
        
        $urlPath = $this->getString;
        $partner = $this->engine->{"http-auth-credentials"}->ID;
        $key = $this->engine->{"http-auth-credentials"}->Key;

        $URL_sig = "hash";
        $URL_ts = "timestamp";
        $URL_partner = "aid"; 
        $URLreturn = "";
        $URLtmp = "";
        $s = "";
        // get the timestamp
        $time = time();
        // replace " " by "+"
        $urlPath = str_replace(" ", "+", $urlPath);
        // format URL
Aria Givi's avatar
Aria Givi committed
102
        $URLtmp = $urlPath . "&" . $URL_partner . "=" . $partner . "&" . $URL_ts . "=" . $time;
103
104
105
106
107
108
109
110
111
112
113
       
        // URL needed to create the token
        $s = $urlPath . "&" . $URL_partner . "=" . $partner . "&" . $URL_ts . "=" . $time . $key;
        $token = "";
        $token = base64_encode(pack('H*', md5($s)));
        $token = str_replace(array("+", "/", "="), array(".", "_", "-"), $token);
        $URLreturn = $URLtmp . "&" . $URL_sig . "=" . $token;
        return $URLreturn;

    }
}