/** * See stats of a keyword * @before _secure, memberLayout */ public function stats($keyword_id) { $keyword = \Keyword::first(array("id = ?" => $keyword_id, "serp = ?" => true)); $this->_authority($keyword); $rank = Registry::get("MongoDB")->rank; $r = $rank->findOne(['keyword_id' => (int) $keyword->id, 'created' => date('Y-m-d')]); if ($keyword->live && !$r) { try { Shared\Service\Serp::record(array($keyword)); } catch (\Exception $e) { } } $end_date = RequestMethods::get("enddate", date("Y-m-d")); $start_date = RequestMethods::get("startdate", date("Y-m-d", strtotime($end_date . "-7 day"))); $this->seo(array("title" => "Serp | Stats", "view" => $this->getLayoutView())); $view = $this->getActionView(); $start_time = strtotime($start_date); $end_time = strtotime($end_date); $i = 0; $obj = array(); while ($start_time < $end_time) { $start_time = strtotime($start_date . " +{$i} day"); $date = date('Y-m-d', $start_time); $record = $rank->findOne(array('created' => $date, 'keyword_id' => (int) $keyword->id)); if (isset($record)) { $position = $record['position']; } else { $position = 0; } $obj[] = array('y' => $date, 'a' => $position); ++$i; } $view->set("keyword", $keyword)->set("label", "Rank")->set("data", ArrayMethods::toObject($obj)); }
/** * Check SERP stats * Error: Showing MySql server has gone away, * Possible solutions: Add Limit + page (2nd store in mongoDB) */ protected function _serpRank() { try { $keywords = Keyword::all(array("live = ?" => true, "serp = ?" => true), array("id", "user_id", "keyword", "link")); $arr = array(); foreach ($keywords as $k) { Shared\Service\Serp::record([$k]); sleep(30); // sleep 30 seconds for every crawl } } catch (\Exception $e) { $this->log($e->getMessage()); } }