/** * @param string $url */ public function getNefubContents($url, $maxAge, array $postData = null) { if (is_null($maxAge)) { self::put('Max age mag geen null zijn'); throw new Exception('Max age mag geen null zijn'); } $oCache = RequestCache::getRequest($url, $postData); // Request te oud bevonden if (!$oCache || $oCache->getAgeInDays() >= $maxAge) { $urls = array(); if ($this->retrieveLog->urls) { $urls = json_decode($this->retrieveLog->urls); } if (in_array($url, $urls)) { echo $url . ' is al eerder opgehaald<br />'; var_dump_path(debug_backtrace()); exit; } $urls[] = $url; $this->retrieveLog->urls = json_encode($urls); $this->retrieveLog->save(); if (self::$totalRequests < LIMIT_API_REQUESTS) { $this->countRequests++; self::$totalRequests++; // alleen nieuw object nodig als url niet eerder is opgehaald, anders vernieuwen we de rij alleen if (!$oCache) { $oCache = new RequestCache(); $oCache->url = $url; $oCache->save(); } $this->retrieveLog->requests = self::$totalRequests; $this->retrieveLog->save(); $context = null; if (is_array($postData)) { $httpQuery = http_build_query($postData); $streamOptions = array('http' => array('method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $httpQuery)); $context = stream_context_create($streamOptions); } $oCache->postData = is_array($postData) ? json_encode($postData) : null; $oCache->response = file_get_contents($url, false, $context); $oCache->success = is_string($oCache->response); $oCache->update_time = date("Y-m-d H:i:s"); $oCache->save(); } else { $text = 'Limiet van ' . LIMIT_API_REQUESTS . ' bereikt bij het ophalen van ' . $url; self::put($text); echo $text; $this->retrieveLog->requests = self::$totalRequests; $this->retrieveLog->finished = true; $this->retrieveLog->successfully = false; $this->retrieveLog->save(); exit; } } return $oCache->response; }
public function testCacheRequest() { $request = $this->getMockBuilder('Silktide\\SemRushApi\\Model\\Request')->disableOriginalConstructor()->getMock(); $request->method('getUrlParameters')->willReturn(["a" => "b", "c" => "d", 'export_columns' => ['a', 'b']]); $result = $this->requestCache->fetch($request); $this->assertNull($result); $result = $this->getMockBuilder('Silktide\\SemRushApi\\Model\\Result')->disableOriginalConstructor()->getMock(); $this->requestCache->cache($request, $result); $request = $this->getMockBuilder('Silktide\\SemRushApi\\Model\\Request')->disableOriginalConstructor()->getMock(); $request->method('getUrlParameters')->willReturn(["c" => "d", 'export_columns' => ['a', 'b'], "a" => "b"]); $cachedResult = $this->requestCache->fetch($request); $this->assertEquals($result, $cachedResult); }