Correction du probleme sur les commentaires speciaux
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Account;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\HandlerStack;
|
||||
use GuzzleHttp\Subscriber\Oauth\Oauth1;
|
||||
@@ -450,7 +451,14 @@ class APIController extends Controller
|
||||
// Vérifier si l'entrée contient un tweet
|
||||
if (isset($entry['content']['items'][0]['item']['content']['tweetResult'])) {
|
||||
// Récupérer le texte complet du tweet
|
||||
$tweets[] = $entry['content']['items'][0]['item']['content']['tweetResult']['result']['legacy']['full_text'] ?? '';
|
||||
$tweet= $entry['content']['items'][0]['item']['content']['tweetResult']['result']['legacy']['full_text'] ?? '';
|
||||
// Supprimer les hashtags
|
||||
$tweet = preg_replace('/#\w+\s?/', '', $tweet);
|
||||
|
||||
// Supprimer les tags
|
||||
$tweet = preg_replace('/@\w+\s?/', '', $tweet);
|
||||
|
||||
$tweets[] = $tweet;
|
||||
}
|
||||
|
||||
// Vérifier si l'entrée contient un curseur, dont l'entryId commence par 'cursor-bottom'
|
||||
@@ -470,6 +478,8 @@ class APIController extends Controller
|
||||
public function newstweet($user)
|
||||
{
|
||||
|
||||
$user = Account::find($user);
|
||||
|
||||
$stack = $this->Oauth1($user);
|
||||
|
||||
$newArray = [];
|
||||
@@ -483,7 +493,9 @@ class APIController extends Controller
|
||||
'1493931667731406848',
|
||||
'1513789977938776070',
|
||||
'1531291630040391682',
|
||||
'1741188576845455676'
|
||||
'1741188576845455676',
|
||||
'1191374346473873409',
|
||||
'55882909'
|
||||
];
|
||||
|
||||
foreach ($search as $list) {
|
||||
@@ -561,6 +573,10 @@ class APIController extends Controller
|
||||
continue; // Si le tweet existe déjà, passer à l'itération suivante
|
||||
}
|
||||
|
||||
if (str_contains(strtolower($news['full_text']), ' rt ')) {
|
||||
continue; // Si le texte contient "rt", passer à l'itération suivante
|
||||
}
|
||||
|
||||
// Ajouter l'ID de conversation à la liste des IDs déjà vus
|
||||
$existingConversationIds[] = $conversationId;
|
||||
|
||||
@@ -572,6 +588,8 @@ class APIController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
dd($newArray);
|
||||
|
||||
Cache::put('news', $newArray, 1800);
|
||||
|
||||
return $newArray;
|
||||
|
||||
@@ -19,62 +19,146 @@ use Throwable;
|
||||
|
||||
class BotController extends Controller
|
||||
{
|
||||
|
||||
public function getSpecialComment($user,$id){
|
||||
|
||||
public function test($user,$contest){
|
||||
$user = Account::find($user);
|
||||
|
||||
$API = new APIController();
|
||||
$contest = Contest::findOrFail($contest);
|
||||
|
||||
// On check les notifs
|
||||
$texts = $API->getweets($user, $id);
|
||||
$text = $contest->description;
|
||||
|
||||
// Filtrer les phrases vides
|
||||
$texts = array_filter($texts, function($phrase) {
|
||||
return !empty(trim($phrase)); // Ignore les chaînes vides ou contenant uniquement des espaces
|
||||
});
|
||||
$tweetspecial = $this->getSpecialComment($text,$user,$contest->tweetid);
|
||||
|
||||
// Initialiser un tableau pour stocker les occurrences des phrases
|
||||
$occurrences = [];
|
||||
$tweetcomment = $this->getComment($text);
|
||||
|
||||
foreach ($texts as $index1 => $phrase1) {
|
||||
foreach ($texts as $index2 => $phrase2) {
|
||||
if ($index1 !== $index2) {
|
||||
$similarity = $this->cosineSimilarity($phrase1, $phrase2);
|
||||
// Vous pouvez ajuster le seuil de similarité en fonction de vos besoins
|
||||
if ($similarity > 0.5) {
|
||||
// Incrémenter le compteur pour les deux phrases
|
||||
$occurrences[$index1] = isset($occurrences[$index1]) ? $occurrences[$index1] + 1 : 1;
|
||||
$occurrences[$index2] = isset($occurrences[$index2]) ? $occurrences[$index2] + 1 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$tags = $this->getTags($text);
|
||||
|
||||
// Trouver l'index de la phrase avec le comptage le plus élevé
|
||||
$indexPhrasePlusFrequente = (!empty($occurrences)) ? array_search(max($occurrences), $occurrences) : null;
|
||||
|
||||
// Récupérer la phrase avec le comptage le plus élevé
|
||||
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
|
||||
|
||||
if ($phrasePlusFrequente != null) {
|
||||
// Supprimer les hashtags
|
||||
$phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les tags
|
||||
$phrasePlusFrequente = preg_replace('/@\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les emojis
|
||||
$phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente);
|
||||
|
||||
return $phrasePlusFrequente;
|
||||
} else {
|
||||
$tweetcomments = config('twitter.sentence_for_random_comment');
|
||||
return Arr::random($tweetcomments);
|
||||
}
|
||||
$hashtags = $this->getHashtags($text);
|
||||
|
||||
dd($tweetspecial,$tweetcomment,$tags,$hashtags);
|
||||
}
|
||||
|
||||
private function getSpecialComment($text,$user,$id){
|
||||
|
||||
//On recherche si une reponse special est attendu
|
||||
$word_special_comments = config('twitter.word_special_comment');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $word_special_comments, array_fill(0, count($word_special_comments), '/')));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
try {
|
||||
$API = new APIController();
|
||||
|
||||
// On check les notifs
|
||||
$texts = $API->getweets($user, $id);
|
||||
|
||||
// Filtrer les phrases vides
|
||||
$texts = array_filter($texts, function($phrase) {
|
||||
return !empty(trim($phrase)); // Ignore les chaînes vides ou contenant uniquement des espaces
|
||||
});
|
||||
|
||||
// Initialiser un tableau pour stocker les occurrences des phrases
|
||||
$occurrences = [];
|
||||
|
||||
foreach ($texts as $index1 => $phrase1) {
|
||||
foreach ($texts as $index2 => $phrase2) {
|
||||
if ($index1 !== $index2) {
|
||||
$similarity = $this->cosineSimilarity($phrase1, $phrase2);
|
||||
// Vous pouvez ajuster le seuil de similarité en fonction de vos besoins
|
||||
if ($similarity > 0.5) {
|
||||
// Incrémenter le compteur pour les deux phrases
|
||||
$occurrences[$index1] = isset($occurrences[$index1]) ? $occurrences[$index1] + 1 : 1;
|
||||
$occurrences[$index2] = isset($occurrences[$index2]) ? $occurrences[$index2] + 1 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Trouver l'index de la phrase avec le comptage le plus élevé
|
||||
$indexPhrasePlusFrequente = (!empty($occurrences)) ? array_search(max($occurrences), $occurrences) : null;
|
||||
|
||||
// Récupérer la phrase avec le comptage le plus élevé
|
||||
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
|
||||
|
||||
|
||||
if ($phrasePlusFrequente != null) {
|
||||
// Supprimer les hashtags
|
||||
$phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les tags
|
||||
$phrasePlusFrequente = preg_replace('/@\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les emojis
|
||||
$phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente);
|
||||
|
||||
return $phrasePlusFrequente;
|
||||
} else {
|
||||
$tweetcomments = config('twitter.sentence_for_random_comment');
|
||||
return Arr::random($tweetcomments);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$tweetcomments = config('twitter.sentence_for_random_comment');
|
||||
return Arr::random($tweetcomments);
|
||||
}
|
||||
}
|
||||
}
|
||||
private function getComment($text){
|
||||
//On recherche si un commentaire est attendu
|
||||
$word_comments = config('twitter.word_comment');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $word_comments, array_fill(0, count($word_comments), '/')));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
private function getTags($text){
|
||||
//On recherche si ça demande un tag
|
||||
$word_tags = config('twitter.word_tag');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $word_tags, array_fill(0, count($word_tags), '/')));
|
||||
$tags = collect(config('twitter.tags'));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
|
||||
//On recherche si ça demande 1 tag
|
||||
$one_people_lists = config('twitter.one_people_list');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $one_people_lists, array_fill(0, count($one_people_lists), '/')));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
$values = $tags->random(1);
|
||||
return '@' . $values[0];
|
||||
}
|
||||
|
||||
//On recherche si ça demande 2 tags
|
||||
$two_people_lists = config('twitter.two_people_list');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $two_people_lists, array_fill(0, count($two_people_lists), '/')));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
$values = $tags->random(2);
|
||||
return '@' . $values[0]. ' @' . $values[1];
|
||||
}
|
||||
|
||||
//On recherche si ça demande 3 tags ou plus
|
||||
$three_or_more_people_lists = config('twitter.three_or_more_people_list');
|
||||
$combined_regex = implode('|', array_map('preg_quote', $three_or_more_people_lists, array_fill(0, count($three_or_more_people_lists), '/')));
|
||||
if (preg_match('/' . $combined_regex . '/i', $text, $matches)) {
|
||||
$values = $tags->random(3);
|
||||
return '@' . $values[0]. ' @' . $values[1]. ' @' . $values[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
private function getHashtags($text){
|
||||
preg_match_all("/#[a-zA-Z0-9]+/", $text, $hashtags);
|
||||
|
||||
if (isset($hashtags[0])) {
|
||||
$hashtags = array_unique($hashtags[0]);
|
||||
$blacklist = config('twitter.hashtag_to_blacklist');
|
||||
|
||||
// Comparer les deux tableaux et supprimer les correspondances du premier tableau
|
||||
$resultLower = array_udiff($hashtags, $blacklist, 'strcasecmp');
|
||||
|
||||
// Construire la chaîne finale des hashtags restants
|
||||
$final = implode(" ", $resultLower);
|
||||
|
||||
return $final;
|
||||
}
|
||||
else{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
private function cosineSimilarity($text1, $text2)
|
||||
{
|
||||
$words1 = str_word_count(strtolower($text1), 1);
|
||||
@@ -105,7 +189,6 @@ class BotController extends Controller
|
||||
|
||||
return $dotProduct / ($magnitude1 * $magnitude2);
|
||||
}
|
||||
|
||||
private function remove_emojis($string)
|
||||
{
|
||||
// Match all emojis (including extended ones)
|
||||
|
||||
@@ -29,7 +29,7 @@ class ContestController extends Controller
|
||||
|
||||
$i = 1;
|
||||
|
||||
while ($i < 50){
|
||||
while ($i < 10){
|
||||
$results = $crawler->filterXPath('//div[@class="timeline-item "]')->each(function ($node) {
|
||||
$id = ($node->filterXPath('//*[@class="tweet-link"]'))->attr('href');
|
||||
$created_at = ($node->filterXPath('//span[@class="tweet-date"]/a'))->attr('title');
|
||||
|
||||
@@ -18,7 +18,7 @@ class HomeController extends Controller
|
||||
public function history()
|
||||
{
|
||||
|
||||
$contests = Contest::where('participated',true)->orderby('updated_at','desc')->paginate(20);
|
||||
$contests = Contest::where('participated', true)->orderby('updated_at', 'desc')->paginate(20);
|
||||
|
||||
SEOTools::setTitle('Mon historique');
|
||||
|
||||
|
||||
@@ -213,12 +213,6 @@ class ProcessTweet implements ShouldQueue
|
||||
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
|
||||
|
||||
if ($phrasePlusFrequente != null) {
|
||||
// Supprimer les hashtags
|
||||
$phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les tags
|
||||
$phrasePlusFrequente = preg_replace('/@\w+\s?/', '', $phrasePlusFrequente);
|
||||
|
||||
// Supprimer les emojis
|
||||
$phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user