Contalike

Da raspibo.

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!"

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti