Correction des différents bugs
This commit is contained in:
@@ -53,4 +53,4 @@ class ImportUsersCommand extends Command
|
||||
$this->info("Importation terminée.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\HandlerStack;
|
||||
use GuzzleHttp\Subscriber\Oauth\Oauth1;
|
||||
@@ -306,60 +307,85 @@ class APIController extends Controller
|
||||
|
||||
public function unread($user)
|
||||
{
|
||||
$stack = $this->Oauth1($user);
|
||||
try{
|
||||
$stack = $this->Oauth1($user);
|
||||
|
||||
// Créer le client Guzzle avec le handler stack
|
||||
$client = new Client([
|
||||
'base_uri' => 'https://api.twitter.com/2/',
|
||||
'handler' => $stack,
|
||||
'proxy' => [
|
||||
'http' => $user->proxy,
|
||||
]
|
||||
]);
|
||||
|
||||
|
||||
// Effectuer la requête POST avec OAuth et les en-têtes personnalisés
|
||||
$res = $client->get('badge_count/badge_count.json?supports_ntab_urt=true', [
|
||||
'headers' => $this->twitterHeaders, // Ajouter les en-têtes ici
|
||||
'auth' => 'oauth' // Assurez-vous que l'authentification OAuth est incluse
|
||||
]);
|
||||
|
||||
|
||||
$unred = json_decode($res->getBody()->getContents(), true);
|
||||
|
||||
// L'URL des deux liens
|
||||
$url = 'https://myx.ovh/accounts/'.$user->id;
|
||||
|
||||
$keyboard = [
|
||||
'inline_keyboard' => [
|
||||
[
|
||||
['text' => 'Cliquez ici pour plus d\'infos', 'url' => $url]
|
||||
// Créer le client Guzzle avec le handler stack
|
||||
$client = new Client([
|
||||
'base_uri' => 'https://api.twitter.com/2/',
|
||||
'handler' => $stack,
|
||||
'proxy' => [
|
||||
'http' => $user->proxy,
|
||||
]
|
||||
]
|
||||
];
|
||||
]);
|
||||
|
||||
// Convertir le tableau de clavier en JSON
|
||||
$keyboardJson = json_encode($keyboard);
|
||||
|
||||
if ($unred['dm_unread_count'] > 0) {
|
||||
// Effectuer la requête POST avec OAuth et les en-têtes personnalisés
|
||||
$res = $client->get('badge_count/badge_count.json?supports_ntab_urt=true', [
|
||||
'headers' => $this->twitterHeaders, // Ajouter les en-têtes ici
|
||||
'auth' => 'oauth' // Assurez-vous que l'authentification OAuth est incluse
|
||||
]);
|
||||
|
||||
$text = "Un nouveau message pour le compte ".$user->name;
|
||||
|
||||
$unred = json_decode($res->getBody()->getContents(), true);
|
||||
|
||||
// L'URL des deux liens
|
||||
$url = 'https://myx.ovh/accounts/'.$user->id;
|
||||
|
||||
$keyboard = [
|
||||
'inline_keyboard' => [
|
||||
[
|
||||
['text' => 'Cliquez ici pour plus d\'infos', 'url' => $url]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
// Convertir le tableau de clavier en JSON
|
||||
$keyboardJson = json_encode($keyboard);
|
||||
|
||||
if ($unred['dm_unread_count'] > 0) {
|
||||
|
||||
$text = "Un nouveau message pour le compte ".$user->name;
|
||||
Http::get('https://api.telegram.org/bot6784810105:AAEq3emnkRwdyvCLC-iqdIjVJ2Ke6HwwGjg/sendMessage', [
|
||||
'chat_id' => '1970698501', // Remplacez par votre chat_id
|
||||
'text' => $text,
|
||||
'reply_markup' => $keyboardJson
|
||||
]);
|
||||
|
||||
|
||||
}elseif ($unred['ntab_unread_count'] > 1) {
|
||||
|
||||
$text = "Une notification pour le compte ".$user->name;
|
||||
Http::get('https://api.telegram.org/bot6784810105:AAEq3emnkRwdyvCLC-iqdIjVJ2Ke6HwwGjg/sendMessage', [
|
||||
'chat_id' => '1970698501', // Remplacez par votre chat_id
|
||||
'text' => $text,
|
||||
'reply_markup' => $keyboardJson
|
||||
]);
|
||||
|
||||
}
|
||||
}catch (Exception $exception){
|
||||
$text = "Le compte Twitter " . $user->name . " : " . $exception->getMessage();
|
||||
|
||||
// L'URL des deux liens
|
||||
$url = 'https://myx.ovh/accounts/'.$user->id;
|
||||
|
||||
$keyboard = [
|
||||
'inline_keyboard' => [
|
||||
[
|
||||
['text' => 'Cliquez ici pour plus d\'infos', 'url' => $url]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
// Convertir le tableau de clavier en JSON
|
||||
$keyboardJson = json_encode($keyboard);
|
||||
|
||||
// Envoyer le message avec les deux boutons
|
||||
Http::get('https://api.telegram.org/bot6784810105:AAEq3emnkRwdyvCLC-iqdIjVJ2Ke6HwwGjg/sendMessage', [
|
||||
'chat_id' => '1970698501', // Remplacez par votre chat_id
|
||||
'text' => $text,
|
||||
'reply_markup' => $keyboardJson
|
||||
]);
|
||||
|
||||
|
||||
}elseif ($unred['ntab_unread_count'] > 0) {
|
||||
|
||||
$text = "Une notification pour le compte ".$user->name;
|
||||
Http::get('https://api.telegram.org/bot6784810105:AAEq3emnkRwdyvCLC-iqdIjVJ2Ke6HwwGjg/sendMessage', [
|
||||
'chat_id' => '1970698501', // Remplacez par votre chat_id
|
||||
'text' => $text,
|
||||
'reply_markup' => $keyboardJson
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,27 +2,198 @@
|
||||
|
||||
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 test($user,$contest){
|
||||
|
||||
public function index()
|
||||
{
|
||||
|
||||
$response = Http::get('https://rtandfollow.com/apibot');
|
||||
$tweets = $response->json();
|
||||
|
||||
$accounts = Account::where('enable', true)->get();
|
||||
|
||||
foreach($accounts as $account){
|
||||
try{
|
||||
$user = $account;
|
||||
$twitter = new TwitterController();
|
||||
$browser = $twitter->connexion($user);
|
||||
$url = $browser->driver->getCurrentURL();
|
||||
|
||||
if($url == 'https://x.com/account/access'){
|
||||
$browser->quit();
|
||||
exec('taskkill /f /im chrome.exe');
|
||||
}else{
|
||||
|
||||
shuffle($tweets);
|
||||
|
||||
$a = 1;
|
||||
|
||||
foreach($tweets as $status) {
|
||||
|
||||
$tweetid = $status['tweetid'];
|
||||
$screen_name = $status['organizer']['screen_name'];
|
||||
$text = $status['description'];
|
||||
|
||||
$concours = DB::table('concours')->where('tweet_id', $tweetid)->where('user', $user->id)->first();
|
||||
$blocking = DB::table('blocks')->where('screen_name', $screen_name)->first();
|
||||
|
||||
$containsBlacklistedWord = preg_match('/' . implode('|', array_map('preg_quote', config('twitter.giveaway_to_blacklist'), ['/'])) . '/i', $text) === 1;
|
||||
|
||||
//On verifie que le concours n'est pas dans la BDD ou que l'utilisateur n'est pas bloqué
|
||||
if (empty($concours) and empty($blocking) and $containsBlacklistedWord !== true) {
|
||||
|
||||
//On recherche la date de fin du concours
|
||||
$fin = $status['fin'];
|
||||
|
||||
if ($fin >= Carbon::now()->format('Y-m-d')) {
|
||||
|
||||
try {
|
||||
|
||||
$tweetspecial = $this->getSpecialComment($text,$tweetid,$screen_name);
|
||||
|
||||
$tweetcomment = $this->getComment($text);
|
||||
|
||||
$tags = $this->getTags($text);
|
||||
|
||||
$hashtags = $this->getHashtags($text);
|
||||
|
||||
$follows = $this->getFollows($text);
|
||||
|
||||
$concours = Concour::create([
|
||||
'description' => $text,
|
||||
'tweet_id' => $tweetid,
|
||||
'name' => $screen_name,
|
||||
'fin' => $fin,
|
||||
'user' => $user->id,
|
||||
]);
|
||||
|
||||
$twitter->retweet($browser, $tweetid);
|
||||
|
||||
if (isset($tweetspecial) && isset($tags)) {
|
||||
$retweet = $tweetspecial . ' ' . $tags . ' ' . $hashtags;
|
||||
$encode = urlencode($retweet);
|
||||
|
||||
//On reply
|
||||
$twitter->reply($browser, $tweetid, $encode);
|
||||
|
||||
}elseif(isset($tweetcomment) && isset($tags)) {
|
||||
$comments = config('twitter.sentence_for_tag');
|
||||
$comment = Arr::random($comments);
|
||||
$retweet = $comment . ' ' . $tags . ' ' . $hashtags;
|
||||
$encode = urlencode($retweet);
|
||||
|
||||
//On reply
|
||||
$twitter->reply($browser, $tweetid, $encode);
|
||||
|
||||
}elseif(isset($tweetspecial)){
|
||||
$retweet = $tweetspecial . ' ' . $hashtags;
|
||||
$encode = urlencode($retweet);
|
||||
|
||||
//On reply
|
||||
$twitter->reply($browser, $tweetid, $encode);
|
||||
|
||||
}elseif(isset($tweetcomment)){
|
||||
$comments = config('twitter.sentence_for_random_comment');
|
||||
$comment = Arr::random($comments);
|
||||
$retweet = $comment . ' ' . $hashtags;
|
||||
$encode = urlencode($retweet);
|
||||
|
||||
//On reply
|
||||
$twitter->reply($browser, $tweetid, $encode);
|
||||
|
||||
}elseif(isset($tags)){
|
||||
$retweet = $tags;
|
||||
$encode = urlencode($retweet);
|
||||
|
||||
//On reply
|
||||
$twitter->reply($browser, $tweetid, $encode);
|
||||
}
|
||||
|
||||
//On follow le créateur
|
||||
$twitter->follow($browser, $screen_name);
|
||||
|
||||
if(isset($follows)){
|
||||
foreach ($follows as $follow){
|
||||
$twitter->follow($browser, $follow);
|
||||
}
|
||||
}
|
||||
|
||||
//On like si besoin
|
||||
preg_match("/LIKE/i", $text, $like);
|
||||
if (isset($like[0])) {
|
||||
$twitter->like($browser, $tweetid);
|
||||
}
|
||||
|
||||
$yes = rand(0,2);
|
||||
|
||||
if($yes == 1){
|
||||
|
||||
$new = $this->combinefeeds()[0];
|
||||
$title = (strlen($new['title']) > 205) ? substr($new['title'],0,205).'...' : $new['title'];
|
||||
//$url = $this->urlshort($new['url']);
|
||||
$short = $title.' '.$new['url'];
|
||||
$short = urlencode($short);
|
||||
//On tweet une info
|
||||
$twitter->tweet($browser, $short);
|
||||
|
||||
}
|
||||
|
||||
$a++;
|
||||
|
||||
if ($a > 2) {
|
||||
echo $user->name.' a bien participé; ';
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} catch (Throwable $e) {
|
||||
|
||||
report($e);
|
||||
|
||||
$a++;
|
||||
|
||||
if ($a > 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($browser) && $browser instanceof Browser) {
|
||||
// Récupérez les cookies de la session actuelle
|
||||
$cookies = $browser->driver->manage()->getCookies();
|
||||
|
||||
// Sauvegardez les cookies dans un fichier au format JSON
|
||||
$user->cookies = serialize($cookies);
|
||||
$user->save();
|
||||
|
||||
$browser->quit();
|
||||
}
|
||||
}
|
||||
}catch (Throwable $e) {
|
||||
report($e);
|
||||
}
|
||||
}
|
||||
|
||||
exec('taskkill /f /im chrome.exe');
|
||||
|
||||
}
|
||||
|
||||
public function process($user,$id){
|
||||
$user = Account::find($user);
|
||||
|
||||
$contest = Contest::findOrFail($contest);
|
||||
$contest = Contest::findOrFail($id);
|
||||
|
||||
$text = $contest->description;
|
||||
|
||||
@@ -77,14 +248,7 @@ class BotController extends Controller
|
||||
// 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);
|
||||
|
||||
@@ -189,6 +353,18 @@ class BotController extends Controller
|
||||
|
||||
return $dotProduct / ($magnitude1 * $magnitude2);
|
||||
}
|
||||
private function getFollows(mixed $text)
|
||||
{
|
||||
preg_match_all("/\s@([\w_-]+)/", $text, $mentions);
|
||||
|
||||
if(isset($mentions[1])){
|
||||
$mentions = array_unique($mentions[1]);
|
||||
return $mentions;
|
||||
|
||||
}else{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
private function remove_emojis($string)
|
||||
{
|
||||
// Match all emojis (including extended ones)
|
||||
@@ -198,4 +374,6 @@ class BotController extends Controller
|
||||
return $clear_string;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ use Artesaos\SEOTools\Facades\SEOTools;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use LanguageDetector\LanguageDetector;
|
||||
use Symfony\Component\BrowserKit\HttpBrowser;
|
||||
use Symfony\Component\HttpClient\HttpClient;
|
||||
|
||||
@@ -29,7 +30,7 @@ class ContestController extends Controller
|
||||
|
||||
$i = 1;
|
||||
|
||||
while ($i < 10){
|
||||
while ($i < 25){
|
||||
$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');
|
||||
@@ -61,7 +62,14 @@ class ContestController extends Controller
|
||||
$fake = Block::where('screen_name', $screen)->first();
|
||||
$containsBlacklistedWord = preg_match('/' . implode('|', array_map('preg_quote', config('twitter.giveaway_to_blacklist'), ['/'])) . '/i', $text) === 1;
|
||||
|
||||
if(!$contest && !$fake && $nbretweet > 100 && $containsBlacklistedWord !== true) {
|
||||
$language = new LanguageDetector();
|
||||
$lang = $language->evaluate($text);
|
||||
|
||||
$created_at = str_replace(' · ', ' ', $created_at);
|
||||
$created_at = Carbon::parse($created_at)->format('Y-m-d H:i:s');
|
||||
$nowMinusOneMonth = Carbon::now()->subMonth();
|
||||
|
||||
if(!$contest && !$fake && $nbretweet > 100 && $containsBlacklistedWord !== true && $lang == 'fr' && $created_at >= $nowMinusOneMonth){
|
||||
$regex_detect_rts =
|
||||
[
|
||||
"/\bRT\b/",
|
||||
@@ -101,6 +109,7 @@ class ContestController extends Controller
|
||||
'nbretweet' => $nbretweet,
|
||||
'nblike' => $nblike,
|
||||
'nbreply' => $nbreply,
|
||||
'created_at' => $created_at,
|
||||
]);
|
||||
|
||||
}
|
||||
@@ -125,33 +134,14 @@ class ContestController extends Controller
|
||||
public function searchcontest()
|
||||
{
|
||||
$search = [
|
||||
'giveaway',
|
||||
'#concours',
|
||||
'concours like',
|
||||
'concours rt',
|
||||
'concours follow',
|
||||
'#JeuConcours',
|
||||
'JeuConcours',
|
||||
'jeu concours',
|
||||
'offre follow gagnant',
|
||||
'concours pour gagner',
|
||||
'gagner rt',
|
||||
'Gagnez rt follow',
|
||||
'RT follow',
|
||||
'concours rt like',
|
||||
'concours rt fav',
|
||||
'RT tweet Follow',
|
||||
'concours rt follow',
|
||||
'rt follow tas',
|
||||
'rt follow tirage au sort',
|
||||
'rt follow gagner',
|
||||
'rt follow commente',
|
||||
'rt suivre concours',
|
||||
'rt suivez concours',
|
||||
'rt suivre tirage au sort',
|
||||
'rt suivre tas',
|
||||
'concours remporter',
|
||||
'remporter rt',
|
||||
'concours tas le',
|
||||
'concours résultats le rt',
|
||||
'tirage au sort concours',
|
||||
@@ -208,7 +198,14 @@ class ContestController extends Controller
|
||||
$fake = Block::where('screen_name', $screen)->first();
|
||||
$containsBlacklistedWord = preg_match('/' . implode('|', array_map('preg_quote', config('twitter.giveaway_to_blacklist'), ['/'])) . '/i', $text) === 1;
|
||||
|
||||
if (!$contest && !$fake && $nbretweet > 1000 && $containsBlacklistedWord !== true) {
|
||||
$language = new LanguageDetector();
|
||||
$lang = $language->evaluate($text);
|
||||
|
||||
$created_at = str_replace(' · ', ' ', $created_at);
|
||||
$created_at = Carbon::parse($created_at)->format('Y-m-d H:i:s');
|
||||
$nowMinusOneMonth = Carbon::now()->subMonth();
|
||||
|
||||
if (!$contest && !$fake && $nbretweet > 500 && $containsBlacklistedWord !== true && $lang == 'fr' && $created_at >= $nowMinusOneMonth) {
|
||||
|
||||
$regex_detect_rts =
|
||||
[
|
||||
@@ -252,6 +249,7 @@ class ContestController extends Controller
|
||||
'nbretweet' => $nbretweet,
|
||||
'nblike' => $nblike,
|
||||
'nbreply' => $nbreply,
|
||||
'created_at' => $created_at,
|
||||
]);
|
||||
|
||||
}
|
||||
@@ -438,72 +436,72 @@ class ContestController extends Controller
|
||||
}
|
||||
|
||||
private function getDate($string) {
|
||||
// Pattern pour détecter les dates au format JJ/MM ou JJ.MM
|
||||
$pattern_jjmm = '/\b(\d{1,2})(\/|\.)\d{1,2}\b/';
|
||||
// Pattern pour détecter les dates au format JJ/MM ou JJ.MM
|
||||
$pattern_jjmm = '/\b(\d{1,2})(\/|\.)\d{1,2}\b/';
|
||||
|
||||
// Pattern pour détecter les dates du style "1 août" (ou autre mois en français)
|
||||
$mois_fr = array(
|
||||
'janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
||||
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'
|
||||
);
|
||||
$pattern_jj_mois_fr = '/\b(\d{1,2}) (' . implode('|', $mois_fr) . ')\b/i';
|
||||
// Pattern pour détecter les dates du style "1 août" (ou autre mois en français)
|
||||
$mois_fr = array(
|
||||
'janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
||||
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'
|
||||
);
|
||||
$pattern_jj_mois_fr = '/\b(\d{1,2}) (' . implode('|', $mois_fr) . ')\b/i';
|
||||
|
||||
// Stocker les correspondances dans un tableau
|
||||
$correspondances = [];
|
||||
// Stocker les correspondances dans un tableau
|
||||
$correspondances = [];
|
||||
|
||||
// Chercher les dates au format JJ/MM ou JJ.MM
|
||||
if (preg_match_all($pattern_jjmm, $string, $matches)) {
|
||||
$correspondances = array_merge($correspondances, $matches[0]);
|
||||
}
|
||||
|
||||
// Chercher les dates du style "1 août" (ou autre mois en français)
|
||||
if (preg_match_all($pattern_jj_mois_fr, $string, $matches)) {
|
||||
// Convertir le mois en format numérique (1 pour janvier, 2 pour février, etc.)
|
||||
$mois_numerique = array_flip($mois_fr);
|
||||
foreach ($matches[2] as $index => $mois) {
|
||||
$matches[0][$index] = $matches[1][$index] . '/' . str_pad($mois_numerique[strtolower($mois)] + 1, 2, '0', STR_PAD_LEFT);
|
||||
// Chercher les dates au format JJ/MM ou JJ.MM
|
||||
if (preg_match_all($pattern_jjmm, $string, $matches)) {
|
||||
$correspondances = array_merge($correspondances, $matches[0]);
|
||||
}
|
||||
$correspondances = array_merge($correspondances, $matches[0]);
|
||||
|
||||
// Chercher les dates du style "1 août" (ou autre mois en français)
|
||||
if (preg_match_all($pattern_jj_mois_fr, $string, $matches)) {
|
||||
// Convertir le mois en format numérique (1 pour janvier, 2 pour février, etc.)
|
||||
$mois_numerique = array_flip($mois_fr);
|
||||
foreach ($matches[2] as $index => $mois) {
|
||||
$matches[0][$index] = $matches[1][$index] . '/' . str_pad($mois_numerique[strtolower($mois)] + 1, 2, '0', STR_PAD_LEFT);
|
||||
}
|
||||
$correspondances = array_merge($correspondances, $matches[0]);
|
||||
}
|
||||
|
||||
// Vérifier s'il y a des dates détectées
|
||||
if (empty($correspondances)) {
|
||||
return ""; // Retourne une chaîne vide si aucune date n'est trouvée
|
||||
}
|
||||
|
||||
// Si plusieurs dates sont trouvées, trier les dates et récupérer la dernière
|
||||
usort($correspondances, function ($a, $b) {
|
||||
$dateA = strtotime($a);
|
||||
$dateB = strtotime($b);
|
||||
return $dateB - $dateA; // Tri décroissant
|
||||
});
|
||||
|
||||
// Récupérer la dernière date détectée après le tri
|
||||
$derniere_date = $correspondances[0];
|
||||
|
||||
// Convertir la dernière date au format "Y-m-d" (année-mois-jour)
|
||||
if (strpos($derniere_date, '/') !== false) {
|
||||
// Format JJ/MM
|
||||
list($jour, $mois) = explode('/', $derniere_date);
|
||||
$annee = date('Y');
|
||||
} elseif (strpos($derniere_date, '.') !== false) {
|
||||
// Format JJ.MM
|
||||
list($jour, $mois) = explode('.', $derniere_date);
|
||||
$annee = date('Y');
|
||||
} else {
|
||||
return ""; // Cas inattendu (ne devrait pas se produire)
|
||||
}
|
||||
|
||||
// Convertir en date avec gestion des erreurs (ex. : février 30)
|
||||
try {
|
||||
$date_convertie = date('Y-m-d', strtotime("$annee-$mois-$jour"));
|
||||
} catch (Exception $e) {
|
||||
return ""; // Retourne une chaîne vide si la conversion échoue
|
||||
}
|
||||
|
||||
return $date_convertie;
|
||||
}
|
||||
|
||||
// Vérifier s'il y a des dates détectées
|
||||
if (empty($correspondances)) {
|
||||
return ""; // Retourne une chaîne vide si aucune date n'est trouvée
|
||||
}
|
||||
|
||||
// Si plusieurs dates sont trouvées, trier les dates et récupérer la dernière
|
||||
usort($correspondances, function ($a, $b) {
|
||||
$dateA = strtotime($a);
|
||||
$dateB = strtotime($b);
|
||||
return $dateB - $dateA; // Tri décroissant
|
||||
});
|
||||
|
||||
// Récupérer la dernière date détectée après le tri
|
||||
$derniere_date = $correspondances[0];
|
||||
|
||||
// Convertir la dernière date au format "Y-m-d" (année-mois-jour)
|
||||
if (strpos($derniere_date, '/') !== false) {
|
||||
// Format JJ/MM
|
||||
list($jour, $mois) = explode('/', $derniere_date);
|
||||
$annee = date('Y');
|
||||
} elseif (strpos($derniere_date, '.') !== false) {
|
||||
// Format JJ.MM
|
||||
list($jour, $mois) = explode('.', $derniere_date);
|
||||
$annee = date('Y');
|
||||
} else {
|
||||
return ""; // Cas inattendu (ne devrait pas se produire)
|
||||
}
|
||||
|
||||
// Convertir en date avec gestion des erreurs (ex. : février 30)
|
||||
try {
|
||||
$date_convertie = date('Y-m-d', strtotime("$annee-$mois-$jour"));
|
||||
} catch (Exception $e) {
|
||||
return ""; // Retourne une chaîne vide si la conversion échoue
|
||||
}
|
||||
|
||||
return $date_convertie;
|
||||
}
|
||||
|
||||
private function getTwitterDate($text)
|
||||
{
|
||||
// Utilisez une expression régulière pour extraire toutes les dates
|
||||
@@ -534,9 +532,9 @@ class ContestController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function all()
|
||||
public function all()
|
||||
{
|
||||
$contests = Contest::where('fin', '>=', Carbon::now()->format('Y-m-d'))->where('participated', 0)->where('enable', 1)->paginate(20);
|
||||
$contests = Contest::where('fin', '>=', Carbon::now()->format('Y-m-d'))->where('participated', 0)->where('enable', 1)->orderby('id', 'desc')->paginate(20);
|
||||
|
||||
$count = Contest::where('fin', '>=', Carbon::now()->format('Y-m-d'))->where('participated', 0)->where('enable', 1)->count();
|
||||
|
||||
@@ -544,4 +542,4 @@ class ContestController extends Controller
|
||||
|
||||
return view('contests', compact('contests', 'count'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,10 +18,10 @@ 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');
|
||||
|
||||
return view('history', compact('contests'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Foundation\Queue\Queueable;
|
||||
use App\Http\Controllers\APIController;
|
||||
use App\Models\Account;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class ProcessNews implements ShouldQueue
|
||||
{
|
||||
@@ -49,17 +50,14 @@ class ProcessNews implements ShouldQueue
|
||||
|
||||
shuffle($news);
|
||||
|
||||
$nb = rand(1,3);
|
||||
$randomKey = array_rand($news);
|
||||
|
||||
$article = $news[$randomKey];
|
||||
|
||||
$tweetid = $article['conversation_id_str'];
|
||||
$API->retweet($user, $tweetid);
|
||||
sleep(15);
|
||||
|
||||
if (count($news) >= $nb) {
|
||||
$selectedArticles = array_slice($news, 0, $nb);
|
||||
|
||||
foreach ($selectedArticles as $article) {
|
||||
$tweetid = $article['conversation_id_str'];
|
||||
$API->retweet($user, $tweetid);
|
||||
sleep(30);
|
||||
}
|
||||
}
|
||||
}catch (Exception $exception){
|
||||
$text = "Le compte Twitter " . $user->name . " : " . $exception->getMessage();
|
||||
|
||||
@@ -79,7 +77,7 @@ class ProcessNews implements ShouldQueue
|
||||
|
||||
// Envoyer le message avec les deux boutons
|
||||
Http::get('https://api.telegram.org/bot6784810105:AAEq3emnkRwdyvCLC-iqdIjVJ2Ke6HwwGjg/sendMessage', [
|
||||
'chat_id' => '1970698501',
|
||||
'chat_id' => '1970698501', // Remplacez par votre chat_id
|
||||
'text' => $text,
|
||||
'reply_markup' => $keyboardJson
|
||||
]);
|
||||
|
||||
@@ -16,7 +16,7 @@ class ProcessTweet implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
public $timeout = 900;
|
||||
public $timeout = 300;
|
||||
public $tries = 1;
|
||||
|
||||
private $id;
|
||||
@@ -212,7 +212,7 @@ class ProcessTweet implements ShouldQueue
|
||||
// Récupérer la phrase avec le comptage le plus élevé
|
||||
$phrasePlusFrequente = ($indexPhrasePlusFrequente !== null) ? $texts[$indexPhrasePlusFrequente] : null;
|
||||
|
||||
if ($phrasePlusFrequente != null) {
|
||||
if ($phrasePlusFrequente != null) {
|
||||
// Supprimer les emojis
|
||||
$phrasePlusFrequente = $this->remove_emojis($phrasePlusFrequente);
|
||||
|
||||
|
||||
@@ -65,10 +65,10 @@ class Contests extends Component
|
||||
public function render()
|
||||
{
|
||||
$datefin = Carbon::now()->addDays(3)->format('Y-m-d');
|
||||
$contests = Contest::where('fin', '>=', now())
|
||||
$contests = Contest::where('fin', '>=', Carbon::now()->format('Y-m-d'))
|
||||
->where('fin', '<=', $datefin)
|
||||
->where('participated', '!=', true)
|
||||
//->where('enable', true)
|
||||
->where('enable', true)
|
||||
->orderBy('fin', 'asc')
|
||||
->paginate(20);
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ class AutoLogin extends Action
|
||||
{
|
||||
$Browser = new BrowserDetection();
|
||||
$useragent = $_SERVER['HTTP_USER_AGENT'];
|
||||
|
||||
|
||||
if (str_contains($Browser->getOS($useragent)['os_family'], 'android')) {
|
||||
// Générer un lien spécifique pour Kiwi
|
||||
$kiwiLink = 'intent://x.com?auth_token='.$models->first()->auth_token.'#Intent;package=com.kiwibrowser.browser;scheme=https;end';
|
||||
|
||||
@@ -41,4 +41,4 @@ class Webmail extends Action
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class Contest extends Resource
|
||||
})
|
||||
->disableDownload(),
|
||||
URL::make('URL')->readonly(),
|
||||
Date::make('Fin')->readonly()->sortable(),
|
||||
Date::make('Fin')->sortable(),
|
||||
Text::make('Tweet ID', 'tweetid')->hideFromIndex()->readonly(),
|
||||
Text::make('Nb Tweet', 'nbtweet')->readonly(),
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user