BloggerSnap permette di avere un applet Flash sul sito che, grazie all’interazione con una webcam, permette di scattare una foto che poi sarà lasciata sul sito/blog.

Si tratta di un modo come un altro per lasciare un segno del proprio passaggio su di un sito. L’idea è geniale anche se il servizio andrebbe potenziato visto che molte volte il server è lento come una lumaca; ma non è di questo che vogliamo parlare.

La soluzione BloggerSnap è divisa in una parte free ed una a pagamento. Quella a pagamento, rispetto a quella free ha in più la possibilità di avere uno storico di tutte le foto fatte. Mentre quella free memorizza solo quella visibile, tutte le altre vengono cancellate.

Ma ho trovato una soluzione abbastanza funzionale che risolve il problema dello storico delle foto.

Il ragionamento alla base di questa soluzione è:

“E’ molto improbabile che due foto, anche se dello stesso soggetto, scattate in momenti differenti, abbiamo la medesima dimensione in termini di byte; tuttavia la medesima foto avrà sempre la stessa dimensione“.

Avendo questo concetto come base di elaborazione il procedimento è:

  • Salvo l’immagine di BloggerSnap ogni volta che la visualizzo, il nome è nel formato YmdHis (formato PHP per le , ndr.);
  • Prendo l’ultima foto salvata in termini di tempo (mi faccio aiutare ordinando i nomi di tutte le foto) e confronto la dimensione di questa con quella appena salvata;
  • Se la dimensione è uguale (in termini di byte) cancello la foto appena salvata, altrimenti la salvo perché significa che è una nuova immagine.

Ovviamente per far si che il nostro codice venga eseguito ogni qualvolta si visualizzi l’applet Flash, occorre fare il tunneling del codice originale di BloggerSnap.

Tutto ciò, tradotto in codice PHP è:

define('BLOGGERSNAP_UID', 'TUO_CODICE');

$shoot = 'http://www.bloggersnap.com/snapshots/' . BLOGGERSNAP_UID . '.jpg';

$dirShootStore = $_SERVER['DOCUMENT_ROOT'] . '/public/snapshots/';

if ($hDirShootStore = opendir($dirShootStore)) {

while ($file = readdir($hDirShootStore))

if (is_file($dirShootStore . $file) && !is_dir($dirShootStore . $file)) $arShoots[] = $file;

closedir($hDirShootStore);

if (is_array($arShoots)) {

sort($arShoots);

$lastShootDimension = filesize($dirShootStore . array_pop($arShoots));

} else $lastShootDimension = 0;

$shootStore = $dirShootStore . date('YmdHis') . '.jpg';

file_put_contents($shootStore, file_get_contents($shoot));

@chmod($shootStore, 0644);

if ($lastShootDimension == filesize($shootStore)) @unlink($shootStore);

}

$stream = file_get_contents('http://www.bloggersnap.com/displaysnap.php?u=' . BLOGGERSNAP_UID);

$stream = str_replace('<img src="', '<img src="http://www.bloggersnap.com/', $stream);

$stream = str_replace("window.open('", "window.open('http://www.bloggersnap.com/", $stream);

echo $stream;

Ultimo aggiornamento dello script 31 gennaio 2008

Il codice va modificato in due punti. La prima cosa da fare è modificare la costante BLOGGERSNAP_UID con il valore assegnatoci da BloggerSnap. Per individuarlo basta leggere il codice che dobbiamo inserire nel nostro sito per visualizzare l’applet in Flash. Il codice è simile al seguente:

<iframe src="http://www.bloggersnap.com/displaysnap.php?u=XXXXX" width="170″ height="160″ frameborder="0″ scrolling="no"></iframe>

a noi interessa il valore dopo la stringa “?u=“. Così com’è la copiamo e la sostituiamo alla scritta “TUO_CODICE“.

Successivamente va modificata la variabile $dirShootStore che indica il percorso dove salvare le foto scattate. La cartella dove saranno salvate le foto dovrà avere accesso in scrittura e lettura, quindi un chmod 777, per intenderci.

Una volta settato il nostro file, ritorniamo al codice che abbiamo copiato da BloggerSnap e sostiamo il contenuto di src=”" col percorso completo al nostro script. Ad esempio, se il nostro file lo abbiamo chiamato dc-bloggersnap.php e lo abbiamo salvato nella cartella principale del nostro sito, non dobbiamo fare altro che scrivere:

<iframe src="/dc-bloggersnap.php" width="170″ height="160″ frameborder="0″ scrolling="no"></iframe>

ed il gioco è fatto!

Lo script è PHP 5.2.3 compliant e richiede che la direttiva allow_url_fopen nel PHP.ini sia settata in On.

Se hai problemi lascia un messaggio, sarò lieto di aiutarti!