7.7 KiB
7.7 KiB
Author: Jorge Maldonado Ventura Date: 2017-04-22 20:38 Modified: 2020-06-11 11:38 Save_as: buscar.php Status: hidden Title: Resultados
$web_content = json_decode(file_get_contents('tipuesearch_content.json'), true);
$stop_words_ignored = false;
if (isset($_GET['q'])) {
$search_str = trim($_REQUEST['q']);
$keywords = explode(' ', $search_str);
$keywords_temp = NULL;
foreach ($keywords as $keyword) {
$is_stop_word = false;
foreach ($STOP_WORDS as $stop_word) {
if ($keyword == $stop_word) {
$is_stop_word = true;
$stop_words_ignored = true;
break;
}
}
if (! $is_stop_word) {
$keywords_temp .= $keyword;
}
}
$keywords = $keywords_temp;
$keywords = explode(' ', $keywords);
$found_results = [];
foreach ($web_content["videos"] as $page) {
$score = 0;
$page['description'] = htmlentities($page['description']);
foreach ($keywords as $word) {
if (preg_match("/$word/i", $page['url'])) {
$score += 35;
}
if (preg_match("/$word/i", $page['title'])) {
$score += 35;
}
if (preg_match("/$word/i", $page['tags'])) {
$score += 30;
}
// It replaces uppercase matches with lowercase matches, but it's fine for now.
if ($stop_words_ignored == 1) {
$page['description'] = preg_replace("/$word/i", $word, $page['description'], -1, $match_count);
} else {
$page['description'] = preg_replace("/$word/i", $word, $page['description'], -1, $match_count);
}
if ($match_count > 0) {
$score += 10 * $match_count;
}
}
if ($score != 0) {
$found_results[] = [
'score' => $score,
'title' => $page['title'],
'time' => $page['time'],
'videoThumbnail' => $page['videoThumbnail'],
'url' => $page['url'],
'published' => $page['published'],
'publishedText' => $page['publishedText'],
'author' => $page['author'],
'authorUrl' => $page['authorUrl'],
];
}
}
/**
* Compare results score.
*/
function comp_result_score($a, $b) {
if ($a['score'] == $b['score']) {
return 0;
}
return ($a['score'] > $b['score']) ? -1 : 1;
};
$stop_results = $found_results;
if ($stop_words_ignored) {
printf('<div id="tipue_search_warning">%s</div>', 'Las palabras comunes se ignoran en gran parte');
$stop_results = NULL;
}
$found_results_count = count($found_results);
if ($found_results_count > 0) {
usort($found_results, 'comp_result_score');
if ($found_results_count == 1) {
$found_results_count_str = NULL;
}
} else if ($found_results_count == 0) {
$found_results_count_str = NULL;
printf('<div id="tipue_search_warning">%s</div>', 'No se ha encontrado nada');
}
if (!empty($stop_results)) {
foreach ($found_results as $found_result) {
printf('
<article class="col-md-3 video" itemscope itemtype="https://schema.org/Movie">
<a href="%s">
<div class="area">
<div class="mask">
<div class="vertical-align">
<i class="soumaicon play"><svg><use href="/theme/images/svg/master.svg#play"></use></svg></i>
</div>
</div>
<img itemprop="image" src="%s" alt="%s" class="img-fluid">
<span class="duration">%s</span>
</div>
</a>
<h2 itemprop="name">
<a href="%s" rel="bookmark" title="Ver %s">%s</a>
</h2>
<!-- post footer -->
<footer class="card-content-footer mb-4">
<span class="soumaicon text-info">
<svg>
<use href="/theme/images/svg/master.svg#calendar"></use>
</svg>
</span>
<time class="entry-date published" datetime="%s" itemprop="datePublished">
<small>%s</small>
</time>
<span class="soumaicon text-info">
<svg>
<use href="/theme/images/svg/master.svg#user"></use>
</svg>
</span>
<small itemprop="director" itemscope itemtype="https://schema.org/Person">
<a href="%s" title="Autor del artículo" itemprop="name">%s</a>
</small>
</footer>
<!-- end of post footer -->
</article>',
$found_result['url'], $found_result['videoThumbnail'], $found_result['title'],
$found_result['time'], $found_result['url'], $found_result['title'],
$found_result['title'], $found_result['published'], $found_result['publishedText'],
$found_result['authorUrl'], $found_result['author']);
}
}
} else { printf('
%s
', 'Aún no has buscado');
}
?>