Plugin Imageshack

Publicado por firecold, Noviembre 18, 2012, 09:52:45 PM

Tema anterior - Siguiente tema

firecold

Buenos noches a todos los Amigos del foro aqui presentando este nuevo plugin aun no terminado, hace cache de las imagenes de imageshack pero cuanto uno quiere ver una foto ya cacheada en ves de visualizarla la descarga automaticamente, ese en realidad es el problema por lo demas funciona muy bien, pido ayuda para ver el codigo me imagina con toda seguridad que algo estoy haciendo mal:

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*imageshack\.us.*(\.jpg|\.png)


string get_filename(string url) {
      vector<string> resultado;
      if (url.find("?") != string::npos) {
         stringexplode(url, "?", &resultado);
         stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
         return resultado.at(resultado.size()-1);           
      } else {
         stringexplode(url, "/", &resultado);
         return resultado.at(resultado.size()-1);
      }
}

extern "C" resposta getmatch(const string url) {
    resposta r;   

if ( (url.find("imageshack.us") != string::npos) and ((url.find(".jpg") != string::npos) or (url.find(".png") != string::npos))
   ) {
     
       r.file = get_filename(url);
      if (!r.file.empty()) {
         r.match = true;         
         r.domain = "imageshack";
      } else {
         r.match = false;
      }
   } else {
      r.match = false;
   }
   return r;
}


Gracias de antemano por su ayuda, Gracias

roxdng

Pero esto no lo debería haber Squid?

firecold

Cita de: roxdng en Noviembre 18, 2012, 11:24:45 PM
Pero esto no lo debería haber Squid?

el punto no es si squid lo cachea o no, si no volver este proyecto de thundercache algo independiente eso quiere decir que deje de usar squid, es cierto que no vamos hacer un plugin por cada pagina pero por lo meno empecemos con las paginas mas populares, y despues pensar en un plugin dinamico, pero hasta ese momento seguire tratando de colaborar para que este proyecto siga adelante, no para beneficio de algunos, si no de todos, Saludos

luistec

Probaste con el código de esta manera

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*\.imageshack\.us.*(\.jpg|\.png)

string get_filename(string url) {
     vector<string> resultado;
     if (url.find("?") != string::npos) {
        stringexplode(url, "?", &resultado);
        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
        return resultado.at(resultado.size()-1);          
     } else {
        stringexplode(url, "/", &resultado);
        return resultado.at(resultado.size()-1);
     }
}

extern "C" resposta getmatch(const string url) {
   resposta r;  

if ( (url.find(".imageshack.us/") != string::npos)
  ) {
     
      r.file = get_filename(url);
     if (!r.file.empty()) {
        r.match = true;        
        r.domain = "imageshack";
     } else {
        r.match = false;
     }
  } else {
     r.match = false;
  }
  return r;
}


Sobre el detalle de que hace cache de las imagenes pero cuanto uno quiere ver una foto ya cacheada en ves de visualizarla la descarga automaticamente, osea no permite ver la imagen?

firecold

Cita de: luistec en Noviembre 25, 2012, 12:11:07 AM
Probaste con el código de esta manera

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*\.imageshack\.us.*(\.jpg|\.png)

string get_filename(string url) {
     vector<string> resultado;
     if (url.find("?") != string::npos) {
        stringexplode(url, "?", &resultado);
        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
        return resultado.at(resultado.size()-1);          
     } else {
        stringexplode(url, "/", &resultado);
        return resultado.at(resultado.size()-1);
     }
}

extern "C" resposta getmatch(const string url) {
   resposta r;  

if ( (url.find(".imageshack.us/") != string::npos)
  ) {
     
      r.file = get_filename(url);
     if (!r.file.empty()) {
        r.match = true;        
        r.domain = "imageshack";
     } else {
        r.match = false;
     }
  } else {
     r.match = false;
  }
  return r;
}


Sobre el detalle de que hace cache de las imagenes pero cuanto uno quiere ver una foto ya cacheada en ves de visualizarla la descarga automaticamente, osea no permite ver la imagen?

Si exacto no deja ver la imagen, si no que en vez de eso la descarga y del modo que hiciste el codigo no hace cache ya que no hay ningun punto antes de imageshack.us cuanto entrega las imagenes, ejmeplo

http://imageshack.us/scaled/thumb/399/ftcvdv01qa8.jpg
http://imageshack.us/scaled/thumb/401/fordlogo.jpg
http://imageshack.us/swfupload/btn-browse.png


osea que en el sitio web de imageshack.us no te hace cache solo en las paginas web donde hay imagenes de imageshack.un ya que las muestra de este modo:

http://img208.imageshack.us/img208/6701/capturadepantallade2012r.png

eso quiere decir que cache algunas cosas pero no todas, Saludos

firecold

Gracias amigo Luistec gracias a ti me puse a pensar y se me ocurrio esto, el plugin lo deje de este modo:

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*\.imageshack\.us.*(\.jpg|\.png)
// http.*imageshack\.us.*(\.jpg|\.png)

string get_filename(string url) {
      vector<string> resultado;
      if (url.find("?") != string::npos) {
         stringexplode(url, "?", &resultado);
         stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
         return resultado.at(resultado.size()-1);           
      } else {
         stringexplode(url, "/", &resultado);
         return resultado.at(resultado.size()-1);
      }
}

extern "C" resposta getmatch(const string url) {
    resposta r;   

if ( (url.find(".imageshack.us/") != string::npos) or (url.find("imageshack.us") != string::npos)
   ) {
     
       r.file = get_filename(url);
      if (!r.file.empty()) {
         r.match = true;         
         r.domain = "imageshack";
      } else {
         r.match = false;
      }
   } else {
      r.match = false;
   }
   return r;
}


Si te fijas tiene dos regex, entonces de este modo hace cache tanto del sitio de imageshack como de cualquier pagina que use imagenes de ese sitio, pero sigue con el problema anterior pero solo en la pagina de imageshack, osea que no descarga las imagenes de los sitios donde hay imagenes de imageshack.us solo en el propio sitio de imagehack.us, pero por lo menos ya hubo un avance, Saludos

luistec

El código que puse es para que haga caché a las imagenes grandes y tienen este formato
http://img145.imageshack.us/img145/7262/hit1u.jpg

Lo que quieres es que haga caché tambien a las imagenes pequeñas
http://imageshack.us/scaled/thumb/401/fordlogo.jpg
Ese detalle no me he fijado.

Saludos.

luistec

A las primeras pruebas parece que ya esta, haber como sigue.

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*\.imageshack\.us.*(\.jpg|\.png)
// http.*imageshack\.us.*(\.jpg|\.png)

string get_filename(string url) {
     vector<string> resultado;
               if (url.find("?") != string::npos) {
        stringexplode(url, "?", &resultado);
        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
        return resultado.at(resultado.size()-1);          
     } else {
        stringexplode(url, "/", &resultado);
        return resultado.at(resultado.size()-1);
     }
}

extern "C" resposta getmatch(const string url) {
   resposta r;  

 if ( (url.find(".imageshack.us/") != string::npos)
    ) {
     r.file = get_filename(url);
     if (!r.file.empty()) {
        r.match = true;
        r.domain = "imageshack";      
     } else {
        r.match = false;
     }
  }
 
  else if ( (url.find("imageshack.us/") != string::npos) and ((url.find(".jpg") != string::npos) or (url.find(".png") != string::npos))  
  ) {      
      r.file = get_filename(url);
     if (!r.file.empty()) {
        r.match = true;
        r.domain = "imageshack-small";
     } else {
        r.match = false;
     }
  }
  else
  {
     r.match = false;
  }
  return r;
}

firecold

Cita de: luistec en Noviembre 25, 2012, 01:22:47 PM
A las primeras pruebas parece que ya esta, haber como sigue.

#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

// use this line to compile
// g++ -I. -fPIC -shared -g -o imageshack.us.so imageshack.us.cpp
// regex
// http.*\.imageshack\.us.*(\.jpg|\.png)
// http.*imageshack\.us.*(\.jpg|\.png)

string get_filename(string url) {
      vector<string> resultado;
                if (url.find("?") != string::npos) {
         stringexplode(url, "?", &resultado);
         stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
         return resultado.at(resultado.size()-1);           
      } else {
         stringexplode(url, "/", &resultado);
         return resultado.at(resultado.size()-1);
      }
}

extern "C" resposta getmatch(const string url) {
    resposta r;   

  if ( (url.find(".imageshack.us/") != string::npos)
     ) {
      r.file = get_filename(url);
      if (!r.file.empty()) {
         r.match = true;
         r.domain = "imageshack";       
      } else {
         r.match = false;
      }
   }
   
   else if ( (url.find("imageshack.us/") != string::npos) and ((url.find(".jpg") != string::npos) or (url.find(".png") != string::npos)) 
   ) {     
       r.file = get_filename(url);
      if (!r.file.empty()) {
         r.match = true;
         r.domain = "imageshack-small";
      } else {
         r.match = false;
      }
   }
   else
   {
      r.match = false;
   }
   return r;
}


tambien lo probe y hasta el momento estable, Gracias Luistec