Move trending tags queries to Model\Term
This commit is contained in:
parent
4c45cb864a
commit
9e8ae520b8
|
@ -19,9 +19,9 @@ class TrendingTags
|
||||||
public static function getHTML($content = 'global', int $period = 24)
|
public static function getHTML($content = 'global', int $period = 24)
|
||||||
{
|
{
|
||||||
if ($content == 'local') {
|
if ($content == 'local') {
|
||||||
$tags = self::getLocalTrendingTags($period);
|
$tags = Term::getLocalTrendingHashtags($period, 20);
|
||||||
} else {
|
} else {
|
||||||
$tags = self::getGlobalTrendingTags($period);
|
$tags = Term::getGlobalTrendingHashtags($period, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl');
|
$tpl = Renderer::getMarkupTemplate('widget/trending_tags.tpl');
|
||||||
|
@ -33,82 +33,4 @@ class TrendingTags
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list of the most frequent global tags over the given period
|
|
||||||
*
|
|
||||||
* @param int $period Period in hours to consider posts
|
|
||||||
* @return array
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
private static function getGlobalTrendingTags(int $period)
|
|
||||||
{
|
|
||||||
$tags = Cache::get('global_trending_tags');
|
|
||||||
|
|
||||||
if (!$tags) {
|
|
||||||
$tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score`
|
|
||||||
FROM `term` t
|
|
||||||
JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid`
|
|
||||||
JOIN `thread` ON `thread`.`iid` = i.`id`
|
|
||||||
WHERE `thread`.`visible`
|
|
||||||
AND NOT `thread`.`deleted`
|
|
||||||
AND NOT `thread`.`moderated`
|
|
||||||
AND NOT `thread`.`private`
|
|
||||||
AND t.`uid` = 0
|
|
||||||
AND t.`otype` = ?
|
|
||||||
AND t.`type` = ?
|
|
||||||
AND t.`term` != ''
|
|
||||||
AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
|
|
||||||
GROUP BY `term`
|
|
||||||
ORDER BY `score` DESC
|
|
||||||
LIMIT 20", Term::OBJECT_TYPE_POST, Term::HASHTAG, $period);
|
|
||||||
|
|
||||||
if (DBA::isResult($tags)) {
|
|
||||||
$tags = DBA::toArray($tagsStmt);
|
|
||||||
Cache::set('global_trending_tags', $tags, Cache::HOUR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $tags ?: [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list of the most frequent local tags over the given period
|
|
||||||
*
|
|
||||||
* @param int $period Period in hours to consider posts
|
|
||||||
* @return array
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
private static function getLocalTrendingTags(int $period)
|
|
||||||
{
|
|
||||||
$tags = Cache::get('local_trending_tags');
|
|
||||||
|
|
||||||
if (!$tags) {
|
|
||||||
$tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score`
|
|
||||||
FROM `term` t
|
|
||||||
JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid`
|
|
||||||
JOIN `thread` ON `thread`.`iid` = i.`id`
|
|
||||||
JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall`
|
|
||||||
WHERE `thread`.`visible`
|
|
||||||
AND NOT `thread`.`deleted`
|
|
||||||
AND NOT `thread`.`moderated`
|
|
||||||
AND NOT `thread`.`private`
|
|
||||||
AND `thread`.`wall`
|
|
||||||
AND `thread`.`origin`
|
|
||||||
AND t.`otype` = ?
|
|
||||||
AND t.`type` = ?
|
|
||||||
AND t.`term` != ''
|
|
||||||
AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
|
|
||||||
GROUP BY `term`
|
|
||||||
ORDER BY `score` DESC
|
|
||||||
LIMIT 20", Term::OBJECT_TYPE_POST, Term::HASHTAG, $period);
|
|
||||||
|
|
||||||
if (DBA::isResult($tags)) {
|
|
||||||
$tags = DBA::toArray($tagsStmt);
|
|
||||||
Cache::set('local_trending_tags', $tags, Cache::HOUR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $tags ?: [];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
*/
|
*/
|
||||||
namespace Friendica\Model;
|
namespace Friendica\Model;
|
||||||
|
|
||||||
|
use Friendica\Core\Cache;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
@ -47,6 +48,94 @@ class Term
|
||||||
const OBJECT_TYPE_POST = 1;
|
const OBJECT_TYPE_POST = 1;
|
||||||
const OBJECT_TYPE_PHOTO = 2;
|
const OBJECT_TYPE_PHOTO = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of the most frequent global hashtags over the given period
|
||||||
|
*
|
||||||
|
* @param int $period Period in hours to consider posts
|
||||||
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function getGlobalTrendingHashtags(int $period, $limit = 10)
|
||||||
|
{
|
||||||
|
$tags = Cache::get('global_trending_tags');
|
||||||
|
|
||||||
|
if (!$tags) {
|
||||||
|
$tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score`
|
||||||
|
FROM `term` t
|
||||||
|
JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid`
|
||||||
|
JOIN `thread` ON `thread`.`iid` = i.`id`
|
||||||
|
WHERE `thread`.`visible`
|
||||||
|
AND NOT `thread`.`deleted`
|
||||||
|
AND NOT `thread`.`moderated`
|
||||||
|
AND NOT `thread`.`private`
|
||||||
|
AND t.`uid` = 0
|
||||||
|
AND t.`otype` = ?
|
||||||
|
AND t.`type` = ?
|
||||||
|
AND t.`term` != ''
|
||||||
|
AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
|
||||||
|
GROUP BY `term`
|
||||||
|
ORDER BY `score` DESC
|
||||||
|
LIMIT ?",
|
||||||
|
Term::OBJECT_TYPE_POST,
|
||||||
|
Term::HASHTAG,
|
||||||
|
$period,
|
||||||
|
$limit
|
||||||
|
);
|
||||||
|
|
||||||
|
if (DBA::isResult($tags)) {
|
||||||
|
$tags = DBA::toArray($tagsStmt);
|
||||||
|
Cache::set('global_trending_tags', $tags, Cache::HOUR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tags ?: [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of the most frequent local hashtags over the given period
|
||||||
|
*
|
||||||
|
* @param int $period Period in hours to consider posts
|
||||||
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function getLocalTrendingHashtags(int $period, $limit = 10)
|
||||||
|
{
|
||||||
|
$tags = Cache::get('local_trending_tags');
|
||||||
|
|
||||||
|
if (!$tags) {
|
||||||
|
$tagsStmt = DBA::p("SELECT t.`term`, COUNT(*) AS `score`
|
||||||
|
FROM `term` t
|
||||||
|
JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid`
|
||||||
|
JOIN `thread` ON `thread`.`iid` = i.`id`
|
||||||
|
JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall`
|
||||||
|
WHERE `thread`.`visible`
|
||||||
|
AND NOT `thread`.`deleted`
|
||||||
|
AND NOT `thread`.`moderated`
|
||||||
|
AND NOT `thread`.`private`
|
||||||
|
AND `thread`.`wall`
|
||||||
|
AND `thread`.`origin`
|
||||||
|
AND t.`otype` = ?
|
||||||
|
AND t.`type` = ?
|
||||||
|
AND t.`term` != ''
|
||||||
|
AND i.`received` > DATE_SUB(NOW(), INTERVAL ? HOUR)
|
||||||
|
GROUP BY `term`
|
||||||
|
ORDER BY `score` DESC
|
||||||
|
LIMIT ?",
|
||||||
|
Term::OBJECT_TYPE_POST,
|
||||||
|
Term::HASHTAG,
|
||||||
|
$period,
|
||||||
|
$limit
|
||||||
|
);
|
||||||
|
|
||||||
|
if (DBA::isResult($tags)) {
|
||||||
|
$tags = DBA::toArray($tagsStmt);
|
||||||
|
Cache::set('local_trending_tags', $tags, Cache::HOUR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $tags ?: [];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates the legacy item.tag field comma-separated BBCode string from an item ID.
|
* Generates the legacy item.tag field comma-separated BBCode string from an item ID.
|
||||||
* Includes only hashtags, implicit and explicit mentions.
|
* Includes only hashtags, implicit and explicit mentions.
|
||||||
|
|
Loading…
Reference in a new issue