Contalike

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Su un noto social network esiste una pagina di una rivista chiamata Fumetti Disegnati Male. Su Fumetti Disegnati Male si fa molta ironia alla "corsa ai like" e quando si perde un like di solito ci sono scene strappalacrime o feroci e irripetibili insulti verso chi ha tolto il like. Visto però che la pagina è estremamente popolare, come fare a capire quando si perde un like prima che ne arrivi uno nuovo? Sì, c'è la pagina delle statistiche, ma non è che si può controllare ogni cinque minuti, ché poi il tasto F5 si cancella.

A questo proposito ci viene incontro il Contalike!

Likewatch.JPG

"The likes must flow"

Il funzionamento è molto semplice: un Raspberry Pi collegato a internet, una resistenza (consigliati 270Ω) collegata alla terra, e due LED (possibilmente uno verde e uno rosso). Gli anodi (+) dei LED vanno collegati a due uscite della GPIO del Rasbperry Pi, i catodi (-) vanno collegati alla resistenza.

Il codice

#!/usr/bin/env python
import urllib
from xml.dom import minidom
import time
import wiringpi
import signal

def uscitore(signal,frame):
    print "\nexiting..."
    exit()

def blinkings(npin,nbl):
    while (nbl > 0):
        led.digitalWrite(npin,1)
        time.sleep(0.5)
        led.digitalWrite(npin,0)
        time.sleep(0.5)
        nbl -=1


signal.signal(signal.SIGINT, uscitore)
fburl = "https://api.<NOME DEL SOCIAL NETWORK FAMOSO>.com/method/fql.query?query=select%20%20like_count%20from%20link_stat%20where%20url=%22https://www.<NOME DEL SOCIAL NETWORK FAMOSO>.com/fumettidisegnatimale%22"
pause = 5
num_likes = 0
old_likes = 0
led = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_PINS)
led.pinMode(10,led.OUTPUT)
led.pinMode(11,led.OUTPUT)
gpin = 10
rpin = 11
blinks = 0
while ( True ):
    try:
        dom = minidom.parse(urllib.urlopen(fburl))
        num_likes = int(dom.getElementsByTagName('like_count')[0].childNodes[0].nodeValue)
    except (IOError),e:
        time.sleep(5)
        continue
    if old_likes != 0:
        if num_likes > old_likes:
            print "abbiamo guadagnato un like"
            blinks = num_likes - old_likes
            blinkings(gpin,blinks)
        elif old_likes > num_likes:
            print "abbiamo perso un like"
            blinks = old_likes - num_likes
            blinkings(rpin,blinks)
    old_likes = num_likes
    time.sleep(pause)

Questo famiger.. aheh.. famoso social network fornisce delle api per fare diverse cose. Una di queste è restituire un XML con il numero di likes di una pagina. L'indirizzo dove recuperare questa informazione è memorizzato nella variabile fburl. La variabile pause è l'intervallo in secondi che distanzia il controllo dei likes mentre gpin e rpin sono i pin del LED verde e del LED rosso.

Dopo aver fatto il parse dell'XML e recuperato il numero dei likes (se la connessione non va allora intercetta IOError e ricomincia) compara questo valore con il valore precedente. Se è calato allora abbiamo perso un like e fa lampeggiare il LED rosso, se è cresciuto allora evviva! Abbiamo guadagnato un like! E quindi lampeggia il LED verde. Più likes si sono guadagnati durante l'intervallo pause, più lampeggi produce. Suggerimenti per migliorare 'sta roba: al posto dei LED mettere qualsiasi cosa (proprio qualsiasi! tipo che vi fa partire la lavatrice!).

Il Contalikes è -tutto sommato- un'invenzione completamente inutile.

"I am the one who likes!"