Tratar imagen para romper reCAPTCHA con PHP

Para aquellos que usan JDownloader (y Windows) les gustará la noticia de que ha salido un plugin para romper reCAPTCHA, que aunque está en versión beta, rompe bastantes códigos.

Para hacerlo, realiza varias técnicas para convertir la imagen en una que pueda ser leída por un OCR, y lo curioso de todo esto es que está realizado en PHP y pasado a C++ con HIPHOP de Facebook.

El código lo podéis ver en el PDF que viene en el plugin.

reCAPTCHA ausgehebelt / antirecaptcha

Share Button

Mejora la velocidad de tu página usando flush()

El buffer de PHP permite almacenar la salida de PHP para enviarla en bloques de cierto tamaño. Una forma de forzar el envío del buffer es usando el método flush(). Es interesante usar este método justo detrás de la cabecera del documento HTML, ya que cuando se envía el head el navegador puede empezar a descargar CSS, javascripts, iconos, …

</head>
<?php flush(); ?>

Speed Up Your Website with PHP Buffer Flushing

Share Button

Enviar mailings con poMMo mediante CURL

poMMo es una de las mejores herramientas para envío de newsletters o mailing, el problema es que la última versión es del 2008 y no tienen ni API ni nada parecido, pero se puede simular mediante CURL, lo cual nos puede venir muy bien para añadir mailing a nuestras aplicaciones con CodeIgniter o WordPress.

 
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/index.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
$post = 'referer='.urlencode('/pommo/admin/admin.php').'&username=admin&password=password&submit=Log In';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 
 
curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/setup.php');
$post = 'subject=Asunto&mailgroup=all&fromname=Yo&fromemail=mi%40email.com&frombounce=mi%40email.com&list_charset=UTF-8&submit=Continue';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 
 
curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/ajax.rpc.php?call=savebody');
$post = 'body='.urlencode('Hola a <strong>todos</strong>').'&altbody=';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 
 
curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/preview.php');
$post = 'sendaway=true';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
 
$result = curl_exec($ch);
Share Button

Close Pixelate: pixela imágenes con HTML5

Close Pixelate es un script que convierte una imagen en su correspondiente pixelada haciendo uso de HTML5 y canvas. Se le pueden indicar las siguientes opciones: resolución, forma del pixelado, tamaño, desplazamiento y canal alpha

Su uso es tan sencillo como ejecutar lo siguiente:

var docReady = function() {
  document.getElementById('portrait-image').closePixelate([
    { resolution : 24 },
    { shape : 'circle', resolution : 24, size: 16, offset: 12, alpha: 0.5 }
  ]);
};
window.addEventListener( 'DOMContentLoaded', docReady, false);

Close Pixelate

Vía / WebAppers

Share Button

Manipular vídeos con HTML5 y canvas

Increíbles ejemplos de cómo manipular vídeos en directo aplicando filtros gracias a HTML5 y canvas. Los ejemplos nos muestra cómo se reproduce un vídeo y se muestra el mismo vídeo con efecto de escala de grises o detección de contornos. Realmente increíble.

Post original

Share Button

Cómo hacer un lector de feeds con jQuery Mobile

Completísimo tutorial que nos explica cómo realizar un lector de feeds usando jQuery Mobile (que actualmente está en versión alpha). Cuyas características son las siguientes:

  • Mostrar lista de feeds con sus logos
  • Mostrar el feed cuando se hace click
  • Crear los estilos para los artículos
  • Crear un icono Apple-touch para que el usuario pueda añadir la aplicación a su teléfono
  • Usar YQL para obtener los datos del feed
  • Caché básico

Post original

Share Button

Hacer un botón de ‘Ver código fuente’

Ejemplo bastante completo que nos explica cómo hacer un botón que nos permite mostrar el código fuente mediante javascript y CSS.

Post original

Share Button

Añadir validaciones a Contact Form 7 en WordPress

Contact Form 7 es uno de los plugins de WordPress más utilizados, ya que nos permite incluir formularios de contacto de forma sencilla en nuestros blogs. El problema viene cuando queremos añadir validaciones a los campos del formulario. Una forma sencilla, quizás haya un plugin que lo haga, es editar el functions.php y añadir un action al init que compruebe los valores de $_POST y devolver el JSON oportuno:

 
add_action('init', 'comprueba_form', 1); // prioridad 1 para que actue antes que el plugin
function comprueba_form() {
  if ( 'POST' == $_SERVER['REQUEST_METHOD'] && 
       isset( $_POST['_wpcf7_is_ajax_call'] ) && 
       $_POST['_wpcf7'] == '1') { // _wpcf7 es el id del formulario para diferenciarlos
    // comprobaciones
    if ($_POST['campo'] != 'valor') {
      echo '{"mailSent":false,"into":"#wpcf7-f2-p813-o1","captcha":null,"message":"El campo 'campo' falla.","onSentOk":null}';
      exit();
    }
  }
}
Share Button

Calcular distancias en PHP

Función PHP que calcula la distancia entre dos puntos usando latitudes y longitudes. Devuelve los datos en millas, kilómetros y millas naúticas.

Post original

Vía / DZone

Share Button

Paypal NVP API con Codeigniter

Las tiendas online son uno de los productos más usados en desarrollo web, pero suele ser lo que más dolores de cabeza da debido al pago por tarjeta de crédito. Afortunadamente, Paypal ofrece la posibilidad de pagar mediante tarjeta de crédito. Para ello, Paypal dispone de una API NVP muy cómoda de usar.

Para los usuarios de Codeigniter existe una librería que nos facilita toda la tarea. En el controlador primero debemos indicar el SetExpressCheckout que prepara la transacción. Cuando aceptemos el OK de la llamada se redireccionará a Paypal para que el usuario pueda realizar la compra, que devolverá la llamada a una URL nuestra y en ese caso, cogiendo los datos devueltos por Paypal podremos confirmar la transacción:

define('PAYPAL_URL', 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=');
 
class Demo extends Controller {
 
    function Demo()
    {
        parent::Controller();
    }
 
    function index() {
    $this->paypal_api_lib->add_nvp('RETURNURL', 'http://servidor/demo/ok');
    $this->paypal_api_lib->add_nvp('CANCELURL', 'http://servidor/demo/cancel');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '0');
    $this->paypal_api_lib->add_nvp('ALLOWNOTE', '1');
    $this->paypal_api_lib->add_nvp('SOLUTIONTYPE', 'Sole'); // esto es lo que no obliga a que se tenga que tener cuenta Paypal
    $this->paypal_api_lib->add_nvp('LANDINGPAGE', 'Billing');
    $this->paypal_api_lib->add_nvp('AMT', '69.00');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '2');
    $this->paypal_api_lib->add_nvp('HDRIMG', 'http://servidor/logo.gif');
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('L_NAME0', 'Librito');
    $this->paypal_api_lib->add_nvp('L_AMT0', '59.00');
    
    $this->load->library('session');
    $sesion = array('paypalAmount'=>'69.00');
    $this->session->set_userdata($sesion);
 
    if($this->paypal_api_lib->send_api_call('SetExpressCheckout')){
      if (strtoupper($this->paypal_api_lib->nvp_data["ACK"]) =="SUCCESS") {
                    $token = urldecode($this->paypal_api_lib->nvp_data["TOKEN"]);
                    $payPalURL = PAYPAL_URL.$token;
                    header("Location: ".$payPalURL);
          exit();
      }
    }
    paypal_errors(); 
  }
    
  function ok() {
    $this->load->library('session');
 
    $this->paypal_api_lib->add_nvp('TOKEN', $_REQUEST['token']);
    $this->paypal_api_lib->add_nvp('PAYERID', $_REQUEST['PayerID']);
    $this->paypal_api_lib->add_nvp('PAYMENTACTION', 'Sale');
    $this->paypal_api_lib->add_nvp('AMT', $this->session->userdata('paypalAmount'));
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('IPADDRESS', $_SERVER['SERVER_NAME']);
 
    if($this->paypal_api_lib->send_api_call('DoExpressCheckoutPayment')) {
      var_dump($this->paypal_api_lib->nvp_data);
    } else {
      paypal_errors();
    }
  }
 
}

CI PayPal NVP Library

Share Button