summaryrefslogtreecommitdiff
path: root/bridges/AutoJMBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/AutoJMBridge.php')
-rw-r--r--bridges/AutoJMBridge.php143
1 files changed, 51 insertions, 92 deletions
diff --git a/bridges/AutoJMBridge.php b/bridges/AutoJMBridge.php
index 25fb2cb..b9825ca 100644
--- a/bridges/AutoJMBridge.php
+++ b/bridges/AutoJMBridge.php
@@ -77,110 +77,69 @@ class AutoJMBridge extends BridgeAbstract {
$model_url = self::URI . $this->getInput('url');
- // Get the session cookies and the form token
- $this->getInitialParameters($model_url);
-
- // Build the form
- $post_data = array(
- 'form[energy]' => $this->getInput('energy'),
- 'form[transmission]' => $this->getInput('transmission'),
- 'form[priceMin]' => $this->getInput('priceMin'),
- 'form[priceMin]' => $this->getInput('priceMin'),
- 'form[_token]' => $this->token
- );
+ // Build the GET data
+ $get_data = 'form[energy]=' . $this->getInput('energy') .
+ '&form[transmission]=' . $this->getInput('transmission') .
+ '&form[priceMin]=' . $this->getInput('priceMin') .
+ '&form[priceMin]=' . $this->getInput('priceMin');
- // Set the Form request content type
+ // Set the header 'X-Requested-With' like the website does it
$header = array(
- 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
- );
-
- // Set the curl options (POST query and content, and session cookies
- $curl_opts = array(
- CURLOPT_POST => true,
- CURLOPT_POSTFIELDS => http_build_query($post_data),
- CURLOPT_COOKIE => $this->cookies
+ 'X-Requested-With: XMLHttpRequest'
);
// Get the JSON content of the form
- $json = getContents($model_url, $header, $curl_opts)
+ $json = getContents($model_url . '?' . $get_data, $header)
or returnServerError('Could not request AutoJM.');
// Extract the HTML content from the JSON result
$data = json_decode($json);
- $html = str_get_html($data->content);
-
- // Go through every finisha of the model
- $list = $html->find('h3');
- foreach ($list as $finish) {
- $finish_name = $finish->plaintext;
- $motorizations = $finish->next_sibling()->find('li');
- foreach ($motorizations as $element) {
- $image = $element->find('div[class=block-product-image]', 0)->{'data-ga-banner'};
- $serie = $element->find('span[class=model]', 0)->plaintext;
- $url = self::URI . substr($element->find('a', 0)->href, 1);
- if ($element->find('span[class*=block-product-nbModel]', 0) != null) {
- $availability = 'En Stock';
- } else {
- $availability = 'Sur commande';
- }
- $discount_html = $element->find('span[class*=tag--promo]', 0);
- if ($discount_html != null) {
- $discount = $discount_html->plaintext;
- } else {
- $discount = 'inconnue';
- }
- $price = $element->find('span[class=price red h1]', 0)->plaintext;
- $item = array();
- $item['title'] = $finish_name . ' ' . $serie;
- $item['content'] = '<p><img style="vertical-align:middle ; padding: 10px" src="' . $image . '" />'
- . $finish_name . ' ' . $serie . '</p>';
- $item['content'] .= '<ul><li>Disponibilité : ' . $availability . '</li>';
- $item['content'] .= '<li>Série : ' . $serie . '</li>';
- $item['content'] .= '<li>Remise : ' . $discount . '</li>';
- $item['content'] .= '<li>Prix : ' . $price . '</li></ul>';
-
- // Add a fictionnal anchor to the RSS element URL, based on the item content ;
- // As the URL could be identical even if the price change, some RSS reader will not show those offers as new items
- $item['uri'] = $url . '#' . md5($item['content']);
-
- $this->items[] = $item;
+ $html = str_get_html($data->results);
+
+ // Go through every car of the model
+ $list = $html->find('div[class=car-card]');
+ foreach ($list as $car) {
+
+ // Get the Finish name if this car is the first of a new finish
+ $prev_tag = $car->prev_sibling();
+ if($prev_tag->tag == 'div' && $prev_tag->class == 'results-title') {
+ $finish_name = $prev_tag->plaintext;
}
- }
- }
- /**
- * Gets the session cookie and the form token
- *
- * @param string $pageURL The URL from which to get the values
- */
- private function getInitialParameters($pageURL) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $pageURL);
- curl_setopt($ch, CURLOPT_HEADER, true);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- $data = curl_exec($ch);
-
- // Separate the response header and the content
- $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
- $header = substr($data, 0, $headerSize);
- $content = substr($data, $headerSize);
- curl_close($ch);
-
- // Extract the cookies from the headers
- $cookies = '';
- $http_response_header = explode("\r\n", $header);
- foreach ($http_response_header as $hdr) {
- if (strpos($hdr, 'Set-Cookie') !== false) {
- $cLine = explode(':', $hdr)[1];
- $cLine = explode(';', $cLine)[0];
- $cookies .= ';' . $cLine;
+ // Get the info about the car offer
+ $image = $car->find('div[class=car-card__visual]', 0)->find('img', 0)->src;
+ $serie = $car->find('div[class=car-card__title]', 0)->plaintext;
+ $url = $car->find('a', 0)->href;
+ // Check if the car model is in stock or available only on order
+ if($car->find('span[class*=tag--dispo]', 0) != null) {
+ $availability = 'En Stock';
+ } else {
+ $availability = 'Sur commande';
}
+ $discount_html = $car->find('span[class=promo]', 0);
+ // Check if there is any discount dsiplayed
+ if ($discount_html != null) {
+ $discount = $discount_html->plaintext;
+ } else {
+ $discount = 'inconnue';
+ }
+ $price = $car->find('span[class=price]', 0)->plaintext;
+
+ // Construct the new item
+ $item = array();
+ $item['title'] = $finish_name . ' ' . $serie;
+ $item['content'] = '<p><img style="vertical-align:middle ; padding: 10px" src="' . $image . '" />'
+ . $finish_name . ' ' . $serie . '</p>';
+ $item['content'] .= '<ul><li>Disponibilité : ' . $availability . '</li>';
+ $item['content'] .= '<li>Série : ' . $serie . '</li>';
+ $item['content'] .= '<li>Remise : ' . $discount . '</li>';
+ $item['content'] .= '<li>Prix : ' . $price . '</li></ul>';
+
+ // Add a fictionnal anchor to the RSS element URL, based on the item content ;
+ // As the URL could be identical even if the price change, some RSS reader will not show those offers as new items
+ $item['uri'] = $url . '#' . md5($item['content']);
+
+ $this->items[] = $item;
}
- $this->cookies = trim(substr($cookies, 1));
-
- // Get the token from the content
- $html = str_get_html($content);
- $token = $html->find('input[type=hidden][id=form__token]', 0);
- $this->token = $token->value;
}
}