Recherche des tweets de réponse avec l'API Tweeter
This commit is contained in:
118
app/Http/Controllers/BotController.php
Normal file
118
app/Http/Controllers/BotController.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\TwitterController;
|
||||
use App\Models\Account;
|
||||
use App\Models\Block;
|
||||
use App\Models\Concour;
|
||||
use App\Models\Contest;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Laravel\Dusk\Browser;
|
||||
use Symfony\Component\BrowserKit\HttpBrowser;
|
||||
use Symfony\Component\HttpClient\HttpClient;
|
||||
use Illuminate\Http\Request;
|
||||
use Throwable;
|
||||
|
||||
class BotController extends Controller
|
||||
{
|
||||
|
||||
public function getSpecialComment($user,$id){
|
||||
|
||||
$user = Account::find($user);
|
||||
|
||||
$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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function cosineSimilarity($text1, $text2)
|
||||
{
|
||||
$words1 = str_word_count(strtolower($text1), 1);
|
||||
$words2 = str_word_count(strtolower($text2), 1);
|
||||
|
||||
$allWords = array_unique(array_merge($words1, $words2));
|
||||
$vector1 = $vector2 = [];
|
||||
|
||||
// Construire les vecteurs avec les fréquences des mots
|
||||
foreach ($allWords as $word) {
|
||||
$vector1[] = in_array($word, $words1) ? 1 : 0;
|
||||
$vector2[] = in_array($word, $words2) ? 1 : 0;
|
||||
}
|
||||
|
||||
$dotProduct = 0;
|
||||
|
||||
// Calculer le produit scalaire des vecteurs
|
||||
for ($i = 0; $i < count($allWords); $i++) {
|
||||
$dotProduct += $vector1[$i] * $vector2[$i];
|
||||
}
|
||||
|
||||
$magnitude1 = sqrt(array_sum($vector1));
|
||||
$magnitude2 = sqrt(array_sum($vector2));
|
||||
|
||||
if ($magnitude1 * $magnitude2 == 0) {
|
||||
return 0; // Pour éviter une division par zéro
|
||||
}
|
||||
|
||||
return $dotProduct / ($magnitude1 * $magnitude2);
|
||||
}
|
||||
|
||||
private function remove_emojis($string)
|
||||
{
|
||||
// Match all emojis (including extended ones)
|
||||
$regex_emojis = '/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F900}-\x{1F9FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}]/u';
|
||||
$clear_string = preg_replace($regex_emojis, '', $string);
|
||||
|
||||
return $clear_string;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user