Acortar URLs mediante goo.gl y PHP

La API de Google para acortar URLs permite acortar URLs, recuperar info del link original y las URLs acortadas de un usuario, aunque para usarlo se necesita crear una clave y dar de alta proyecto.

El resto es fácil, acceso mediante CURL y listo:

    define('GOOGLE_API_KEY', '[insert your key here]');
    define('GOOGLE_ENDPOINT', 'https://www.googleapis.com/urlshortener/v1');
 
    function shortenUrl($longUrl)
    {
        // initialize the cURL connection
        $ch = curl_init(
            sprintf('%s/url?key=%s', GOOGLE_ENDPOINT, GOOGLE_API_KEY)
        );
 
        // tell cURL to return the data rather than outputting it
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
        // create the data to be encoded into JSON
        $requestData = array(
            'longUrl' => $longUrl
        );
 
        // change the request type to POST
        curl_setopt($ch, CURLOPT_POST, true);
 
        // set the form content type for JSON data
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
 
        // set the post body to encoded JSON data
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData));
 
        // perform the request
        $result = curl_exec($ch);
        curl_close($ch);
 
        // decode and return the JSON response
        return json_decode($result, true);
    }
 
    $response = shortenUrl('http://phpriot.com');
 
    echo sprintf(
        '%s was shortened to %s',
        $response['longUrl'],
        $response['id']
    );

Shortening URLs for goo.gl with Google’s URL Shortener API

Vía / PHPDeveloper.org

MemcacheQ: cola de mensajes mediante Memcached

MemcacheQ es una interesante implementación de Memcache que permite realizar una cola de mensajes que luego podremos utilizar en nuestras aplicaciones de formas variadas, por ejemplo, si tenemos un proceso largo que queremos dividir y realizar partes en background, podemos crear una cola de mensajes e ir añadiendo distintas tareas para luego ir recuperándolas una a una.

MemcacheQ permite crear distintas colas y cuando se recupera un valor de la cola se borrará de esta. Imaginemos que tenemos un blog en el que cuando se publica un post se deben realizar una serie de tareas complejas, y no queremos tener a WordPress o Drupal o lo que usemos esperando para dar el OK de post publicado, lo que haríamos sería añadir un mensaje en la cola y luego con una tarea usando el cron, ir ejecutándolas una a una:

/* Método de publicación */
// Conectamos al servidor 
$memcache_obj = memcache_connect('memcacheq_host', 21201);
// Añadimos el mensaje a la cola
memcache_set($memcache_obj, /* id_cola */ 'tareas_del_blog', /* mensaje */ $id_post, 0, 0);
memcache_close($memcache_obj);
/* Método del cron */
// Conectamos al servidor 
$memcache_obj = memcache_connect('memcacheq_host', 21201);
$id_post = memcache_get($memcache_obj, 'tareas_del_blog');
tarea_enorme($id_post);
memcache_close($memcache_obj);

MemcacheQ

Vía / PDPDeveloper.org

Acceder a Google Analytics con OAuth y PHP

Está claro que por ahora OAuth es el futuro para el uso de APIs, y como no, Google requiere OAuth para conectarnos a su API, lo cual puede parecer bastante difícil, pero cuando le coges el truco, es bastante sencillo:

$oauth = new OAuth($consumer_key, $consumer_secret);
$oauth->setToken($access_token, $access_token_secret);
$result = $oauth->fetch('https://www.google.com/analytics/feeds/datasources/ga/accounts');

El resto es fácil, tan sólo hay que mirar la documentación y obtener los datos de las distintas peticiones.

Google Analytics Accounts API

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

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, …


Speed Up Your Website with PHP Buffer Flushing

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 todos').'&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); 

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

Nueva AWS SDK for PHP

La gente de Amazon ha sacado una nueva SDK PHP para AWS que puede ser usada para acceder a los servicios que ofrece: Amazon Elastic Compute Cloud (EC2), the Amazon Simple Storage Service (S3), Amazon CloudFront, Amazon CloudWatch, Amazon SimpleDB, Amazon Simple Notification Service (SNS), Amazon Simple Queue Service (SQS) y Amazon Identify and Access Management (IAM).

Post original