<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use RedBeanPHP\R;
use PhpQuery\PhpQuery as phpQuery;
use GuzzleHttp\Client;
use Cache;
class GoogleShoppingController extends Controller {
private $html;
private $urls;
private function getHtml($url) {
$request = new Client();
try {
// see if url/html exists in Cache
// if it does not, fetch the html and store it in the cache
if (Cache::has($url)) {
$this->html = Cache::get($url);
} else {
$response = $request->get($url);
Cache::put($url, $response->getBody(), 3600);
}
} catch (RequestException $e) {
echo $e->getRequest();
if ($e->hasResponse()) {
echo $e->getResponse();
}
}
$this->html = Cache::get($url);
$this->loadHtmlDom();
}
private function loadHtmlDom() {
phpQuery::newDocumentHTML($this->html);
}
private function getLinks($url, $selector) {
$this->getHtml($url);
foreach (phpQuery::pq($selector) as $link) {
$links[] = phpQuery::pq($link)->attr("href");
}
return $links;
}
public function getGoogleShoppingSearchResults() {
$this->urls = $this->getLinks("https://www.google.com/search?q=mattress&hl=en&tbm=shop", ".r a");
return $this->urls;
}
public function parseGoogleShoppingProductLinks() {
foreach ($this->urls as $url) {
$parsed = parse_url($url);
if (isset($parsed['path']) && strpos($parsed['path'], 'shopping/product/')) {
$parsed['host'] = 'www.google.com';
unset($parsed['query']);
$urls[] = "http://" . $parsed['host'] . $parsed['path'];
return $urls;
}
}
}
public function parseGoogleSponsoredProductLinks() {
foreach ($this->urls as $url) {
$parsed = parse_url($url);
if (isset($parsed['path']) && $parsed['path'] == '/aclk') {
$parsed_query = parse_str($parsed['query'], $query);
$parsed_adurl = parse_str($query['adurl'], $adurl);
if (isset($adurl['ds_dest_url'])) {
$urls[] = $adurl['ds_dest_url'];
} else if ($adurl['u']) {
$urls[] = $adurl['u'];
}
return $urls;
}
}
}