]> git.mxchange.org Git - friendica.git/commitdiff
Issue 9276: Cache the trending hashtags in the background
authorMichael <heluecht@pirati.ca>
Sat, 26 Sep 2020 09:42:12 +0000 (09:42 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 26 Sep 2020 09:42:12 +0000 (09:42 +0000)
src/Model/Tag.php
src/Worker/Cron.php

index 40f2f8d6a1600ffe0622ca81ec6d09fa0259c482..f5932dd6029335c3b27c5a67fbd4db042fa69961 100644 (file)
@@ -488,54 +488,86 @@ class Tag
         * Returns a list of the most frequent global hashtags over the given period
         *
         * @param int $period Period in hours to consider posts
+        * @param int $limit  Number of returned tags
         * @return array
         * @throws \Exception
         */
        public static function getGlobalTrendingHashtags(int $period, $limit = 10)
        {
                $tags = DI::cache()->get('global_trending_tags');
+               if (!empty($tags)) {
+                       return $tags;
+               } else {
+                       return self::setGlobalTrendingHashtags($period, $limit);
+               }
+       }
 
-               if (empty($tags)) {
-                       $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`
-                               FROM `tag-search-view`
-                               WHERE `private` = ? AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
-                               GROUP BY `term` ORDER BY `score` DESC LIMIT ?",
-                               Item::PUBLIC, $period, $limit);
-
-                       if (DBA::isResult($tagsStmt)) {
-                               $tags = DBA::toArray($tagsStmt);
-                               DI::cache()->set('global_trending_tags', $tags, Duration::HOUR);
-                       }
+       /**
+        * Creates a list of the most frequent global hashtags over the given period
+        *
+        * @param int $period Period in hours to consider posts
+        * @param int $limit  Number of returned tags
+        * @return array
+        * @throws \Exception
+        */
+       public static function setGlobalTrendingHashtags(int $period, $limit = 10)
+       {
+               $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`
+                       FROM `tag-search-view`
+                       WHERE `private` = ? AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
+                       GROUP BY `term` ORDER BY `score` DESC LIMIT ?",
+                       Item::PUBLIC, $period, $limit);
+
+               if (DBA::isResult($tagsStmt)) {
+                       $tags = DBA::toArray($tagsStmt);
+                       DI::cache()->set('global_trending_tags', $tags, Duration::HOUR);
+                       return $tags;
                }
 
-               return $tags ?: [];
+               return [];
        }
 
        /**
         * Returns a list of the most frequent local hashtags over the given period
         *
         * @param int $period Period in hours to consider posts
+        * @param int $limit  Number of returned tags
         * @return array
         * @throws \Exception
         */
        public static function getLocalTrendingHashtags(int $period, $limit = 10)
        {
                $tags = DI::cache()->get('local_trending_tags');
+               if (!empty($tags)) {
+                       return $tags;
+               } else {
+                       return self::setLocalTrendingHashtags($period, $limit);
+               }
+       }
 
-               if (empty($tags)) {
-                       $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`
-                               FROM `tag-search-view`
-                               WHERE `private` = ? AND `wall` AND `origin` AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
-                               GROUP BY `term` ORDER BY `score` DESC LIMIT ?",
-                               Item::PUBLIC, $period, $limit);
-
-                       if (DBA::isResult($tagsStmt)) {
-                               $tags = DBA::toArray($tagsStmt);
-                               DI::cache()->set('local_trending_tags', $tags, Duration::HOUR);
-                       }
+       /**
+        * Returns a list of the most frequent local hashtags over the given period
+        *
+        * @param int $period Period in hours to consider posts
+        * @param int $limit  Number of returned tags
+        * @return array
+        * @throws \Exception
+        */
+       public static function setLocalTrendingHashtags(int $period, $limit = 10)
+       {
+               $tagsStmt = DBA::p("SELECT `name` AS `term`, COUNT(*) AS `score`
+                       FROM `tag-search-view`
+                       WHERE `private` = ? AND `wall` AND `origin` AND `received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
+                       GROUP BY `term` ORDER BY `score` DESC LIMIT ?",
+                       Item::PUBLIC, $period, $limit);
+
+               if (DBA::isResult($tagsStmt)) {
+                       $tags = DBA::toArray($tagsStmt);
+                       DI::cache()->set('local_trending_tags', $tags, Duration::HOUR);
+                       return $tags;
                }
 
-               return $tags ?: [];
+               return [];
        }
 
        /**
index 7a23a2c705db6aee111bc8b76d10472a989976d1..43a18ceafc8b355d87224ad1c5245c78baa0153c 100644 (file)
@@ -25,6 +25,7 @@ use Friendica\Core\Hook;
 use Friendica\Core\Logger;
 use Friendica\Core\Worker;
 use Friendica\DI;
+use Friendica\Model\Tag;
 
 class Cron
 {
@@ -74,6 +75,10 @@ class Cron
                // Repair entries in the database
                Worker::add(PRIORITY_LOW, 'RepairDatabase');
 
+               // Update trending tags cache for the community page
+               Tag::setLocalTrendingHashtags(24, 20);
+               Tag::setGlobalTrendingHashtags(24, 20);
+
                // Hourly cron calls
                if (DI::config()->get('system', 'last_cron_hourly', 0) + 3600 < time()) {