Hi all, I made a sketch that reads an rss feed and shows them as output.
The application works well but when I export to applet it doesn't start; here you can find the not-working applet:
http://www.paolotonon.com/applet/index.html
I read about external domains so I prepared a same domain rss parser of feed:
feed://www.paolotonon.com/applet/rss.php?id=twitter
Can you help me please? Here is the code I wrote:
Code:
int w= 1024;
int h = 768;
int numColori = 6;
int coefficenteFont = 6;
int variazione = 40;
int numPeccati;
int peccatoAttuale = 0;
int contatoreNeri = 0;
int persistenza = 7;
int numeroFoto= 21;
// variabili funzionali
PImage sinner;
PImage sinnerColor;
boolean fotoAttiva = false;
color black = color(0,0,0);
String lines[];
String[] lista;
XMLElement xml;
String frasi = "";
// Per esportare in full screen...
/*static public void main(String args[]) {
PApplet.main(new String[] { "--present", "confession" });
}*/
void setup(){
size(1024,768);
noStroke();
smooth();
textAlign(CENTER);
frameRate(50);
background(0,0,0);
}
void draw(){
if (fotoAttiva == false || contatoreNeri > persistenza){
float m = millis();
save(m+".jpg");
contatoreNeri = 0;
//background(0);
caricaSinner();
leggiRSS();
//image(sinner,0,0);
// Carica il file di testo con le frasi
lines = lista;
numPeccati = lines.length;
}
else {
int x = int(random(width));
int y = int(random(height));
int larghezzaOk = 0;
int altezzaOk = 0;
color pix = sinner.get(x, y);
color pixColor = sinnerColor.get(x, y);
//println(pixColor);
int larghezza = analizzaPixelLarghezza(x,y,pix);
int altezza = analizzaPixelAltezza(x,y,pix);
int dimensioneFont = int(larghezza/coefficenteFont );
if (dimensioneFont <8 ){
dimensioneFont = 8;
}
else if (dimensioneFont >25 ){
dimensioneFont = 25;
}
fill(pixColor,210);
// Carica un set di font
PFont font1 = loadFont("font/Helvetica-20.vlw");
PFont font2 = loadFont("font/Georgia-20.vlw");
/* PFont font3 = loadFont("font/CenturySchoolbook-50.vlw");
PFont font4 = loadFont("font/LucidaFax-48.vlw");
PFont font5 = loadFont("font/TrebuchetMS-50.vlw");
PFont font6 = loadFont("font/Perpetua-Italic-50.vlw");
PFont font7 = loadFont("font/BodoniMT-50.vlw"); */
PFont[] leFont = {
font1, font2 };
int numRandom = int(random(2));
textLeading(dimensioneFont/3);
textFont(leFont[numRandom], dimensioneFont);
//textFont(font1, dimensioneFont);
loadPixels();
// Analizza l'output a schermo controllando i pixel neri
if (pixels[(width*y)+x] == black){
contatoreNeri = 0;
while(pixels[(width*y)+x+larghezzaOk] == black && larghezzaOk < larghezza && x+larghezzaOk < width){
larghezzaOk++;
}
//println("larghezzaOk="+larghezzaOk);
while(pixels[(width*(y+altezzaOk))+x] == black && altezzaOk < altezza && y+altezzaOk < height){
altezzaOk++;
if (y+altezzaOk == height){
break;
}
}
updatePixels();
// Scrive il testo
textAlign(LEFT);
text(lines[peccatoAttuale], x, y,larghezzaOk,altezzaOk);
// Determina il peccato da visualizzare nel prossimo ciclo
if (peccatoAttuale == (numPeccati-1)){
peccatoAttuale = 1;
}
else {
peccatoAttuale++;
}
}
else{
// gestire il contatore per il cambio di foto
contatoreNeri++;
}
}
}
void caricaSinner(){
int idFoto= int(random(numeroFoto));
sinner = loadImage("foto/foto"+idFoto+".jpg");
sinner.filter(POSTERIZE, numColori);
sinnerColor = loadImage("foto/foto"+idFoto+".jpg");
fotoAttiva = true;
}
int analizzaPixelLarghezza(int posX, int posY,color colore){
color riferimento;
int larghezza = 1;
while(sinner.get(posX+larghezza,posY+(larghezza/coefficenteFont))==colore){
larghezza++;
}
if (larghezza < 10){
larghezza = 10;
}
return larghezza;
}
int analizzaPixelAltezza(int posX, int posY,color colore){
color riferimento;
int altezza = 1;
while(sinner.get(posX,posY+altezza)==colore){
altezza++;
}
if (altezza < 10){
altezza = 10;
}
return altezza;
}
void leggiRSS(){
xml = new XMLElement(this, "http://www.paolotonon.com/applet/rss.php?id=twitter&cachetime=5");
XMLElement channel = xml.getChildren()[0];
for (int i=0; i < channel.getChildren().length; i++){
// Salta i primi 3 nodi dell'RSS
if (i >4 ){
String title = channel.getChildren()[i].getChildren()[0].getContent();
// toglie il nome utente ":" e spazio
String peccato = title.substring(12);
if (frasi == ""){
frasi = peccato;
}
else{
frasi = frasi+"^"+peccato ;
}
}
}
lista = split(frasi, '^');
/*if(frasi!= ""){
saveStrings("data/testo/peccati.txt", lista);
}*/
}
void keyPressed() {
if (key == 'i' || key == 'I') {
float m = millis();
save(m+".jpg");
}
}
void mouseReleased() {
contatoreNeri = persistenza+1;
}