Utilizzo di espressioni regolari per aggiungere collegamenti a tweets
Scritto il 2 novembre 2009 / / programmazione .
L'utilizzo di Twitter da parte sua interfaccia web o tramite il client più recenti, gli utenti abituati a vedere i nomi utente e legati @ # hashtags all'interno di qualsiasi stato di aggiornamento che leggono.
Quando si usa Twitter API sul vostro sito web, servizio o applicazione, è necessario trattare con tweet testo normale, senza tag in modo che nessun link. Utilizzo di espressioni regolari è possibile creare collegamenti facilmente e rapidamente, in modo del tutto qualsiasi linguaggio di programmazione.
Come quello che conta davvero è l'espressione regolare stessa e non il linguaggio di programmazione utilizzato, vorrei solo mostrare due esempi, utilizzando PHP e Perl.
Una breve introduzione
Immaginiamo interrogato Twitter API e tornato un tweet come la seguente
appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto
per fare un buon lavoro abbiamo bisogno di creare 3 link:
- mariorossi @ saranno collegati al suo profilo di Twitter
- someforum # connessi alla ricerca su Twitter
- http://bit.ly/foo per il proprio legame
Che cosa vogliamo ottenere è quello di eplace r una qualsiasi delle stringhe con un link HTML che fa riferimento l'URL corretto. Abbiamo ovviamente bisogno di considerare che è possibile avere più di una parola chiave per ogni tipo.
Sostituzione di funzioni in PHP e Perl
Come abbiamo detto prima, abbiamo la necessità di sostituire un testo con un link, vediamo quali funzioni che andremo a usare
PHP
Php permette agli sviluppatori di interfacciarsi con sostituzioni regex utilizzando la funzione preg_replace nativo. La sintassi necessaria è spiegato in seguito
preg_replace ('/ search /', 'sostituire', fonte di $);
Nella nostra ricerca caso sarà l'espressione regolare che ci accingiamo a costruire, sostituire è il link e la fonte nostri tweet iniziale.
Perl
Perl utilizza una sintassi diversa, facendo uso di espressioni regolari native ~ operatore
Tweet $ = ~ s / ricerca / sostituzione / g;
dove $ tweet è sia la nostra origine e la produzione, la ricerca è la nostra regex e sostituire il nostro link.
Se vuoi inserire username @
Prima di tutto creiamo una espressione regolare in grado di riconoscere nomi quotati in un tweet
/ @ ([A-zA *]-Z0-9_) /
Come nomi utente twitter consentire solo caratteri alfanumerici più il carattere di sottolineatura l'espressione regolare è stato costruito in modo che corrisponda semplicemente il nome utente, in modo che gli indirizzi email sono esclusi (contengono punti).
DETTAGLI Regular Expression
- @ iniziale è necessaria per cominciare a trovare il nome utente. E 'al di fuori della parentesi quindi non è restituito dal espressioni regolari e abbiamo bisogno di ricordarsi di scrivere di nuovo la in uscita.
- all'interno delle parentesi () c'è tutto tornerà.
- dentro le piazze [] ci sono i personaggi che le consentono di essere presente nel nome utente. az è più in basso latino char, AZ qualsiasi maiuscolo char, 0-9 qualsiasi numero e _, ben l'underscore
- * l'asterisco indica che ogni personaggio del precedente potrebbero essere presenti per infinite volte nella nostra stringa di matching. Questo significa solo che non sappiamo esattamente quanto tempo il nome utente sarà
SCEGLI LA DESTRA DI USCITA
Il link necessari per qualsiasi menzione @ twitter è il profilo di quell'utente. Poiché la nostra espressione regolare sarà di ritorno solo valore useremo tale valore per costruire quel collegamento. Ricordate che la nostra espressione regolare restituirà solo l'username, senza la [at]!
href="http://twitter.com/$1" <a title="$1 profilo su Twitter" rel="nofollow"> @ $ 1 </ a>
Si noti che $ 1 è il nome utente restituito dal espressioni regolari, e che rel = "nofollow" è usato per la sicurezza page rank.
Infine, avendo entrambe le espressioni regolari per la ricerca e il legame sostituzione, si può procedere per creare il codice
PHP
Tweet $ = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; $ regex ='/@([ ]*)/'; a-zA-Z0-9_ Link_pattern $ = '<a href="http://twitter.com/$1" title="$1 profilo su Twitter" rel="nofollow"> @ $ 1 </ a>'; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $);
Perl
my $ tweet = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; Tweet $ = ~ s / @ ([a-zA-Z0-9_ ]*)/< a href = "http://twitter.com/ $ 1" title = "profilo di $ 1 su Twitter" rel = "nofollow"> @ $ 1 </ a> / g;
Entrambi i codici di cui sopra (se fatto eco o stampato) sarebbe uscita
appena visto mariorossi @ # someforum a parlare del suo prodotto http://bit.ly/foo
Se vuoi hashtags #
L'espressione regolare necessari per hashtags è proprio la stessa di quella che abbiamo visto in precedenza per @ username, ovviamente sostituendo la @ con un cancelletto #. L'output sarà simile anche, ma cambiando dal dominio di Twitter a quello di ricerca come questo
<a title="search href="http://search.twitter.com/search?q=%23$1" per 1 dollaro su twitter" rel="nofollow"> # $ 1 </ a>
cui 23% è il simbolo urlencoded per l'hash e tutti gli altri parametri sono già stati spiegati.
Come si dovrebbe capire tutto ciò che riguarda la regex precedente mi limiterò a elencare i codici completi.
PHP
Tweet $ = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; $ regex ='/#([ ]*)/'; a-zA-Z0-9_ Link_pattern $ = 'href="http://search.twitter.com/search?q=%23$1" title="search <a per 1 dollaro su Twitter" rel="nofollow"> # $ 1 </ a>'; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $);
Perl
my $ tweet = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; Tweet $ s = ~ / \ # ([a-zA-Z0-9_ ]*)/< a href = "% 23 http://search.twitter.com/?q = $ 1" titolo "per la ricerca = 1 $ per Twitter "rel =" "> nofollow # $ 1 </ a> / g;
Entrambi i codici precedenti sarebbe uscita
appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto
Consulta per i collegamenti
Ultime sostituzione stiamo per compiere è di circa il link. Per abbinare i link che andremo a cercare qualsiasi tipo di parola situato tra http e uno spazio, o una parentesi. Ecco la regex
/ Http ([s]?): \ / \ / ([^ \ \ )$]*)/
DETTAGLI Regular Expression
- http è fuori dal nostro corrispondente, è solo bisogno di ricerca per gli URL nei tweet
- ([S]?) È un semplice trucco per abbinare sia URL HTTP e HTTPS. Essa corrisponde e restituisce la 's' solo se esiste "?"
- : / / È solo la parte successiva del URL
- ([^ \ \ )$]*) Partite caratteri infinito (*) che potrebbe essere qualsiasi cosa tranne "^" lo spazio "\" una parentesi chiusa "\)" o la fine della stringa "$"
SCEGLI LA DESTRA DI USCITA
Ovviamente per un collegamento abbiamo solo bisogno di mettere il tag <a> prima il link e chiuderlo subito dopo. Tuttavia a causa della nostra precisione sul protocollo di corrispondenza (http o https) abbiamo bisogno di usare 2 variabili nella nostra produzione: $ 1 sarà la s (se presente), $ 2 sarà l'url reale. Di seguito è riportato l'output completo
<a href="http$1://$2" rel="nofollow" title="$2"> http $ 1: / / $ 2 </ a>
Così qui sono i due esempi
PHP
Tweet $ = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; $ regex = '/ http ([s]?): \ / \ / ([^ \ \ )$]*)/'; Link_pattern $ = '<a href="http$1://$2" rel="nofollow" title="$2"> http $ 1: / / $ 2 </ a>'; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $);
Perl
my $ tweet = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; Tweet $ = ~ s / http ([s]?): \ / \ / ([^ \ \ )$]*)/< a href = "http $ 1: / / $ 2" rel = "" title = nofollow "$ 2 "http> $ 1: / / $ 2 </ a>
Entrambi i codici precedenti sarebbe uscita
appena visto parlando a mariorossi @ # someforum circa il suo prodotto http://bit.ly/foo
Il codice completo
Come riferimento ho una relazione per ogni lingua il codice completo di questo esempio.
PHP
Tweet $ = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; $ regex = '/ http ([s]?): \ / \ / ([^ \ \ )$]*)/'; Link_pattern $ = '<a href="http$1://$2" rel="nofollow" title="$2"> http $ 1: / / $ 2 </ a>'; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $); $ regex ='/@([ ]*)/'; a-zA-Z0-9_ Link_pattern $ = '<a href="http://twitter.com/$1" title="$1 profilo su Twitter" rel="nofollow"> @ $ 1 </ a>'; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $); $ regex = '/ \ # ([a-zA-Z0-9_ ]*)/'; Link_pattern $ = 'href="http://search.twitter.com/search?q=%23$1" title="search <a per 1 dollaro su Twitter" rel="nofollow"> \ # $ 1 </ a>' ; Tweet $ = preg_replace ($ regex, $ link_pattern tweet, $);
Perl
my $ tweet = 'appena visto parlando a mariorossi @ # someforum sulla sua http://bit.ly/foo prodotto'; Tweet $ = ~ s / http ([s]?): \ / \ / ([^ \ \ )$]*)/< a href = "http $ 1: / / $ 2" rel = "" title = nofollow "$ 2 "http> $ 1: / / $ 2 </ a> Tweet $ = ~ s / @ ([a-zA-Z0-9_ ]*)/< a href = "http://twitter.com/ $ 1" title = "profilo di $ 1 su Twitter" rel = "nofollow"> @ $ 1 </ a> / g; Tweet $ s = ~ / \ # ([a-zA-Z0-9_ ]*)/< a href = "% 23 http://search.twitter.com/?q = $ 1" titolo "per la ricerca = 1 $ per Twitter "rel =" nofollow "> \ # $ 1 </ a> / g;
Forse Related Posts: (generato automaticamente)
- Post relativi perl
- Concordia SCS »Blog Archive» (CANCELLATO) Introduzione al Perl ...
- Aggiornamento per Debian libhtml-parser-perl «Re-Blog
- L'introduzione di XML:: «Easy spesso come due tavole corte - Mark ...

















































