Bot pentru Twitter pe php, vr-online - e-zine gratuită pentru toți

După ce ați citit acest scurt articol, veți învăța cunoștințele sacre și veți putea crea o clonă a celebrului serviciu twitterfeed. O glumă! Ascunde droolul înapoi! Vom lua în considerare doar un machete, cel mai simplu prototip, care nu este gata pentru o utilizare reală. Voi spune imediat că nu voi deschide complet codul sursă. Vă voi arăta doar cum să vă autentificați, să lucrați cu rss, tweets, mulțumiri și oameni nelegiuiți care să redea mesajul nostru. Interesat? Apoi citiți mai departe!

Clonăm twitterfeed cu php

În scenariul nostru, vom încerca să implementăm următoarele funcții:

* Rularea în consola, fără acces HTTP
* Autentificare și Twitter prin OAuth
* Noțiuni de bază RSS, parsarea, formarea tweets limitat la 140 de caractere, inclusiv postfix (hashtag sau RT).
* Trimiterea mulțumirilor utilizatorilor care au făcut mesajele retweet ale botului nostru
* Foloving oameni care au făcut retweet

Toate acestea vom instala și configura în linux. Apoi vom începe să folosim crond la fiecare 15 minute. Ești gata? Atunci să începem!

Dacă am decis să utilizez OAuth (și am decis cu siguranță), atunci trebuie să vă înregistrați cererea. Autentificarea de bază nu ar trebui utilizată, deoarece mai devreme sau mai târziu, Twitter poate închide conexiunea. În plus, vom crea un bot personal, astfel încât șirul "de la" trebuie să fie prezent în tweet.

Procesul de înregistrare în sine este destul de simplu. Verificați numai, dar ați uitat să alegeți Citește și Scrieți la înregistrare? În plus, verificați dacă am eliminat complet accesul http pentru a gestiona botul. Avem un cod PIN bazat pe OAuth, deci asigurați-vă că aplicația Client este instalată pe formularul de înregistrare.

După finalizarea înregistrării, veți primi cheia de consum și consumatorul. Nu pierdeți în nici un fel și nu transmiteți aceste date secrete!

Ce fel de mediu? Deci, despre totul în ordine. În lecția de astăzi vom fi nevoiți să folosim următoarele lucruri:

Verificați dacă ați instalat și ați configurat corect - funcțiile magpie și curl funcționează, iar clasa Twitter OAuth este conectată.

Autentificare: Stocarea cheilor de acces

Vom împărți întregul nostru proiect în două părți. Prima va începe automat la fiecare 15 minute, iar cea de-a doua se va executa o singură dată - pentru autentificare.

Acțiunile pregătitoare sunt finalizate. Creați un nou fișier script și numiți-l oauth.php (sau orice vreți). Gândiți-vă și decideți unde sunt stocate cheia de consum și secretul. Prefer să păstrez astfel de lucruri în fișierul config.php, care va fi apoi conectat folosind banalul include / require to auth.php și robot.php.

Bot pentru Twitter pe php, vr-online - e-zine gratuită pentru toți

Scriptul oauth.php va fi rulat pe cont propriu și va lua parametrii liniei de comandă. Aproximativ astfel:

registrul php oauth.php

php oauth.php validează 123456

După ce ați verificat sesiunea OAuth, tastele de acces vor fi stocate undeva pe disc. Mi-am sunat fișierele access_token și access_token_secret. Dacă sunt prezenți, atunci ebot-ul poate trimite tweet-uri, altfel va merge la înregistrare. Sper că totul este clar aici.

Citiți un tweet de la RSS

Tu și cu mine trebuie să învățăm botul nostru, să distingem comenzile pe care le vom transmite. Nu uitați, am fost de acord că toate comenzile vor fi transmise ca parametri de linie de comandă. Puteți implementa codul de procesare a comenzilor în orice mod. Versiunea mea arată astfel:

[code = php]
$ acțiune = $ argv [1];
dacă ($ action == "feed")
$ feed_name = $ argv [2];
// Citiți feedurile, faceți clic pe Twitter
>
altfel ($ action == "rthx")
// Citiți numele, faceți clic pe numele lor!
>
altfel ($ action == "răspuns")
// Citiți numele, umm. Spune ceva!
>
[/ code = php]

Vom gestiona botul în felul următor:

# php robot.php feed wordpress
Citirea articolelor wordpress
# php robot.php rthx
Recunoștință și urmărire a acelor oameni care au făcut din nou mesajul nostru
Răspuns # php robot.php
Trimiterea unui mesaj

Acum, imaginați-vă că suntem în feed-ul RSS. Declarați o matrice asociată care conține căi către fluxurile RSS:

Sunt suficiente două feed-uri pentru a începe. Acum hai să facem tweet-ul nostru de bot #wordpress, citiți și tweet ultimele știri prin intermediul @mashable. Verificați dacă codul de verificare pentru access_token și access_secret este deja scris și nu afișează un mesaj de eroare. Presupun că cheile sunt stocate în $ access_token și $ access_token_secret, respectiv, și au inițializat obiectul $ oauth:

[code = php]
$ oauth = noul TwitterOAuth ($ oauth_consumer_key, $ oauth_consumer_secret,
$ acces_token, $ access_token_secret);
[/ code = php]

Al doilea parametru ("wordpress", în exemplul de mai sus) va fi stocat în variabila $ feed_name. Acum, să ne uităm la următorul cod:

[code = php]
// Stocați setările feedului în feed-ul $
$ feed = $ fluxuri [$ feed_name];

/ / Fetch feed-ul și stoca prefixul
$ rss = fetch_rss ($ feed ["url"]);
$ postfix = $ feed ["postfix"];

// Faceți buclă prin elementele de alimentare
foreach ($ rss-> elemente ca element $)
// E destul de simplu aici
$ title = trim ($ element ["titlu"]);
$ url = $ element ["link"];

Dacă totul merge bine, continuă
dacă ($ shortened_url-> errorCode ==
// Returnați urlul scurtat de la obiectul json
foreach ($ scurtened_url-> rezultate ca $ key => valoare $)
$ shorturl = $ value-> shortUrl;

// Formați un mesaj nou de la adresa URL scurtă și postfix
$ message = "$ shorturl $ postfix";
$ lungime = strlen ($ mesaj);

// Ar trebui să tăiem titlul dacă este prea lung
// Pentru ca tweeturile noastre să aibă 120 de caractere sau mai puțin
dacă (strlen ($ title)> 120- $ lungime)
$ shorttitle = substr ($ titlu, 0, 117- $ lungime). ";"; ";
altfel
$ shorttitle = $ titlu;

// Adăugați titlul la mesaj
$ message = $ shorttitle. $ mesaj;

// Așteptați câteva minute înaintea următorului tweet
// Nu încercați să inundați Twitter, amintiți-vă
// Doar 150 de apeluri API pe oră, utilizați-le cu înțelepciune.
somn (rand (60,120));
>
>
>
[/ code = php]

Folovim și spune mulțumesc

Aveți grijă atunci când creați această parte. Nu vrei să mulțumești unei persoane pentru retweet de mai multe ori? Dacă sunteți de acord cu mine, atunci va trebui să aveți grijă să stocați id-ul (ultima) retweet, pentru care recunoștința a fost deja trimisă. Identificatorul va fi în parametrul $ since_id. Voi lăsa acest algoritm pe conștiința dvs., dar, în general, ar trebui să obțineți ceva de genul:

[code = php]
// Citiți since_id dintr-un fișier
$ since_id = @file_get_contents ("retweets_since_id");
dacă ($ since_id> <>
altfel <$since_id = 1;>

// Creați obiectul XML
$ mentions = simplexml_load_string (mențiuni $);

// Configurați un tablou care va conține utilizatori pentru a returna și urmați
$ users_to_rthx = array ();

/ / Citiți idul ultimului tweet și păstrați-l în fișierul retweets_since_id
$ last_id = ($ mentions-> status [0] -> id> $ since_id). $ mentions-> status [0] -> id. $ since_id;
file_put_contents ("retweets_since_id", (șir) $ last_id);

// Faceți buclă prin tweets
foreach ($ mentions-> status ca $ status)
Să vedem dacă cineva te-a reîntoțat.
// Err, nu uitați să înlocuiți @ nume
dacă (strpos (strtolower ($ status-> text), "rt @ yourname")
|| strpos (strtolower ($ status-> text), "via @ yourname"))
// Adăugați tipul la matricea retweeters
$ users_to_rthx [] = $ status-> user-> screen_name;
>
>

// Eliminați duplicatele (nu mulțumim pe cineva de două ori într-un tweet)
$ users_to_rthx = array_unique ($ users_to_rthx);

// Configurați prefixul tweet și inițializați variabila mențiuni
// Tweet_prefix este doar pentru caz
$ tweet_prefix = "Vă mulțumim pentru retweets!";
$ tweet_mentions = "";
$ tweet_prefix = "";

// Culegeți prin retweeters vărsarea variabilelor din matrice
în timp ce ($ mention_this_guy = array_pop ($ users_to_rthx))
// Dacă tipul care a apărut se încadrează în tweet-ul nostru nou, adăugați-l
dacă (strlen ($ tweet_prefix. $ tweet_mentions.
$ tweet_postfix. "@". $ mention_this_guy) <140)
$ tweet_mentions. = "@". $ mention_this_guy. "";

// Formați mesajul și ieșiți pe ecran (pentru depanare)
$ message = $ tweet_prefix. tăiați ($ tweet_mentions). $ tweet_postfix;
ecou "Tweeting:". $ mesaj. "(". strlen ($ message) "); \ n";

// Așteptați câteva secunde înainte de următoarea rundă
somn (rand (5,30));

// Dacă am mai rămas ceva în mențiuni, trebuie să tweet asta
dacă (strlen ($ tweet_mentions))
$ message = $ tweet_prefix. tăiați ($ tweet_mentions). $ tweet_postfix;
ecou "Tweeting:". $ mesaj. "(". strlen ($ message) "); \ n";

Generați răspunsuri aleatorii

Aceasta este cea mai amuzantă parte a piesei. Ori de câte ori cineva menționează numele nostru (și acest lucru nu este retweet), botul nostru îl va trimite un mesaj neobișnuit, fără să uităm să-i menționăm numele. Codul arată exact ca și codul pe care l-am spus mulțumesc pentru retweet. Singura excepție este căutarea pentru "rt @ yourname" și "@ yourname".

Nu uitați să salvați replies_since_id, deoarece Nu avem nevoie ca mesajul să fie trimis utilizatorilor de mai multe ori (un număr infinit de ori). Nu vrem să fim interzise de noi? Codul meu arată astfel:

[code = php]
// Bucla
în timp ce ($ mention_this_guy = array_pop ($ users_to_reply))
// Unele citate aleatoare Puteți adăuga propriile dvs.
$ random_quotes = array (
"Wha?", "Interesant", "Afirmativ, domnule", "Hmm, mă face să mă gândesc.",
"Deci chiar crezi că nu sunt om?
);

// Formatați mesajul și trimiteți un citat la un citat
$ message = "@". $ mention_this_guy. "".
$ random_quotes [array_rand ($ random_quotes)];

/ Așteaptă puțin
somn (rand (5,30));
>
[/ code = php]

Acum configurați cron. Deschideți fișierul crontab și adăugați câteva linii:

# Feed mashable și wordpress tweets o dată la fiecare 15-16 minute
* / * * * * * Php /home/youruser/twibots/robot.php feed wordpress
* / 16 * * * * php /home/youruser/twibots/robot.php feed mashable
# Mulțumiți și urmați retweerele o dată la fiecare jumătate de oră
* / * * * * * Php /home/youruser/twibots/robot.php rthx
# Răspundeți persoanelor pe oră
01 * * * * răspuns php /home/youruser/twibots/robot.php

Reporniți daemonul cron și voila! Este posibil să se bucure .

Dacă utilizați o găzduire simplă, puteți accesa crontab (sau efectua sarcini cron) prin CPanel (gazdă panou de control). Nu uitați să spuneți php înaintea comenzii necesare. Rețineți că în fișierele .php linux nu sunt executabile.

De asemenea, vreau să vă atrag atenția la următorul moment. Încercați să nu păstrați scripturile în directoare, pe care le puteți accesa prin Apache (adică prin accesarea fișierului din browser). Nu trebuie să explic că se poate întâmpla din cauza asta. Dacă tot decideți să le stocați în directoare publice, aveți grijă să creați un fișier .htaccess cu mențiunea "deny from all". Nu vrei ca oamenii neautorizați să folosească botul nou-născut?

Articole similare