Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
creare template html per instbot phyton
Forse il problema è che lo script in Python non è velocissimo e il PHP deve aspettare che finisca di essere eseguito.
Se commentando la riga con exec lo script PHP ritorna a funzionare correttamente, allora il problema è questo.
Mattia!
Cita messaggio
intendi una cosa così?
Codice:
// Eseguo lo script dopo la creazione
exec('/var/www/vincisinstabot/web/'.
$username.'.py >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
echo '<p>Creazione OK</p>';
Cita messaggio
Per commentare la riga, intendo inserire due slash davanti in modo da non eseguire quella parte di codice, ma mantenendola per non doverla riscrivere da capo (guida ai commenti in PHP).

Quindi dove c'è:
Codice PHP:
exec('percorso dello script in Python, ecc...'); 

Diventa:
Codice PHP:
//exec('percorso dello script in Python, ecc...'); 
Mattia!
Cita messaggio
Ho provato, ma mi dava errore nella pagina e lo script non veniva eseguito (forse il problema era nella parte di $username subito dopo exec):
Codice:
$username.'.py >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
Ad ogni modo ho ripristinato lo script senza i commenti, provato a creare un bot, ed effettivamente mi ha dato il messaggio di "Creazione OK". I misteri...
Cita messaggio
Forse in alcune occasioni lo script in Python è più o meno lento.
Mattia!
Cita messaggio
Ciao Mattia,
se volessi temporaneamente bloccare l'esecuzione dei bot (che per adesso vanno in automatico, esattamente come volevo), cosa mi conviene fare? Secondo te basta intervnire sul file di cron (che edito e svuoto per il periodo in cui nn voglio eseguire i bot, per poi reincollare i cron corretti, e al riavvio dovrebbe funzionare di nuovo tutto correttamnte) oppure mi consigli un metodo differente?

Attendo tue, grazie
Chand
Cita messaggio
Sì, penso che la cosa migliore sia disabilitare i vari cron e poi riattivarli quando ti serviranno di nuovo.
Mattia!
Cita messaggio
Ciao Mattia,
mi scuso per l'assenza ma, come ben saprai, in quest'ultimo periodo abbiamo avuto tutti la testa altrove.
Bando alle ciance, il mio instabot (versione 0.4.6) attualmente restituisce degli errori, e cercando ho visto che adesso esiste questa versione aggiornata!
Mi sembra però che sia cambiata la struttura, perchè adesso nn esiste più il file example.py per creare i nuovi b0t ma il sample.instabot.config.yml
Come mi consigli di aggiornare la struttura che mi hai aiutato a creare?

Attendo tua gentile risposta
Grazie

Chand
Cita messaggio
Ho dato un'occhiata molto velocemente e non mi ricordo bene come funzionava questo bot per Instagram, quindi potrei dimenticarmi qualcosa nelle istruzioni che ti sto dando.

Adesso dovresti creare i cron con uno dei seguenti comandi con al posto di "{FILEDELBOT}.yml" il percorso del file con la configurazione specifica.
Codice:
instabot-py -c {FILEDELBOT}.yml

Oppure
Codice:
python3 -m instabot_py -c {FILEDELBOT}.yml

Invece di creare i file ".py" come facevi prima, devi creare solamente i file della configurazione con estensione .yml che sono dei file YAML.
In PHP esiste l'estensione YAML e dovresti verificare che sia installata sul tuo server.
Dopo che avrai verificato che l'estensione è installata, potrai creare i file YAML con la funzione yaml_emit_file.
Mattia!
Cita messaggio
Figurati, anche io nn ricordo benissimo la questione, ma procediamo per gradi. Smile

Il file Class.php finora è stato così:
Codice:
<?php
Class Ssh2_crontab_manager {

   private $connection;
   private $path;
   private $handle;
   private $cron_file;

// Creo costruttore per l'istituzione e l'autenticazione della connessione SSH2
   function __construct($host=NULL, $port=NULL, $username=NULL, $password=NULL)
{
    $path_length     = strrpos(__FILE__, "/");     
    $this->path      = substr(__FILE__, 0, $path_length) . '/';
    $this->handle    = 'crontab.txt';       
    $this->cron_file = "{$this->path}{$this->handle}";

    try
    {
        if (is_null($host) || is_null($port) || is_null($username) || is_null($password)) throw new Exception("Please specify the host, port, username and password!");
         
        $this->connection = @ssh2_connect($host, $port);
        if ( ! $this->connection) throw new Exception("The SSH2 connection could not be established.");

        $authentication = @ssh2_auth_password($this->connection, $username, $password);
        if ( ! $authentication) throw new Exception("Could not authenticate '{$username}' using password: '{$password}'.");
    }
    catch (Exception $e)
    {
        $this->error_message($e->getMessage());
    }
}

//Creo esecuzione pubblica di comandi multipli per visualizzare risultati cron
public function exec_output() {
    $argument_count = func_num_args();

    try
    {
        if ( ! $argument_count) throw new Exception("There is nothing to execute, no arguments specified.");

        $arguments = func_get_args();

        $command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0];

        $stream = @ssh2_exec($this->connection, $command_string);
        if ( ! $stream) throw new Exception("Unable to execute the specified commands: <br />{$command_string}");
       
        return stream_get_contents($stream);
    }
    catch (Exception $e)
    {
        $this->error_message($e->getMessage());
    }

    return null;
}

// Creo esecuzione privata di comandi multipli
   private function exec()
{
    $argument_count = func_num_args();

    try
    {
        if ( ! $argument_count) throw new Exception("There is nothing to execute, no arguments specified.");

        $arguments = func_get_args();

        $command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0];

        $stream = @ssh2_exec($this->connection, $command_string);
        if ( ! $stream) throw new Exception("Unable to execute the specified commands: <br />{$command_string}");

    }
    catch (Exception $e)
    {
        $this->error_message($e->getMessage());
    }

    return $this;
}

// Scrivo crontab in un file
   public function write_to_file($path=NULL, $handle=NULL)
{
    if ( ! $this->crontab_file_exists())
    {   
        $this->handle = (is_null($handle)) ? $this->handle : $handle;
        $this->path   = (is_null($path))   ? $this->path   : $path;

        $this->cron_file = "{$this->path}{$this->handle}";

        $init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}";

        $this->exec($init_cron);
    }

    return $this;
}

// Rimuovo il file temporaneo di cron
   public function remove_file()
{
    if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}");

    return $this;
}

// Creo nuovi processi cron job
   public function append_cronjob($cron_jobs=NULL)
{
    if (is_null($cron_jobs)) $this->error_message("Nothing to append!  Please specify a cron job or an array of cron jobs.");
     
    $append_cronfile = "echo '";       
     
    $append_cronfile .= (is_array($cron_jobs)) ? implode("\n", $cron_jobs) : $cron_jobs;
     
    $append_cronfile .= "'  >> {$this->cron_file}";
     
    $install_cron = "crontab {$this->cron_file}";

    $this->write_to_file()->exec($append_cronfile, $install_cron)->remove_file();
     
    return $this;
}

// Rimuovo i cron jobs esistenti
   public function remove_cronjob($cron_jobs=NULL)
{
    if (is_null($cron_jobs)) $this->error_message("Nothing to remove!  Please specify a cron job or an array of cron jobs.");
     
    $this->write_to_file();

    $cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES);
     
    if (empty($cron_array)) $this->error_message("Nothing to remove!  The cronTab is already empty.");
     
    $original_count = count($cron_array);
     
    if (is_array($cron_jobs))
    {
        foreach ($cron_jobs as $cron_regex) $cron_array = preg_grep($cron_regex, $cron_array, PREG_GREP_INVERT);
    }
    else
    {
        $cron_array = preg_grep($cron_jobs, $cron_array, PREG_GREP_INVERT);
    }   
     
    return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array);
}

// Rimuovo il crontab intero
   public function remove_crontab()
{
    $this->exec("crontab -r")->remove_file();
     
    return $this;
}

// Restituisco il risultato se il cron temporaneo esiste
   private function crontab_file_exists()
{
    return file_exists($this->cron_file);
}

// Qui inserisco il messaggio di errore che vogliamo visualizzare
   private function error_message($error)
{
    die("<pre style='color:#EE2711'>ERROR: {$error}</pre>");
}
}
?>
Non mi è chiaro se questo codice resta uguale o se è qui che devo modificare il cron che mi dicevi prima.

poi c'è il file instascript.php che è così:
Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Leggo il contenuto del file "example.py".
$example = file_get_contents('/home/chand/instabot/example.py');

// Leggo il valore dell'username ed elimino tutti                                             i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i', '', trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {

    // Sostituisco l'username inserito nel form con quello presente in "example.py" e creo un database con lo stesso username
$example = str_replace('{USERNAME}', '"'.$username.'"', $example);
$example = str_replace('{DATABASE}', '"/var/www/vincisinstabot/web/'.$username.'.db"', $example);

    // Sostituisco la password inserita nel form con quella presente in "example.py"
$example = str_replace('{PASSWORD}', '"'.addslashes(isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '').'"', $example);

    // Inserisco il numero corretto di like_per_day
$example = str_replace('{LIKE_PER_DAY}', isset($_POST['like_per_day']) && is_numeric($_POST['like_per_day']) ? intval($_POST['like_per_day']) : 0, $example);

    // Se sono stati passati dei tag, li separo in base alla virgola
$tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(',', $_POST['tag_list']) : array();

    // Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
$counter = count($tag_list);
for ($i = 0; $i < $counter; $i++) {
    $tag_list[$i] = trim($tag_list[$i]);
    if ($tag_list[$i] == '') {
        unset($tag_list[$i]);
    }
}
$tag_list = array_values($tag_list);

    // Sostituisco il segnaposto
$example = str_replace('{TAG_LIST}', json_encode($tag_list), $example);

    // Inserisco il numero corretto di follow_per_day
$example = str_replace('{FOLLOW_PER_DAY}', isset($_POST['follow_per_day']) && is_numeric($_POST['follow_per_day']) ? intval($_POST['follow_per_day']) : 0, $example);

    // Inserisco il numero corretto di unfollow_per_day
$example = str_replace('{UNFOLLOW_PER_DAY}', isset($_POST['unfollow_per_day']) && is_numeric($_POST['unfollow_per_day']) ? intval($_POST['unfollow_per_day']) : 0, $example);

    // Se sono stati passati dei commenti, li separo in base alla virgola
$comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(',', $_POST['comment_list'])) : array();

    // Controllo che tutti i commenti siano compilati
if (isset($comment_list[0])) {
    $counter = count($comment_list[0]);
    for ($i = 0; $i < $counter; $i++) {
        $comment_list[0][$i] = trim($comment_list[0][$i]);
        if ($comment_list[0][$i] == '') {
            unset($comment_list[0][$i]);
        }
    }
    $comment_list[0] = array_values($comment_list[0]);
}

    // Sostituisco il segnaposto dei commenti
$example = str_replace('{COMMENT_LIST}', json_encode($comment_list), $example);
    $fp = fopen('web/'.$username.'.py', 'w');
    fwrite($fp, $example);
    fclose($fp);
    chmod('web/'.$username.'.py', 0755);
   
// Richiamo il file con la classe
require('class.php');

// Creo il cron con Ssh2_contab_manager
$crontab = new Ssh2_crontab_manager('XXXXX', 'XX', 'user', 'password');

$crontab->append_cronjob('01 06 * * * /var/www/vincisinstabot/web/'.
$username.'.py >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
$crontab->append_cronjob('@reboot /var/www/vincisinstabot/web/'.
$username.'.py >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
exec('/var/www/vincisinstabot/web/'.
$username.'.py >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
echo '<p>Creazione OK</p>';
}

echo '<p>Username: '.$username.'</p>';
var_dump($_POST);

?>
qui dovrei trasformare $example in $config o qualcosa di simile, e l'estensione .py in .yml. Tipo così:
Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Leggo il contenuto del file "instabot.config.yml".
$config = file_get_contents('/home/chand/instabot/instabot_py/sample.instabot.config.yml');

// Leggo il valore dell'username ed elimino tutti i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i', '', trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {

    // Sostituisco l'username inserito nel form con quello presente in "instabot.config.yml" e creo un database con lo stesso username
$config = str_replace('{USERNAME}', '"'.$username.'"', $config);
$config = str_replace('{DATABASE}', '"/var/www/vincisinstabot/web/'.$username.'.db"', $config);

    // Sostituisco la password inserita nel form con quella presente in "instabot.config.yml"
$config = str_replace('{PASSWORD}', '"'.addslashes(isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '').'"', $config);

    // Inserisco il numero corretto di like_per_day
$config = str_replace('{LIKE_PER_DAY}', isset($_POST['like_per_day']) && is_numeric($_POST['like_per_day']) ? intval($_POST['like_per_day']) : 0, $config);

    // Se sono stati passati dei tag, li separo in base alla virgola
$tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(',', $_POST['tag_list']) : array();

    // Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
$counter = count($tag_list);
for ($i = 0; $i < $counter; $i++) {
    $tag_list[$i] = trim($tag_list[$i]);
    if ($tag_list[$i] == '') {
        unset($tag_list[$i]);
    }
}
$tag_list = array_values($tag_list);

    // Sostituisco il segnaposto
$config = str_replace('{TAG_LIST}', json_encode($tag_list), $config);

    // Inserisco il numero corretto di follow_per_day
$config = str_replace('{FOLLOW_PER_DAY}', isset($_POST['follow_per_day']) && is_numeric($_POST['follow_per_day']) ? intval($_POST['follow_per_day']) : 0, $config);

    // Inserisco il numero corretto di unfollow_per_day
$config = str_replace('{UNFOLLOW_PER_DAY}', isset($_POST['unfollow_per_day']) && is_numeric($_POST['unfollow_per_day']) ? intval($_POST['unfollow_per_day']) : 0, $config);

    // Se sono stati passati dei commenti, li separo in base alla virgola
$comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(',', $_POST['comment_list'])) : array();

    // Controllo che tutti i commenti siano compilati
if (isset($comment_list[0])) {
    $counter = count($comment_list[0]);
    for ($i = 0; $i < $counter; $i++) {
        $comment_list[0][$i] = trim($comment_list[0][$i]);
        if ($comment_list[0][$i] == '') {
            unset($comment_list[0][$i]);
        }
    }
    $comment_list[0] = array_values($comment_list[0]);
}

    // Sostituisco il segnaposto dei commenti
$config = str_replace('{COMMENT_LIST}', json_encode($comment_list), $config);
    $fp = fopen('web/'.$username.'.yml', 'w');
    fwrite($fp, $config);
    fclose($fp);
    chmod('web/'.$username.'.yml', 0755);
   
// Richiamo il file con la classe
require('class.php');

// Creo il cron con Ssh2_contab_manager
$crontab = new Ssh2_crontab_manager('XXXXX', 'XX', 'user', 'password');

$crontab->append_cronjob('01 06 * * * /var/www/vincisinstabot/web/'.
$username.'.yml >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
$crontab->append_cronjob('@reboot /var/www/vincisinstabot/web/'.
$username.'.yml >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
exec('/var/www/vincisinstabot/web/'.
$username.'.yml >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
echo '<p>Creazione OK</p>';
}

echo '<p>Username: '.$username.'</p>';
var_dump($_POST);

?>

Ma probabilmente ho scritto cazzate smilie

Infine il file monitor.php dovrebbe restare lo stesso invariato.

Ma non mi è ancora chiaro dove aggiornare il cron con il nuovo comando che mi hai suggerito. Intanto ho installato l'estensione YAML nel mio server e ho verificato che risultati sul phpinfo.php
Quindi dovrei infine capire dove inserire, in instascript.php, la funzione:
Codice:
yaml_emit_file ( string $filename , mixed $data [, int $encoding = YAML_ANY_ENCODING [, int $linebreak = YAML_ANY_BREAK [, array $callbacks = NULL ]]] ) : bool

Scusami, ma sono un pò arruginito Smile

Attendo tue, grazie
Chand
Cita messaggio
La classe che gestisce i cron rimane invariata.

La parte che crea il file di configurazione va cambiata completamente.
Dovrai creare un array con tutte le configurazioni che ti servono e poi passare questo array alla funzione yaml_emit_file.
Il primo parametro della funzione yaml_emit_file sarà il percorso del file di configurazione e il secondo l'array con i valori della configurazione.

Anche la creazione del cron andrà cambiata perché non si si crea più il file di Python, ma solamente la configurazione. Quindi si richiamerà sempre lo stesso programma di Python a cui si passerà la configurazione di ogni utente.

Questo è l'esempio super base da integrare allo script che hai già e che fa tutti i controlli.
Codice PHP:
// Creo l'array di configurazione con inserite gli eventuali valori di configurazione che saranno uguali per tutti
$config = array(
    
'like_per_run' => 10 // Questo è un esempio
);

// Poi saranno inserite tutte le configurazioni specifiche (qui sotto metto solo un esempio)

// Imposto l'username inserito nel form e creo un database con lo stesso username
$config['login'] = $username;
$config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';

// Dopo aver creato tutte le configurazioni, si salva il file YAML
$yml '/var/www/vincisinstabot/web/'.$username.'.yml';
yaml_emit_file($yml$config);

// Crei i vari cron
$crontab->append_cronjob('01 06 * * * instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
$crontab->append_cronjob('@reboot instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
exec('instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1'); 
Mattia!
Cita messaggio
Credo di aver fatto un pò di confusione... ad ogni modo, questo è quello che ho provato a matchare per il file instacript.php:
Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Creo l'array di configurazione con inserite gli eventuali valori di configurazione che saranno uguali per tutti
$config = array(
    'like_per_run' => 50 // teniamo un valore basso per evitare blocchi
    'max_like_for_one_tag' => 30 // teniamo un valore basso per evitare blocchi
    'media_min_like' => 20 // teniamo un valore basso per evitare blocchi
    'media_max_like' => 100 // teniamo un valore basso per evitare blocchi
    'like_followers_per_run' => 20 // teniamo un valore basso per evitare blocchi
    'unlike_per_run' => 0 // teniamo disabilitato
    'time_till_unlike' => 259200 // teniamo tempo fisso
    'follow_time' => 259200 // teniamo tempo fisso
    'follow_attempts' => 2 // teniamo un valore basso per evitare blocchi
    'user_min_follow' => 10 // teniamo un valore basso per evitare blocchi
    'user_max_follow' => 30 // teniamo un valore basso per evitare blocchi
    
);

// Leggo il contenuto del file "instabot.config.yml".
$config = file_get_contents('/home/chand/instabot/instabot_py/sample.instabot.config.yml');

// Imposto l'username inserito nel form e creo un database con lo stesso username
$config['login'] = $username;
$config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';

// Leggo il valore dell'username ed elimino tutti i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i', '', trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {

// Sostituisco l'username inserito nel form con quello presente in "instabot.config.yml" e creo un database con lo stesso username
$config = str_replace('{USERNAME}', '"'.$username.'"', $config);
$config = str_replace('{DATABASE}', '"/var/www/vincisinstabot/web/'.$username.'.db"', $config);

    // Sostituisco la password inserita nel form con quella presente in "instabot.config.yml"
$config = str_replace('{PASSWORD}', '"'.addslashes(isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '').'"', $config);

// Inserisco il numero corretto di like_per_run
$config = str_replace('{LIKE_PER_RUN}', isset($_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_runy']) : 0, $config);

// Se sono stati passati dei tag, li separo in base alla virgola
$tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(',', $_POST['tag_list']) : array();

// Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
$counter = count($tag_list);
for ($i = 0; $i < $counter; $i++) {
    $tag_list[$i] = trim($tag_list[$i]);
    if ($tag_list[$i] == '') {
        unset($tag_list[$i]);
    }
}
$tag_list = array_values($tag_list);

// Sostituisco il segnaposto
$config = str_replace('{TAG_LIST}', json_encode($tag_list), $config);

// Inserisco il numero corretto di follow_per_day
$config = str_replace('{FOLLOW_PER_RUN}', isset($_POST['follow_per_run']) && is_numeric($_POST['follow_per_run']) ? intval($_POST['follow_per_run']) : 0, $config);

// Inserisco il numero corretto di unfollow_per_day
$config = str_replace('{UNFOLLOW_PER_RUN}', isset($_POST['unfollow_per_runy']) && is_numeric($_POST['unfollow_per_run']) ? intval($_POST['unfollow_per_run']) : 0, $config);

// Se sono stati passati dei commenti, li separo in base alla virgola
$comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(',', $_POST['comment_list'])) : array();

// Controllo che tutti i commenti siano compilati
if (isset($comment_list[0])) {
    $counter = count($comment_list[0]);
    for ($i = 0; $i < $counter; $i++) {
        $comment_list[0][$i] = trim($comment_list[0][$i]);
        if ($comment_list[0][$i] == '') {
            unset($comment_list[0][$i]);
        }
    }
    $comment_list[0] = array_values($comment_list[0]);
}

// Sostituisco il segnaposto dei commenti
$config = str_replace('{COMMENT_LIST}', json_encode($comment_list), $config);
    $fp = fopen('web/'.$username.'.yml', 'w');
    fwrite($fp, $config);
    fclose($fp);
    chmod('web/'.$username.'.yml', 0755);
    
// Dopo aver creato tutte le configurazioni, si salva il file YAML
$yml = '/var/www/vincisinstabot/web/'.$username.'.yml';
yaml_emit_file($yml, $config);
   
// Richiamo il file con la classe
require('class.php');

// Creo il cron con Ssh2_contab_manager
$crontab = new Ssh2_crontab_manager('XXXXXXXXXX', 'XX', 'user', 'password');

// Crei i vari cron
$crontab->append_cronjob('01 06 * * * instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
$crontab->append_cronjob('@reboot instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
exec('instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
echo '<p>Creazione OK</p>';
}

echo '<p>Username: '.$username.'</p>';
var_dump($_POST);

?>

Ho sostituito alcuni attributi (like_per_day è diventato like_per_run, e lo stesso per follow e unfollow), non sono sicuro che la parte di sostituzione dei testi inseriti nel form debba mantenersi così, ma ho sicuramente sbagliato qualcosa. Mi devi scusare ma sono davvero arrugginito. smilie

Allo stesso modo ho aggiornato anche i form di instabot.html:
Codice:
<!DOCTYPE html>
<html lang="it">
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="resources/css/reset.css">
<link rel="stylesheet" href="resources/css/layout.css">
<script type="text/javascript" src="resources/js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="resources/js/custom.js"></script>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>

<body>
    <div class="container">
        <header>
            <h2 class="logo">Vincinstabot</h2>
            <h1>Vincinstabot</h1>
        </header>
        <section>
            <div class="content-wrapper-dark">
                <h2>Compila il tuo instagram Bot</h2>
                <hr class="big-dashed" /><form action="instascript.php" method="post">
                <h3>login</h3><input class="input-social" type="text" name="username" />
                <h3>password</h3><input class="input-social flt-lft" type="password" name="password" />
                <br class="clearfix" />
                <h3>like per day</h3><input class="input-social" type="text" name="like_per_run"  placeholder="1000" />
                <h3>tag list (separati da una virgola)</h3><input class="input-social" type="text" name="tag_list" placeholder="follow4follow" />
                <h3>follow per day</h3><input class="input-social flt-lft" type="text" name="follow_per_run" placeholder="40" /><br class="clearfix" />
                <h3>unfollow per day</h3><input class="input-social flt-lft" type="text" name="unfollow_per_run" placeholder="10" /><br class="clearfix" />
                <h3>comments (separati da una virgola)</h3><input class="input-social flt-lft" type="text" name="comment_list" placeholder="wow, beautiful" />
                <br class="clearfix" />
                <button type="submit" class="button-go button-go2 flt-lft">VAI</button><br class="clearfix" /></form>
            </div>
           
        </section>
        <footer>
           
        </footer>
    </div>
</body>
</html>

Fammi sapere, grazie

Chand
Cita messaggio
Cambia tutta la filosofia del funzionamento dello script.
Prima copiare un file di esempio e sostituivi i segnaposto con le varie variabili.
Adesso si crea il file di configurazione da zero partendo da un array che contiene tutte le variabili, quindi non serve più andare a leggere il file d'esempio.

Ho modificato il tuo script in modo che segua questa nuova filosofia (non ho controllato i nomi delle configurazioni, eventualmente correggili tu).

Codice PHP:
<?php
error_reporting
(E_ALL);
ini_set('display_errors'1);

// Leggo il valore dell'username ed elimino tutti i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i'''trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {
    
// Creo l'array di configurazione con inserite gli eventuali valori di configurazione che saranno uguali per tutti
    
$config = array(
        
'like_per_run' => 50 // teniamo un valore basso per evitare blocchi
        
'max_like_for_one_tag' => 30 // teniamo un valore basso per evitare blocchi
        
'media_min_like' => 20 // teniamo un valore basso per evitare blocchi
        
'media_max_like' => 100 // teniamo un valore basso per evitare blocchi
        
'like_followers_per_run' => 20 // teniamo un valore basso per evitare blocchi
        
'unlike_per_run' => // teniamo disabilitato
        
'time_till_unlike' => 259200 // teniamo tempo fisso
        
'follow_time' => 259200 // teniamo tempo fisso
        
'follow_attempts' => // teniamo un valore basso per evitare blocchi
        
'user_min_follow' => 10 // teniamo un valore basso per evitare blocchi
        
'user_max_follow' => 30 // teniamo un valore basso per evitare blocchi
        
    
);
    
    
// Imposto l'username inserito nel form e creo un database con lo stesso username
    
$config['login'] = $username;
    
$config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';
    
    
// Imposto la password inserita nel form
    
$config['password'] = isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '';

    
// Inserisco il numero corretto di like_per_run
    
$config['like_per_run'] = $_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_runy']) : 0;

    
// Se sono stati passati dei tag, li separo in base alla virgola
    
$tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(','$_POST['tag_list']) : array();

    
// Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
    
$counter count($tag_list);
    for (
$i 0$i $counter$i++) {
        
$tag_list[$i] = trim($tag_list[$i]);
        if (
$tag_list[$i] == '') {
            unset(
$tag_list[$i]);
        }
    }
    
$tag_list array_values($tag_list);

    
// Inserisco i tag
    
$config['tag_list'] = $tag_list;

    
// Inserisco il numero corretto di follow_per_day
    
$config['follow_per_run'] = isset($_POST['follow_per_run']) && is_numeric($_POST['follow_per_run']) ? intval($_POST['follow_per_run']) : 0;

    
// Inserisco il numero corretto di unfollow_per_day
    
$config['unfollow_per_run'] = isset($_POST['unfollow_per_run']) && is_numeric($_POST['unfollow_per_run']) ? intval($_POST['unfollow_per_run']) : 0;

    
// Se sono stati passati dei commenti, li separo in base alla virgola
    
$comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(','$_POST['comment_list'])) : array();

    
// Controllo che tutti i commenti siano compilati
    
if (isset($comment_list[0])) {
        
$counter count($comment_list[0]);
        for (
$i 0$i $counter$i++) {
            
$comment_list[0][$i] = trim($comment_list[0][$i]);
            if (
$comment_list[0][$i] == '') {
                unset(
$comment_list[0][$i]);
            }
        }
        
$comment_list[0] = array_values($comment_list[0]);
    }

    
// Inserisco i commenti
    
$config['comment_list'] = $comment_list);
    
    
// Dopo aver creato tutte le configurazioni, si salva il file YAML
    
$yml '/var/www/vincisinstabot/web/'.$username.'.yml';
    
yaml_emit_file($yml$config);
    
chmod('web/'.$username.'.yml'0755);
       
    
// Richiamo il file con la classe
    
require('class.php');

    
// Creo il cron con Ssh2_contab_manager
    
$crontab = new Ssh2_crontab_manager('XXXXXXXXXX''XX''user''password');

    
// Crei i vari cron
    
$crontab->append_cronjob('01 06 * * * instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    
$crontab->append_cronjob('@reboot instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    
exec('instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    echo 
'<p>Creazione OK</p>';
}

echo 
'<p>Username: '.$username.'</p>';
var_dump($_POST); 
Mattia!
Cita messaggio
Qualcosa non funziona...
questo è lo script finale di instascript.php:
Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Leggo il valore dell'username ed elimino tutti i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i', '', trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {
    // Creo l'array di configurazione con inserite gli eventuali valori di configurazione che saranno uguali per tutti
    $config = array(
        'start_at_h' => 0 // teniamo il valore fisso
    'start_at_m' => 0 // teniamo il valore fisso
    'end_at_h' => 23 // teniamo il valore fisso
    'end_at_m' => 59 // teniamo il valore fisso
    'window_check_every' => 60 // teniamo il valore fisso
        'max_like_for_one_tag' => 30 // teniamo un valore basso per evitare blocchi
        'media_min_like' => 20 // teniamo un valore basso per evitare blocchi
        'media_max_like' => 100 // teniamo un valore basso per evitare blocchi
        'like_followers_per_run' => 20 // teniamo un valore basso per evitare blocchi
        'unlike_per_run' => 0 // teniamo disabilitato
        'time_till_unlike' => 259200 // teniamo tempo fisso
        'follow_time' => 259200 // teniamo tempo fisso
        'follow_attempts' => 2 // teniamo un valore basso per evitare blocchi
        'user_min_follow' => 10 // teniamo un valore basso per evitare blocchi
        'user_max_follow' => 30 // teniamo un valore basso per evitare blocchi
    'unfollow_break_min' => 3 // teniamo il valore fisso
    'unfollow_break_max' => 17 // teniamo il valore fisso
    'unfollow_selebgram' => false // teniamo il valore fisso
    'unfollow_probably_fake' => true // teniamo il valore fisso
    'unfollow_inactive' => true // teniamo il valore fisso
    'unfollow_recent_feed' => false // teniamo il valore fisso
    'unfollow_whitelist' => [] // teniamo il valore
    'comments_per_run' => 30 // teniamo il valore fisso
    'tag_blacklist' => ["sex", "porno"] // teniamo questi tag in blacklist
    'unwanted_username_list' => ["free", "travel", "shop", "store", "sex", "online"] // teniamo questi unwanted username
       
    );
   
    // Imposto l'username inserito nel form e creo un database con lo stesso username
    $config['login'] = $username;
    $config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';
   
    // Imposto la password inserita nel form
    $config['password'] = isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '';

    // Inserisco il numero corretto di like_per_run
    $config['like_per_run'] = $_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_run']) : 0;

    // Se sono stati passati dei tag, li separo in base alla virgola
    $tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(',', $_POST['tag_list']) : array();

    // Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
    $counter = count($tag_list);
    for ($i = 0; $i < $counter; $i++) {
        $tag_list[$i] = trim($tag_list[$i]);
        if ($tag_list[$i] == '') {
            unset($tag_list[$i]);
        }
    }
    $tag_list = array_values($tag_list);

    // Inserisco i tag
    $config['tag_list'] = $tag_list;

    // Inserisco il numero corretto di follow_per_day
    $config['follow_per_run'] = isset($_POST['follow_per_run']) && is_numeric($_POST['follow_per_run']) ? intval($_POST['follow_per_run']) : 0;

    // Inserisco il numero corretto di unfollow_per_day
    $config['unfollow_per_run'] = isset($_POST['unfollow_per_run']) && is_numeric($_POST['unfollow_per_run']) ? intval($_POST['unfollow_per_run']) : 0;

    // Se sono stati passati dei commenti, li separo in base alla virgola
    $comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(',', $_POST['comment_list'])) : array();

    // Controllo che tutti i commenti siano compilati
    if (isset($comment_list[0])) {
        $counter = count($comment_list[0]);
        for ($i = 0; $i < $counter; $i++) {
            $comment_list[0][$i] = trim($comment_list[0][$i]);
            if ($comment_list[0][$i] == '') {
                unset($comment_list[0][$i]);
            }
        }
        $comment_list[0] = array_values($comment_list[0]);
    }

    // Inserisco i commenti
    $config['comment_list'] = $comment_list);
   
    // Dopo aver creato tutte le configurazioni, si salva il file YAML
    $yml = '/var/www/vincisinstabot/web/'.$username.'.yml';
    yaml_emit_file($yml, $config);
    chmod('web/'.$username.'.yml', 0755);
       
    // Richiamo il file con la classe
    require('class.php');

    // Creo il cron con Ssh2_contab_manager
    $crontab = new Ssh2_crontab_manager('xxxxxxxxxxx', 'xx', 'user', 'password');

    // Crei i vari cron
    $crontab->append_cronjob('01 06 * * * instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    $crontab->append_cronjob('@reboot instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    exec('instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    echo '<p>Creazione OK</p>';
}

echo '<p>Username: '.$username.'</p>';
var_dump($_POST);

?>

Ho messo tutti i valori "fissi" (cercando di non lasciarne fuori nessuno rispetto al config di riferimento), ma nn sono sicuro che quelli multivalore su parentesi quadrata vadano inseriti come ho fatto io (ad es. con tag_blacklist e unwanted_username_list). In ogni caso ho provato anche senza quella parte ma non crea il file yml e mi restituisce lo stesso errore :
Citazione:La pagina non funziona
vincishouse al momento non è in grado di gestire la richiesta.
HTTP ERROR 500
Non so se sia qualche problema di percorso oppure se sia di connessione (forse con sqlite). Inoltre non sono sicuro di aver messo tutto al posto giusto, ad es. il contenuto della cartella "instabot" l'ho sostituito con i vecchi file su /home/chand/instabot e non su /var/www/vincisinstabot, corretto?

Infine vorrei sistemare anche il file monitor.php
Codice:
<link rel="stylesheet" href="resources/css/layout.css"><?php
// Richiamo il file con la classe
require('class.php');

// Creo il cron con Ssh2_contab_manager
$crontab = new Ssh2_crontab_manager('xxxxxxxxxxxx', 'xx', 'user', 'passowrd');
$py = glob('web/*.py');
print_r($py);

var_dump($crontab->exec_output('crontab -l'));

$logs = array();

// Recupero tutti i file di log
$files = glob('web/*.log');

// Scorro tutti i file di log
$counter = count($files);
for ($i = 0; $i < $counter; $i++) {
    $logs = array();
   
    // Apro il file di log e recupero il contenuto diviso per riga
    $rows = file($files[$i]);
   
    // Scorro tutte le righe del file di log
    $counter2 = count($rows);
    for ($j = 0; $j < $counter2; $j++) {
        $rows[$j] = trim($rows[$j]);
        // Controllo che la riga non sia vuota
        if ($rows[$j] != '') {
            // Inserisco la riga nell'elenco dei log
            $logs[] = array(
                'datetime' => mktime(substr($rows[$j], 11, 2), substr($rows[$j], 14, 2), 0, substr($rows[$j], 3, 2), substr($rows[$j], 0, 2), substr($rows[$j], 6, 4)), // Data e ora in Unixtime (recuperato dai primi caratteri della riga)
                'pos' => $j, // Numero di riga (per ordinare quando la data e l'ora è uguale, visto che non ci sono i secondi)
                'msg' => substr($rows[$j], 17) // Messaggio del log (testo dalla data in poi)
            );
        }
    }
   
    // Stampo l'username recuperato dal nome del file
    echo '<h1>'.basename($files[$i], '.log').'</h1>';

    // Verifico che ci siano dei log
    if (empty($logs)) {
        // Stampo il messaggio nel caso non ci siano log
        echo '<p>Non ci sono log.</p>';
    } else {
        // Ordino i log in base a data e ora e posizione (vedi tutorial: https://www.matriz.it/tutorials/6-php/12-ordinare_un_array_multidimensionale_e_pi_array_in_php/)
        $datetimes = $positions = array();
        foreach ($logs as $k => $v) {
            $datetimes[$k] = $v['datetime'];
            $positions[$k] = $v['pos'];
        }
        array_multisort($datetimes, SORT_DESC, SORT_NUMERIC, $positions, SORT_DESC, SORT_NUMERIC, $logs);

        // Stampo l'elenco dei log
        echo '<ul class="logs-list">';
        foreach ($logs as $v) {
            echo '<li><em>'.date('d/m/Y H:i', $v['datetime']).'</em> '.$v['msg'].'</li>';
        }
        echo '</ul>';
    }
}
?>
In questo caso, basta sostituire $py con $yml oppure anche qui va rivista la logica?

Attendo tue, grazie

Chand
Cita messaggio
Per prima cosa devi correggere il PHP che sicuramente darà errore, perché mancano le virgole dopo i valori fissi di $config.

Per esempio, il primo valore diventerà:
Codice PHP:
'start_at_h' => 0// teniamo il valore fisso 

Se hai una versione abbastanza moderna di PHP, puoi lasciare i valori multipli come sono adesso, altrimenti puoi utilizzare la notazione classica per creare gli array.
Esempio:
Codice PHP:
'tag_blacklist' => array('sex''porno'), // teniamo questi tag in blacklist 

Il monitor dovrebbe rimanere sostanzialmente uguale, a meno che nella nuova versione i log non vengano scritti in maniera differente.
Comunque è corretto cercare tutti i file ".yml", invece che quelli ".py".
Mattia!
Cita messaggio
la mia versione di php è 7.2.29-1
ho comunque corretto con le tue ultime indicazioni, ma sulla pagina instascript.php continua a darmi errore 500:
Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Leggo il valore dell'username ed elimino tutti i caratteri diversi da lettere, numeri, - e _
$username = isset($_POST['username']) && is_string($_POST['username']) ? preg_replace('/([^a-z0-9-_]+)/i', '', trim($_POST['username'])) : '';

// Creo il nuovo file solo se è stato inviato un valore per il campo username
if ($username != '') {
    // Creo l'array di configurazione con inserite gli eventuali valori di configurazione che saranno uguali per tutti
    $config = array(
        'start_at_h' => 0, // teniamo il valore fisso
    'start_at_m' => 0, // teniamo il valore fisso
    'end_at_h' => 23, // teniamo il valore fisso
    'end_at_m' => 59, // teniamo il valore fisso
    'window_check_every' => 60, // teniamo il valore fisso
        'max_like_for_one_tag' => 30, // teniamo un valore basso per evitare blocchi
        'media_min_like' => 20, // teniamo un valore basso per evitare blocchi
        'media_max_like' => 100, // teniamo un valore basso per evitare blocchi
        'like_followers_per_run' => 20, // teniamo un valore basso per evitare blocchi
        'unlike_per_run' => 0, // teniamo disabilitato
        'time_till_unlike' => 259200, // teniamo tempo fisso
        'follow_time' => 259200, // teniamo tempo fisso
        'follow_attempts' => 2, // teniamo un valore basso per evitare blocchi
        'user_min_follow' => 10, // teniamo un valore basso per evitare blocchi
        'user_max_follow' => 30, // teniamo un valore basso per evitare blocchi
    'unfollow_break_min' => 3, // teniamo il valore fisso
    'unfollow_break_max' => 17, // teniamo il valore fisso
    'unfollow_selebgram' => false, // teniamo il valore fisso
    'unfollow_probably_fake' => true, // teniamo il valore fisso
    'unfollow_inactive' => true, // teniamo il valore fisso
    'unfollow_recent_feed' => false, // teniamo il valore fisso
    'unfollow_whitelist' => [], // teniamo il valore
    'comments_per_run' => 30, // teniamo il valore fisso
    'tag_blacklist' => array('sex', 'porno'), // teniamo questi tag in blacklist
    'unwanted_username_list' => array('free', 'travel', 'shop', 'store', 'sex', 'online'), // teniamo questi unwanted username
       
    );
   
    // Imposto l'username inserito nel form e creo un database con lo stesso username
    $config['login'] = $username;
    $config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';
   
    // Imposto la password inserita nel form
    $config['password'] = isset($_POST['password']) && is_string($_POST['password']) ? $_POST['password'] : '';

    // Inserisco il numero corretto di like_per_run
    $config['like_per_run'] = $_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_run']) : 0;

    // Se sono stati passati dei tag, li separo in base alla virgola
    $tag_list = isset($_POST['tag_list']) && is_string($_POST['tag_list']) ? explode(',', $_POST['tag_list']) : array();

    // Controllo che tutti i tag siano compilati (evito che ci sia una tag vuoto nel caso si scriva "tag1, , tag2")
    $counter = count($tag_list);
    for ($i = 0; $i < $counter; $i++) {
        $tag_list[$i] = trim($tag_list[$i]);
        if ($tag_list[$i] == '') {
            unset($tag_list[$i]);
        }
    }
    $tag_list = array_values($tag_list);

    // Inserisco i tag
    $config['tag_list'] = $tag_list;

    // Inserisco il numero corretto di follow_per_day
    $config['follow_per_run'] = isset($_POST['follow_per_run']) && is_numeric($_POST['follow_per_run']) ? intval($_POST['follow_per_run']) : 0;

    // Inserisco il numero corretto di unfollow_per_day
    $config['unfollow_per_run'] = isset($_POST['unfollow_per_run']) && is_numeric($_POST['unfollow_per_run']) ? intval($_POST['unfollow_per_run']) : 0;

    // Se sono stati passati dei commenti, li separo in base alla virgola
    $comment_list = isset($_POST['comment_list']) && is_string($_POST['comment_list']) ? array(explode(',', $_POST['comment_list'])) : array();

    // Controllo che tutti i commenti siano compilati
    if (isset($comment_list[0])) {
        $counter = count($comment_list[0]);
        for ($i = 0; $i < $counter; $i++) {
            $comment_list[0][$i] = trim($comment_list[0][$i]);
            if ($comment_list[0][$i] == '') {
                unset($comment_list[0][$i]);
            }
        }
        $comment_list[0] = array_values($comment_list[0]);
    }

    // Inserisco i commenti
    $config['comment_list'] = $comment_list);
   
    // Dopo aver creato tutte le configurazioni, si salva il file YAML
    $yml = '/var/www/vincisinstabot/web/'.$username.'.yml';
    yaml_emit_file($yml, $config);
    chmod('web/'.$username.'.yml', 0755);
       
    // Richiamo il file con la classe
    require('class.php');

    // Creo il cron con Ssh2_contab_manager
    $crontab = new Ssh2_crontab_manager('xxxxxxxx', 'xx', 'user', 'password');

    // Crei i vari cron
    $crontab->append_cronjob('01 06 * * * instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    $crontab->append_cronjob('@reboot instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    exec('instabot-py -c '.$yml.' >> /var/www/vincisinstabot/web/'.$username.'.log 2>&1');
    echo '<p>Creazione OK</p>';
}

echo '<p>Username: '.$username.'</p>';
var_dump($_POST);

?>
cosa sbaglio?
Se vuoi fare una prova anche tu, la pagina è questa

Fammi sapere
Grazie

Chand
Cita messaggio
La seguente riga:
Codice PHP:
$config['comment_list'] = $comment_list); 

Va corretta così:
Codice PHP:
$config['comment_list'] = $comment_list

Inoltre modifica anche questa riga:
Codice PHP:
chmod('web/'.$username.'.yml'0755); 

In questo modo:
Codice PHP:
chmod($yml 0755); 

Se vuoi che vengano stampati gli errori di PHP invece di mostrare solamente una schermata bianca, devi modificare il file "php.ini" del tuo server impostando:
Codice:
display_errors = 1

Dopo aver modificato il file "php.ini" devi riavviare il server/Apache.
Mattia!
Cita messaggio
fatto tutto, adesso mi restituisce questo errore:
Citazione:Parse error: syntax error, unexpected ')' in /var/www/vincisinstabot/instascript.php on line 48
Cita messaggio
Questa riga:
Codice PHP:
$config['like_per_run'] = $_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_run']) : 0

Deve diventare:
Codice PHP:
$config['like_per_run'] = isset($_POST['like_per_run']) && is_numeric($_POST['like_per_run']) ? intval($_POST['like_per_run']) : 0
Mattia!
Cita messaggio
Adesso il file viene creato correttamente!
però, provando ad eseguire manualmente lo script col confi ricevo questo errore (ma probabilmente è un problema proprio del bot):
Citazione:instabot-py -c fakechatapp.yml
Traceback (most recent call last):
File "/usr/local/bin/instabot-py", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/instabot_py/__main__.py", line 309, in main
config.set_many(ConfigManager(schema=schema, path=config_file).as_dict())
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 33, in __init__
self.validate()
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 39, in validate
return self.validator.validate(self)
File "/usr/local/lib/python3.6/dist-packages/config42/validator.py", line 71, in validate
value = config_manager.get(item.get('key'))
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 107, in get
value = self.operate(key, obj=self.handler.config)
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 95, in operate
return recursive(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/config42/utils.py", line 38, in recursive
return recursive('.'.join(_keys[1:]), obj[_base], value, update)
File "/usr/local/lib/python3.6/dist-packages/config42/utils.py", line 28, in recursive
raise AttributeError("Cannot get {}' key from string.".format(_base))
AttributeError: Cannot get path' key from string.
inoltre mi sembra che provando ad eseguire lo script non crei il file .log
Cita messaggio
Hai provato a verificare il contenuto del file YAML creato?
Mattia!
Cita messaggio
Si, ed effettivamente ci sono delle informazioni salvate in maniera errata
Citazione:tag_blacklist:
- sex
- porno
unwanted_username_list:
- free
- travel
- shop
- store
- sex
- online

questa parte dovrebbe essere dentro una parentesi quadra, virgolettata e separata da una virgola, lo stesso accade per tag_list e comment_list

Citazione:login: username
database: '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/username.db"}'
password: password

user e pass dovrebbero essere virgolettati e non so se sia fondamentale che siano all'inizio, ma nel config d'esempio sono le prime informazioni presenti. Per il db non ho idea se la stringa sia corretta, però il file viene effettivamente creato, quindi suppongo che vada bene.

Del file .log invece nessuna traccia...
Cita messaggio
Per quanto riguarda le configurazioni che dovrebbero essere degli elenchi tra parentesi quadre prova a modificarli così (faccio un esempio con "tag_list"):
Codice PHP:
$config['tag_list'] = json_encode($tag_list); 

Non dovrebbe essere fondamentale l'ordine delle configurazioni perché il programma dovrebbe leggere il nome della configurazione.

Se non funziona con login e password senza virgolette, puoi provare ad aggiungerle:
Codice PHP:
// Imposto l'username inserito nel form e creo un database con lo stesso username
$config['login'] = '"'.$username.'"';
$config['database'] = '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/'.$username.'.db"}';

// Imposto la password inserita nel form
$config['password'] = isset($_POST['password']) && is_string($_POST['password']) ? '"'.$_POST['password'].'"' ''

Prima di pensare ai file di log, penso che sia meglio riuscire a far funzionare il programma.
Mattia!
Cita messaggio
ma per i valori fissi tag_blacklist e unwanted_username_list? Anche li non riesco a replicare la parentesi quadra.

Sia su username e password, che su tag_list e comment_list, oltre alle virgolette mi mette anche un apice che non dovrebbe esserci:
Citazione:login: '"username"'
database: '{"type": "sql", "connection_string": "sqlite:////var/www/vincisinstabot/web/username.db"}'
password: '"password"'
tag_list: '["firstpost","post"]'
comment_list: '[["wow","Smile"]]'
Cita messaggio
Per le altre due configurazioni fisse che hanno un elenco di parole devi sempre usare la funzione json_encode:
Codice PHP:
'tag_blacklist' => json_encode(array('sex''porno')), // teniamo questi tag in blacklist 

Rivedendo la documentazione sembrerebbe che le virgolette non siano necessarie. Secondo me, può rimettere username e password com'erano prima.
Mattia!
Cita messaggio
Mi mette sempre gli apici prima delle parentesi quadre:
Citazione:tag_blacklist: '["sex","porno"]'
unwanted_username_list: '["free","travel","shop","store","sex","online"]'
In ogni caso, correggendo manualmente questa cosa
mi da questo errore:
Citazione:Traceback (most recent call last):
File "/usr/local/bin/instabot-py", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/instabot_py/__main__.py", line 309, in main
config.set_many(ConfigManager(schema=schema, path=config_file).as_dict())
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 33, in __init__
self.validate()
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 39, in validate
return self.validator.validate(self)
File "/usr/local/lib/python3.6/dist-packages/config42/validator.py", line 71, in validate
value = config_manager.get(item.get('key'))
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 107, in get
value = self.operate(key, obj=self.handler.config)
File "/usr/local/lib/python3.6/dist-packages/config42/config_manager.py", line 95, in operate
return recursive(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/config42/utils.py", line 38, in recursive
return recursive('.'.join(_keys[1:]), obj[_base], value, update)
File "/usr/local/lib/python3.6/dist-packages/config42/utils.py", line 28, in recursive
raise AttributeError("Cannot get {}' key from string.".format(_base))
AttributeError: Cannot get path' key from string.
Provando anche a copiare e modificare un config basico, quando avvio il bot ottengo questo errore:
Citazione:Uploaded 2 settings to a bot's configuration from fakechatapp.yml config file
2020-11-24 11:10:49,073 - fakechatapp - InstaBot - DEBUG - Init SQL database sqlite:///fakechatapp.db
2020-11-24 11:10:49,111 - fakechatapp - InstaBot - INFO - Instabot v0.7.18 started at 2020-Nov-24 11:10:49
2020-11-24 11:10:49,111 - fakechatapp - InstaBot - DEBUG - User agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0' is used
2020-11-24 11:10:49,112 - fakechatapp - InstaBot - INFO - Trying to login as fakechatapp...
Traceback (most recent call last):
File "/usr/local/bin/instabot-py", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.6/dist-packages/instabot_py/__main__.py", line 357, in main
bot = InstaBot(config=config)
File "/usr/local/lib/python3.6/dist-packages/instabot_py/instabot.py", line 219, in __init__
self.login()
File "/usr/local/lib/python3.6/dist-packages/instabot_py/instabot.py", line 316, in login
login_response = login.json()
File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Cita messaggio
Per togliere gli apici ai valori in JSON delle configurazioni, devi aggiungere dopo:
Codice PHP:
chmod($yml0755); 

Questo pezzo di codice (che non ho testato):
Codice PHP:
$yml_content file_get_contents($yml);
foreach (array(
    
'tag_blacklist',
    
'unwanted_username_list',
    
// Qui vanno aggiunte tutte le configurazioni in JSON
) as $v) {
    
$yml_content preg_replace('/'.$v.': \'\[(.*)\]\'/'$v.': [$1]'$yml_content);
}
$f fopen($yml'w');
fwrite($f$yml_content);
fclose($f); 

Nel secondo caso sembrerebbe al programma non piaccia qualche valore che dovrebbe essere in JSON (i valori tra parentesi quadre o graffe).
Mattia!
Cita messaggio
boh, non saprei sono partito copiando il config e modificandolo, ecco qui come l'ho configurato:
Codice:
---
login: "username"
password: "password"

start_at_h: 0
start_at_m: 0
end_at_h: 23
end_at_m: 59
window_check_every: 60

debug: 1 # put 0 if you don't want to get debug messages
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"

tag_list: ["tag1", "tag2"]
tag_blacklist: ["sex", "porno"]

like_per_run: 60
max_like_for_one_tag: 30
media_min_like: 20
media_max_like: 70
like_followers_per_run: 20

unlike_per_run: 0
time_till_unlike: 259200

follow_per_run: 40
follow_time: 259200
follow_attempts: 2
user_min_follow: 10
user_max_follow: 30

unfollow_per_run: 0
unfollow_break_min: 3
unfollow_break_max: 17
unfollow_selebgram: false
unfollow_probably_fake: true
unfollow_inactive: true
unfollow_recent_feed: false
unfollow_whitelist: []

unwanted_username_list: ["free", "travel", "shop", "store", "sex", "online"]
comments_per_run: 30
comment_list: ["commento1", "commento2"]
Cita messaggio
Non vedo errori sul formato delle configurazioni.
Vedendo la guida dei parametri delle configurazioni, l'unica cosa da correggere sembrerebbe "comment_list":
Codice:
comment_list: [["commento1", "commento2"]]
Mattia!
Cita messaggio
in realtà inizialmente era proprio così, ma dava lo stesso errore quindi l'ho corretto per vedere se cambiava qualcosa ma nada. Cercando su google ho visto che pure altri hanno questo errore, quindi probabilmente è un errore momentaneo dello script che spero venga fixato quanto prima
Cita messaggio


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  script per generazione immagine da template Chandler 135 278.513 18/07/2015 08:19
Ultimo messaggio: Mattia

Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)