Bine ați venit înapoi la acoperirea noastră cu API-ul Twitter. Dacă folosiți Twitter, este posibil să fi întâlnit un prieten care împărtășește tweets din botul @infinite_scream (prezentat mai sus). Știu că este mai mult un bot pentru că tweets la intervale de zece minute. Dar variază lungimea șirului de țipete virtuale pentru a evita blocarea de către infamul Twitter al lui API nedocumentat restricții. Tweet prea frecvent sau repeta același conținut și veți găsi robii dvs. fără speranță blocați.
Recent, un prieten online mi-a cerut să-i ajut să scrie cod pentru un bot care s-ar putea repeta, dar să ofere variante inteligente de conținut. În tutorialul de astăzi, voi scrie despre cum să faceți acest lucru cu API-ul Twitter.
În tutorialul de astăzi, voi descrie cum să construiți un bot care să facă elementele de bază:
Cu toate acestea, dacă doriți să utilizați un bot API Twitter pentru a vă promova efectiv produsul sau serviciul în cont propriu, fără a vă deranja pe urmașii dvs., trebuie să scrieți un cod care variază în mod inteligent subiectul, conținutul și frecvența tweet-urilor într-un mod organizat. Voi scrie despre cum să faceți asta în episoadele viitoare.
Dacă aveți întrebări sau idei, vă rugăm să le postați în comentariile de mai jos. Dacă doriți să vedeți unele dintre celelalte tutoriale Envato Tuts +, vă rugăm să vizitați pagina instructorului meu, în special seria de pornire. Să începem.
Pentru bot în episodul întâi, încerc să generez în mod regulat tweet-uri distractive evitând în același timp supărarea Twitter Dumnezeu de acces restricționat pe cer.
Conținutul tweet-ului este foarte simplu și poate fi creat la întâmplare prin combinarea textului de stare scris, a hashtags-ului și a adreselor URL.
Bota rulează în Yii, o platformă populară bazată pe PHP. Voi păstra ghidul de mai jos destul de simplu pentru dezvoltatorii PHP. Cu toate acestea, vă încurajez să utilizați cadre. Puteți afla mai multe în seria Yii.
Practic, primul lucru pe care l-am făcut a fost să înregistrez o aplicație pentru a-mi primi cheile Twitter:
Dacă nu sunteți familiarizați cu crearea unei aplicații și cu autorizarea accesului la API cu Twitter, consultați câteva dintre tutorialele noastre anterioare:
Am vrut să creez un sistem în care prietenul meu (sau orice autor autorizat) să poată scrie variații de tweet-uri și să le plaseze într-o bază de date pentru utilizare permanentă. În primul rând, am creat o migrare a bazei de date pentru a construi masa pentru ei.
Toate mesele mele pentru acest proiect au prefixul normă_
. Aici este tabelul Tweet sau norm_tweet
:
db-> driverName === 'mysql') $ tableOptions = 'SETAREA CHARACTERULUI utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_tweet', ['id' => Schema :: TYPE_PK, 'tweet' => Schema :: TYPE_TEXT. TYPE_STRING "NU NULL",], $ tableOptions); funcția publică în jos () $ this-> dropTable ('% norm_tweet');
Apoi, am folosit sistemul de schelă Yii pentru a crea un model și fișiere CRUD pentru mine. Iată modelul:
Iată generația CRUD:
Deci, tot acest cod oferă în mod automat vizualizarea grilei de mai jos și capabilitățile de editare.
Deocamdată, nu utilizez Media ID, care este pentru imagini încărcate pentru a fi utilizate în tweets. Probabil o voi adresa în următorul episod.
Destul de simplu până acum, corect?
Apoi repet acest proces pentru celelalte modele. Iată-l norm_hash
migrarea pentru hashtags:
db-> driverName === 'mysql') $ tableOptions = 'SETAREA CHARACTERULUI utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_hash', ['id' => Schema :: TYPE_PK, 'tag' => Schema :: TYPE_STRING. funcția publică în jos () $ this-> dropTable ('% norm_hash');
Ideea este de a include la întâmplare un hashtag selectat (sau două) în tweets pentru a face să apară că botul este uman, variind tweets sale.
Iată Hashtag UX:
Nu voi repeta pașii Yii Gii de sus, dar îi repet norm_hash
și norm_url
de asemenea.
Iată migrarea bazei de date pentru adăugarea adreselor URL:
db-> driverName === 'mysql') $ tableOptions = 'SETAREA CHARACTERULUI utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_url', ['id' => Schema :: TYPE_PK, 'url' => Schema :: TYPE_STRING. TYPE_INTEGER 'NOT NULL', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); funcția publică în jos () $ this-> dropTable ('% norm_url');
Statul bot poate adăuga adrese URL la momente diferite. Probabil că este bine ca acest bot să nu folosească URL-uri vechi sau să le repete. folosit ultima data
și creat la
Timestamp-urile Unix permit algoritmului de tweeting descris mai jos pentru a decide când să folosească URL-uri.
Iată pagina URL UX:
Acum, să aruncăm o privire asupra algoritmului distractiv de a combina toate aceste tabele în tweets interesante care nu sunt enervante pentru Twitter maestru Overlord de restricții.
Este distractiv să aveți un bot care tweets o varietate de conținut, dar soiul este, de asemenea, de ajutor la prevenirea de a obtine blocat de Twitter.
Puteți vedea limitele de rată Twitter aici, dar unele dintre regulile pentru repetarea conținutului nu par a fi documentate:
Am luat instrucțiuni de la prietenul meu despre cum au vrut ca algoritmul să creeze tweets din baza de date a tweets, hashtags și URL-uri.
Iată algoritmul de construire pe care l-am hotărât pentru moment; este ușor să tweak. O voi descrie în parte.
În opinia mea, algoritmul de mai jos este redus în ceea ce privește folosirea hashtag-urilor și a adreselor URL, iar dacă doriți o varietate mai puternică de conținut, schimbați-o în funcție de preferințele dvs..
Noi primii utilizați yii \ db \ Expression;
pentru a selecta în mod corespunzător un text aleatoriu din tweet:
orderBy (expresie nouă ('rand ()')) -> one ();
Apoi decidem dacă să folosim un hashtag (în prezent 1 la 5 sau 20% din timp) și câte să folosim (în prezent, fixat la doar unul):
// decideți dacă să utilizați un hashtag // alegeți aleatoriu între 0 și 4 $ useHash = rand (0,4); // dacă rand # nu este 0, ci 1,2,3 sau 4, include hashtag (uri) // pentru utilizarea mai frecventă a etichetelor hash, putem schimba acest> 2 sau> 3 dacă ($ useHash> 3) // asa ca acum vom decide care si cate taguri hash sa // Creator a decis sa utilizeze doar o hashtag pentru acum $ numHash = 1; // rand (1,3); // selectați această randă # $ numHash aleatoriu din lista noastră $ hash = NormHash :: find () -> orderBy (expresie nouă ('rand ()')) -> one (); altfel // nu folosiți niciun hashtags $ hash = false;
Apoi, vom decide dacă există o adresă URL disponibilă pentru utilizare. Adresele URL trebuie să aibă o vechime mai mică de o săptămână și pot fi utilizate numai o dată la fiecare 72 de ore (3 zile). Deci, orice nouă adresă URL ar putea fi disponibilă numai o singură dată, de două ori de trei ori înainte de expirare.
// utilizați doar o adresă URL dacă este mai mică de o săptămână $ url_weekago = time () - 7 * 24 * 3600; $ url_3daysago = timp () - 3 * 24 * 3600; // utilizați doar o adresă URL dacă nu a fost postată în ultimele 72 de ore $ url = NormUrl :: find () -> where ('created_at>'. $ url_weekago) -> șiUnde ('last_used<'.$url_3daysago) // handles unused zero case ->orderBy (['id' => SORT_DESC]) -> unul ();
În cele din urmă, vom construi tweet-ul pe baza datelor selectate (adresele URL disponibile sunt adăugate doar unul din patru ori sau șansa de 25%):
$ content = $ txt-> tweet; dacă ($ hash! == false) $ content. = '#'. $ hash-> tag; // adăugați numai o adresă URL de 1/4 din timp dacă (! is_null ($ url) && rand (1,4) == 1) $ content. = ". $ url-> url; $ url-> last_used = time (); $ url-> update (); returnați $ content;
Yii vă permite să apelați controlori de console din cron. Deci, adaug un apel la /console/DaemonController.php în crontab.
$ sudo crontab -l
Iată cum sunt programate sarcinile mele:
# mh dom mon dow * / * * * * / var / www / bot / yii daemon / frecvente * / 15 * * * * / var / www / bot / yii daemon / www / bot / yii daemon / oră 15 1 * * * / var / www / bot / yii daemon / peste noapte 15 3 * * 5 / var / www / bot / yii daemon /
Fiecare ora, daemon / oră
în /console/DaemonController.php este solicitat. Aplicația noastră de bot decide numai dacă trebuie să tweet sau nu o dată la patru ore.
În primul rând, veți vedea că am a NormLog
tabel pe care nu l-am descris mai sus, dar care urmărește toate rezultatele și când s-au făcut tweets. Deci, prietenul meu nu a vrut să tweet mai mult de o dată pe zi.
funcția publică funcțieHurly () // la fiecare oră $ current_hour = data ('G'); dacă ($ actual_hour% 4) // la fiecare ecou de patru ore "Planul de revizuire a tentativelor ..."; $ dayAgo = timp () - 24 * 3600; $ nl = \ frontend \ models \ NormLog :: găsi () -> orderBy (['id' => SORT_DESC]) -> unul (); echo 'created_at:' $ nl-> id. "$ nl-> created_at. '' 'echo' dayago: '$ dayAgo.<$dayAgo) // okay to maybe tweet…
Nu am vrut ca urmașii botului nostru să se supărească de tweetingul de înaltă frecvență.
Apoi, vom alege un număr, practic de șase ori pe zi (la fiecare patru ore), și tweet dacă numărul este de 6 (sau unul din 12 șansă).
// la fiecare patru ore, dacă 6 este selectat de la 1-12, vom tweet // 1 în 12 șanse 12x în două zile $ r = rand (1,12); dacă $ r == 6) \ frontend \ models \ NormTweet :: deliver (); echo "tweet, 6 a fost selectat ... '; altceva echo "nu tweet, 1 din 12 # nu a fost selectat ..."; altceva // nu tweet de două ori în 24 de ore echo 'nu tweet, nu încă 24 de ore ...'; echo '... a făcut să se termine ...!'; dacă $ current_hour% 6) / la șase ore
Iată-l NormTweet :: livra ()
metoda numită de Daemon pentru a posta tweet-ul:
funcția statică publică deliver () // post an update // construct $ content = NormTweet :: build (); // tweet utilizând paramurile pentru norma acct $ connection = new TwitterOAuth (Yii :: $ app-> params ['norm'] ['consumer_key'], Yii :: $ app-> params ['norm'] ['consumer_secret '], Yii :: $ app-> params [' norm '] [' acces_token '], Yii :: $ app-> params [' norm '] [' access_token_secret ']); $ postit = $ conexiune-> post ("starea / actualizarea", ["status" => $ content]); // Salvează-l în jurnal $ nl = NormLog nou (); $ nl-> tweet = $ conținut; $ NL-> Salvare ();
Cheile aplicației Twitter ale contului sunt stocate în /bot/frontend/config/params-local.php, configurat din fișierul bot.ini pe care îl folosesc:
$ more params-local.php 'config [' norm_access_token '],' access_token_secret '=> $ config [' norm_access_token_secret '=> $ config [ '],' user_id '=> $ config [' norm_user_id '],];];
Bots nu sunt simple, dar sunt distracţie!
Iată rezultatele botului nostru:
Glumeam! Aceasta este una din zeița editorială, Tom McFarlin. Scenariile AI nu sunt încă capabile să-și înlocuiască "cunoștințele", dar Envato Tuts + ma angajat să lucrez la acest lucru.
Iată botul real, menit să-i reamintească prietenului meu și urmașilor săi că noile politici ale Americii nu sunt chiar normale. Îmi închipui orice ar fi părerea voastră despre asta.
Sper că ți-a plăcut acest episod.
Apoi, voi crea o platformă mai bine orientată spre marketing pentru a vă ajuta să utilizați API-ul Twitter pentru a vă promova startup-ul, serviciile și afacerea dvs., fără a fi etichetat ca un bot și blocat.
Dacă aveți întrebări sau sugestii despre acest tutorial, vă rugăm să le postați în comentarii. Dacă doriți să respectați viitoarele tutoriale și alte serii Envato Tuts +, vizitați pagina mea de instructor sau urmați @reifman.