예제 #1
0
 public function updateStatsAction()
 {
     /** @var NewsEntry[] $entries */
     $entries = NewsEntry::find([['stats.lastUpdated' => ['$lt' => time() - 2 * 60 * 60], 'publishedAt' => ['$gt' => time() - 24 * 60 * 60]]]);
     $this->log('Will update relevance of ' . count($entries) . ' entries.');
     foreach ($entries as $entry) {
         $this->log(' -> ' . $entry->title);
         $entry->updateStats();
     }
     $this->log('Done');
 }
예제 #2
0
 public function updateRelevance()
 {
     // Reset
     $this->stats = ['fb' => ['likes' => [], 'shares' => [], 'comments' => [], 'click' => []], 'twitter' => ['count' => []]];
     /** @var NewsEntry[] $entries */
     $entries = NewsEntry::find(['conditions' => ['sourceId' => $this->_id]]);
     // Update Mean
     $count = count($entries);
     foreach ($entries as $entry) {
         $this->stats['fb']['likes'][] = $entry->stats['fb']['likes'];
         $this->stats['fb']['shares'][] = $entry->stats['fb']['shares'];
         $this->stats['fb']['comments'][] = $entry->stats['fb']['comments'];
         $this->stats['fb']['click'][] = $entry->stats['fb']['click'];
         $this->stats['twitter']['count'][] = $entry->stats['twitter']['count'];
     }
     $this->stats['fb']['likes'] = Math::specialMean($this->stats['fb']['likes']);
     $this->stats['fb']['shares'] = Math::specialMean($this->stats['fb']['shares']);
     $this->stats['fb']['comments'] = Math::specialMean($this->stats['fb']['comments']);
     $this->stats['fb']['click'] = Math::specialMean($this->stats['fb']['click']);
     $this->stats['twitter']['count'] = Math::specialMean($this->stats['twitter']['count']);
     // Update Entry Relative Stats
     foreach ($entries as $entry) {
         $updateRelative = function ($social, $type) use(&$entry) {
             if ($this->stats[$social][$type] == 0) {
                 $entry->relativeStats[$social][$type] = 1;
             } else {
                 $entry->relativeStats[$social][$type] = $entry->stats[$social][$type] / $this->stats[$social][$type];
             }
         };
         $updateRelative('fb', 'likes');
         $updateRelative('fb', 'shares');
         $updateRelative('fb', 'comments');
         $updateRelative('fb', 'click');
         $updateRelative('twitter', 'count');
         $entry->updateRelevance();
         $entry->save();
     }
     $this->save();
 }