public function countsFor() { $urls = explode(',', $this->request->getVar('urls')); // queue all urls to be checked foreach ($urls as $url) { $result = SocialQueue::queueURL($url); } $urlObjs = URLStatistics::get()->filter(array('URL' => $urls)); if (!$urlObjs->count()) { return json_encode(array()); } $results = array(); // do we need to filter the results any further $service = $this->getRequest()->param('SERVICE'); $filter = null; if ($service && $service == 'service') { $filter = $this->getRequest()->param('FILTER'); } foreach ($urlObjs as $urlObj) { if ($filter) { if (strtoupper($urlObj->Service) == strtoupper($filter)) { $results['results'][$urlObj->URL][$urlObj->Service][] = array($urlObj->Action => $urlObj->Count); } } else { $results['results'][$urlObj->URL][$urlObj->Service][] = array($urlObj->Action => $urlObj->Count); } } return json_encode($results); }
public static function queueURL($url) { // are we locking down the domain $checkDomain = Config::inst()->get('SocialProofSettings', 'check_domain'); if ($checkDomain) { $match = strstr($url, $checkDomain); if ($match === false) { return; } } $queuedUrls = array(); // get the latest queue and add the URL to the queue $queue = SocialQueue::get()->filter('Active', 1)->last(); if ($queue && $queue->exists()) { $queuedUrls = (array) json_decode($queue->URLs, true); } $queuedUrls = (array) $queuedUrls; $queuedUrls[] = $url; if (!$queue || !$queue->exists()) { $queue = new SocialQueue(); } $queue->URLs = json_encode($queuedUrls, true); $queue->write(); }
public function process() { $services = array(); foreach (Config::inst()->get('UpdateSocialStatsJob', 'services') as $service) { $services[] = $service::create(); } $requeue = array(); foreach ($services as $service) { $errors = $service->processQueue($this->URLs); foreach ($errors as $error) { if (!in_array($error, $requeue)) { $requeue[] = $error; } } } foreach ($requeue as $queue) { SocialQueue::queueURL($queue); } $this->currentStep = count($this->URLs); $this->completeJob(); }
public function testTwitterServiceAPI() { $request = $this->get('api/countsfor/service/twitter?urls=' . $this->testURL); $this->assertEquals($request->getStatusCode(), 200); $body = $request->getBody(); $socialQueue = SocialQueue::get()->first(); $this->assertEquals($socialQueue->Active, 1); $jsonArray = json_decode($body, true); $results = $jsonArray['results']; $www = $results[$this->testURL]; $this->assertEquals(count($www, true), 3); $facebook = $www['Twitter'][0]; $this->assertEquals($facebook['statuses_count'], 50); // confirm the URL has been requeued $socialQueue = SocialQueue::get()->first(); $this->assertEquals($socialQueue->Active, 1); $urls = json_decode($socialQueue->URLs, true); $this->assertEquals($urls[0], $this->testURL); }
public function testSocialQueue() { $socialQueue = SocialQueue::get()->filter('Active', 1)->last(); $this->assertEquals($socialQueue->URLs, json_encode(array($this->testURL), true)); $this->assertEquals($socialQueue->Active, 1); }