コード例 #1
0
 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);
 }
コード例 #2
0
 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();
 }
コード例 #3
0
 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);
 }