Correction du probleme sur les commentaires speciaux

This commit is contained in:
2024-11-22 19:56:56 +01:00
parent aab9af6372
commit 614b5a5e7f
6 changed files with 154 additions and 57 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\Account;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack; use GuzzleHttp\HandlerStack;
use GuzzleHttp\Subscriber\Oauth\Oauth1; use GuzzleHttp\Subscriber\Oauth\Oauth1;
@@ -450,7 +451,14 @@ class APIController extends Controller
// Vérifier si l'entrée contient un tweet // Vérifier si l'entrée contient un tweet
if (isset($entry['content']['items'][0]['item']['content']['tweetResult'])) { if (isset($entry['content']['items'][0]['item']['content']['tweetResult'])) {
// Récupérer le texte complet du tweet // 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' // 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) public function newstweet($user)
{ {
$user = Account::find($user);
$stack = $this->Oauth1($user); $stack = $this->Oauth1($user);
$newArray = []; $newArray = [];
@@ -483,7 +493,9 @@ class APIController extends Controller
'1493931667731406848', '1493931667731406848',
'1513789977938776070', '1513789977938776070',
'1531291630040391682', '1531291630040391682',
'1741188576845455676' '1741188576845455676',
'1191374346473873409',
'55882909'
]; ];
foreach ($search as $list) { foreach ($search as $list) {
@@ -561,6 +573,10 @@ class APIController extends Controller
continue; // Si le tweet existe déjà, passer à l'itération suivante 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 // Ajouter l'ID de conversation à la liste des IDs déjà vus
$existingConversationIds[] = $conversationId; $existingConversationIds[] = $conversationId;
@@ -572,6 +588,8 @@ class APIController extends Controller
} }
} }
dd($newArray);
Cache::put('news', $newArray, 1800); Cache::put('news', $newArray, 1800);
return $newArray; return $newArray;

View File

@@ -19,11 +19,31 @@ use Throwable;
class BotController extends Controller class BotController extends Controller
{ {
public function test($user,$contest){
public function getSpecialComment($user,$id){
$user = Account::find($user); $user = Account::find($user);
$contest = Contest::findOrFail($contest);
$text = $contest->description;
$tweetspecial = $this->getSpecialComment($text,$user,$contest->tweetid);
$tweetcomment = $this->getComment($text);
$tags = $this->getTags($text);
$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(); $API = new APIController();
// On check les notifs // On check les notifs
@@ -57,6 +77,7 @@ class BotController extends Controller
// Récupérer la phrase avec le comptage le plus élevé // Récupérer la phrase avec le comptage le plus élevé
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null; $phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
if ($phrasePlusFrequente != null) { if ($phrasePlusFrequente != null) {
// Supprimer les hashtags // Supprimer les hashtags
$phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente); $phrasePlusFrequente = preg_replace('/#\w+\s?/', '', $phrasePlusFrequente);
@@ -73,8 +94,71 @@ class BotController extends Controller
return Arr::random($tweetcomments); 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) private function cosineSimilarity($text1, $text2)
{ {
$words1 = str_word_count(strtolower($text1), 1); $words1 = str_word_count(strtolower($text1), 1);
@@ -105,7 +189,6 @@ class BotController extends Controller
return $dotProduct / ($magnitude1 * $magnitude2); return $dotProduct / ($magnitude1 * $magnitude2);
} }
private function remove_emojis($string) private function remove_emojis($string)
{ {
// Match all emojis (including extended ones) // Match all emojis (including extended ones)

View File

@@ -29,7 +29,7 @@ class ContestController extends Controller
$i = 1; $i = 1;
while ($i < 50){ while ($i < 10){
$results = $crawler->filterXPath('//div[@class="timeline-item "]')->each(function ($node) { $results = $crawler->filterXPath('//div[@class="timeline-item "]')->each(function ($node) {
$id = ($node->filterXPath('//*[@class="tweet-link"]'))->attr('href'); $id = ($node->filterXPath('//*[@class="tweet-link"]'))->attr('href');
$created_at = ($node->filterXPath('//span[@class="tweet-date"]/a'))->attr('title'); $created_at = ($node->filterXPath('//span[@class="tweet-date"]/a'))->attr('title');

View File

@@ -213,12 +213,6 @@ class ProcessTweet implements ShouldQueue
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null; $phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
if ($phrasePlusFrequente != 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 // Supprimer les emojis
$phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente); $phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente);

View File

@@ -24,4 +24,6 @@ Route::get('/aplifier/list', [ContestController::class, 'twitterlist']);
Route::get('/aplifier/search', [ContestController::class, 'searchcontest']); Route::get('/aplifier/search', [ContestController::class, 'searchcontest']);
Route::get('/aplifier/news', [AccountController::class, 'tweetnews']); Route::get('/aplifier/news', [AccountController::class, 'tweetnews']);
Route::get('/tweet/{user}/{contest}', [\App\Http\Controllers\BotController::class, 'test']);