Bentornati alla nostra copertura dell'API di Twitter. Se usi Twitter, potresti aver incontrato un amico che condivide tweet dal bot @infinite_scream (mostrato sopra). So che è principalmente un bot perché tweets a intervalli di dieci minuti. Ma varia la lunghezza della stringa delle sue urla virtuali per evitare di essere bloccato dalle famigerate API dell'API di Twitter non documentato restrizioni. Tweet troppo spesso o ripeti lo stesso contenuto e scoprirai che i tuoi robot sono irrimediabilmente bloccati.
Recentemente, un amico online mi ha chiesto di aiutarli a scrivere codice per un bot che potrebbe ripetersi, ma fornire alcune variazioni intelligenti del contenuto. Nel tutorial di oggi, scriverò su come farlo con l'API di Twitter.
Nel tutorial di oggi, descriverò come creare un bot che faccia le basi:
Tuttavia, se si desidera utilizzare un bot API di Twitter per promuovere in modo efficace il proprio prodotto o servizio sul proprio account senza infastidire i follower, è necessario scrivere codice che varia in modo intelligente l'argomento, i contenuti e la frequenza dei tweet in modo organizzato. Scriverò su come farlo negli episodi futuri.
Se hai domande o idee, per favore pubblicale nei commenti qui sotto. Se ti piacerebbe vedere alcuni dei miei altri tutorial Envato Tuts +, visita la mia pagina di istruttori, in particolare la mia serie di startup. Iniziamo.
Per il bot nell'episodio 1, sto cercando di generare divertenti tweet su base regolare evitando di sconvolgere il grande Twitter God of Restricted Access in the Sky.
Il contenuto dei tweet è molto semplice e può essere creato in modo casuale combinando testo di stato scritto in precedenza, hashtag e URL.
Il bot funziona in Yii, una popolare piattaforma basata su PHP. Terrò la guida sotto abbastanza semplice per gli sviluppatori PHP diretti. Tuttavia, ti incoraggio a utilizzare i framework. Puoi saperne di più nella mia serie Yii.
Fondamentalmente, la prima cosa che ho fatto è stata registrare un'app per ottenere i miei codici Twitter:
Se non hai familiarità con la creazione di un'app e autorizzi l'accesso API con Twitter, consulta alcune delle nostre esercitazioni precedenti:
Volevo creare un sistema in cui il mio amico (o qualsiasi altro autore autorizzato) potesse scrivere variazioni dei tweet e inserirli in un database per l'uso continuo. Innanzitutto, ho creato una migrazione del database per creare la tabella per loro.
Tutte le mie tabelle per questo progetto hanno il prefisso norma_
. Ecco la tabella Tweet o norm_tweet
:
db-> driverName === 'mysql') $ tableOptions = 'SET CARATTERE utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_tweet', ['id' => Schema :: TYPE_PK, 'tweet' => Schema :: TYPE_TEXT. 'NOT NULL', 'media_id' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norma_tweet');
Successivamente, ho utilizzato il sistema di scaffalature Gii di Yii per creare un modello e file CRUD per me. Ecco il modello:
Ed ecco la generazione CRUD:
Pertanto, tutto questo codice fornisce automaticamente la vista griglia di seguito e le funzionalità di modifica.
Per ora, non sto utilizzando il Media ID, che è per le immagini che vengono caricate per essere utilizzate nei tweet. Probabilmente parlerò di questo nel prossimo episodio.
Piuttosto semplice finora, giusto?
Quindi, ripeto questo processo per gli altri modelli. Ecco il norm_hash
migrazione per hashtag:
db-> driverName === 'mysql') $ tableOptions = 'SET CARATTERE utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_hash', ['id' => Schema :: TYPE_PK, 'tag' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% normal_hash');
L'idea è di includere casualmente un hashtag (o due) selezionato nei tweet per far sembrare che il bot sia umano, variando i suoi tweet.
Ecco l'Hashtag UX:
Non ripeterò i passi di Yii Gii dall'alto, ma li ripeto per norm_hash
e norm_url
anche.
Ecco la migrazione del database per l'aggiunta di URL:
db-> driverName === 'mysql') $ tableOptions = 'SET CARATTERE utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_url', ['id' => Schema :: TYPE_PK, 'url' => Schema :: TYPE_STRING. 'NOT NULL', 'last_used' => Schema :: TYPE_INTEGER. 'NOT NULL', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_url');
Il botmaster può aggiungere URL in momenti diversi. Probabilmente è meglio per questo bot non usare vecchi URL o ripeterli. Il ultimo uso
e created_at
I timestamp Unix consentono all'algoritmo di tweeting descritto di seguito di decidere quando utilizzare gli URL.
Ecco la pagina URL UX:
Ora, esaminiamo il divertente algoritmo per combinare tutte queste tabelle in tweet interessanti che non sono fastidiosi Master Overlord of Restrictions di Twitter.
È divertente avere un bot che tweets una varietà di contenuti, ma la varietà è anche utile per evitare che venga bloccata da Twitter.
Qui puoi vedere i limiti del tasso di Twitter, ma alcune delle regole per la ripetizione dei contenuti non sembrano essere documentate:
Ho preso indicazioni dal mio amico su come volevano l'algoritmo per creare tweet dal database di tweet, hashtag e URL.
Ecco l'algoritmo di costruzione che abbiamo deciso per ora; è facile da modificare. Lo descriverò in parti.
A mio parere, l'algoritmo di seguito è basso sul suo utilizzo di hashtag e URL e, se si desidera una più ampia varietà di contenuti, modificarlo a proprio piacimento.
Innanzitutto, noi usa yii \ db \ Expression;
per selezionare correttamente un singolo tweet casuale dalla tabella:
orderBy (nuova espressione ('rand ()')) -> one ();
Quindi decidiamo se utilizzare un hashtag (attualmente 1 su 5 o il 20% delle volte) e quanti ne usi (attualmente corretti su uno solo):
// decide se usare un hashtag // scegli un # casuale tra 0 e 4 $ useHash = rand (0,4); // se rand # non è 0 ma invece 1,2,3 o 4, include hashtag (s) // per meno freq uso di tag hash, possiamo cambiare questo> 2 o> 3 se ($ useHash> 3) // quindi ora decideremo quali e quanti tag hash // Creator hanno deciso di utilizzare solo un hashtag per ora $ numHash = 1; // rand (1,3); // seleziona questo rand # $ numHash a caso dal nostro elenco $ hash = NormHash :: find () -> orderBy (nuova espressione ('rand ()')) -> one (); else // non usare hashtag $ hash = false;
Quindi, decidiamo se c'è un URL disponibile per l'uso. Gli URL devono essere meno di una settimana e possono essere utilizzati solo una volta ogni 72 ore (3 giorni). Quindi qualsiasi nuovo URL potrebbe essere disponibile per l'uso una volta, due volte o forse tre volte prima della scadenza.
// usa solo un url se è meno di una settimana $ url_weekago = time () - 7 * 24 * 3600; $ url_3daysago = time () - 3 * 24 * 3600; // usa solo un url se non è stato pubblicato nelle ultime 72 ore $ url = NormUrl :: find () -> dove ('created_at>'. $ url_weekago) -> andWhere ('last_used<'.$url_3daysago) // handles unused zero case ->orderBy (['id' => SORT_DESC]) -> one ();
Infine, costruiamo il tweet in base ai dati selezionati (gli URL disponibili vengono aggiunti solo una volta su quattro o il 25% di probabilità):
$ content = $ txt-> tweet; if ($ hash! == false) $ content. = '#'. $ hash-> tag; // aggiungi solo l'URL 1/4 della volta se (! is_null ($ url) && rand (1,4) == 1) $ content. = ". $ url-> url; $ url-> last_used = time (); $ url-> update (); restituisce $ content;
Yii consente di chiamare i controller della console da cron. Quindi aggiungo una chiamata al mio /console/DaemonController.php in crontab.
$ sudo crontab -l
Ecco come sono programmati i miei compiti:
# mh dom mon dow comando * / 3 * * * * / var / www / bot / yi daemon / frequente * / 15 * * * * / var / www / bot / yii daemon / quarto 0 * * * * / var / www / bot / yii daemon / ogni ora 15 1 * * * / var / www / bot / yiemon / overnight 15 3 * * 5 / var / www / bot / yi daemon / settimanale
Ogni ora, daemon / oraria
in /console/DaemonController.php è richiesto. La nostra app bot decide solo se twittare o meno una volta ogni quattro ore.
Per prima cosa, vedrai che ho un NormLog
tavolo che non ho descritto sopra, ma che tiene traccia di tutte le uscite e quando sono stati realizzati i tweet. Quindi il mio amico non voleva twittare più di una volta al giorno.
funzione pubblica actionHourly () // ogni ora $ current_hour = date ('G'); if ($ current_hour% 4) // ogni quattro ore echo "Review tweeting plan ..."; $ dayAgo = time () - 24 * 3600; $ nl = \ frontend \ models \ NormLog :: find () -> orderBy (['id' => SORT_DESC]) -> one (); echo 'created_at:'. $ nl-> id. ". $ nl-> created_at. '...'; echo 'dayago:'. $ dayAgo. '...'; if ($ nl-> created_at<$dayAgo) // okay to maybe tweet…
Non volevamo che i follower del nostro bot venissero disturbati dal tweeting ad alta frequenza.
Quindi, selezioniamo un numero, in pratica sei volte al giorno (ogni quattro ore), e twittiamo se il numero è 6 (o un caso su 12).
// ogni quattro ore, se viene selezionato 6 da 1 a 12, twittiamo // 1 su 12 possibilità 12 volte in due giorni $ r = rand (1,12); if ($ r == 6) \ frontend \ models \ NormTweet :: deliver (); echo 'tweet, 6 è stato scelto ...'; else echo "non tweet, 1 su 12 # non selezionato ..."; else // mai twittare due volte in 24 ore echo 'non twittare, non ancora 24 ore ...'; echo '... ha fatto finire ...!'; if ($ current_hour% 6) // ogni sei ore
Ecco il NormTweet :: consegnare ()
metodo chiamato da Demone per pubblicare il tweet:
public static function deliver () // postare un aggiornamento // construct $ content = NormTweet :: build (); // tweet usando parametri per la norma acct $ connection = new TwitterOAuth (Yii :: $ app-> params ['norm'] ['consumer_key'], Yii :: $ app-> params ['norma'] ['consumer_secret '], Yii :: $ app-> params [' norma '] [' access_token '], Yii :: $ app-> params [' norma '] [' access_token_secret ']); $ postit = $ connection-> post ("statuses / update", ["status" => $ content]); // salvalo nel log $ nl = new NormLog (); $ nl-> tweet = $ contenuto; $ NL-> save ();
Le chiavi dell'applicazione Twitter dell'account sono memorizzate in /bot/frontend/config/params-local.php, configurato dal file bot.ini che utilizzo:
$ more params-local.php ['consumer_key' => $ config ['norm_consumer_key'], 'consumer_secret' => $ config ['norm_consumer_secret'], 'access_token' => $ config ['norm_access_token'], 'access_token_secret' => $ config ['norm_access_token_secret '],' user_id '=> $ config [' norm_user_id '],],];
I robot non sono semplici, ma lo sono divertimento!
Ecco i risultati del nostro bot:
Stavo solo scherzando! È una delle dee editoriali, Tom McFarlin. Gli script AI non sono ancora in grado di sostituire le sue "intuizioni", ma Envato Tuts + mi ha assunto per lavorare su questo.
Ecco il vero bot, pensato per ricordare al mio amico e ai suoi seguaci che la nuova politica americana non è esattamente normale. Immagino quali sono le tue opinioni con cui sei d'accordo.
Spero ti sia piaciuto questo episodio.
Successivamente, creerò una piattaforma più orientata al marketing per aiutarti a utilizzare l'API di Twitter per promuovere la tua startup, i tuoi servizi e la tua attività senza essere etichettato come bot e bloccato.
Se hai domande o suggerimenti su questo tutorial, per favore pubblicali nei commenti. Se desideri tenere il passo con il mio futuro Envato Tuts + tutorial e altre serie, visita la pagina del mio istruttore o segui @reifman.