Hero

Como migrar de SimpleNews a Mailchimp en Drupal 7

Junio 03, 2013

enzo
PHP
Programación
Drupal
Desarrollo de Modulos
Drush

Hola amig@s Drupaler@s

Hoy vengo a compartir con ustedes un proceso para migrar de forma ágil suscripciones del módulo SimpleNews al módulo MailChimp, con eso no quiero decir que el módulo de SimpleNews no sea funcional solo que puede ser algún requerimientos de nuestros proyectos o clientes.

A continuación veremos una guía paso a paso para esta migración.

  1. Instalación de MailChimp.

Como cualquier otro módulo debemos descargarlo en el directorio sites/all/modules/contrib o dejarlo en manos de drush con el siguiente comando.

$ drush dl mailchinp

Antes de activar este módulo debemos garantizar que tenemos las librerías necesarias para que el módulo funcione correctamente, por tanto lo primero que debemos hacer es descargar la librería para ingresar al API de MailChimp desde la página http://apidocs.mailchimp.com/api/downloads/mailchimp-api-class.zip y el contenido sería como el que se presenta en la siguiente imagen.

MailChimpAPI

El contenido de esta carpeta debe copiarse en la carpeta sites/all/libraries/mailchimp, la carpeta examples no es necesaria y la podemos borrar, pero el README si es indispensable por que sin esto el módulo libraries no puede verificar cual es la versión de la librería y si es compatible con el módulo de Drupal, al momento de escribir esta entrada de blog la versión compatible es la 1.3.

Luego de cumplidos estos pasos podremos habilitar el módulo e iniciar su uso.

  1. Configurar MailChimp.

Lo primero que debemos hacer es integrar Drupal con MailChimp, para lo cual debemos ingresar a la página admin/config/services/mailchimp e ingresar la configuración necesaria entre ellas el API Key para nuestra cuenta en MailChimp como se puede apreciar en la siguiente imagen.

MailChimpAPIKey Si aun no has configurado el API Key debes ingresar al Dashboard de Mailchimp para generarlo en la dirección http://admin.mailchimp.com/account/api.

  1. Crear un lista de correo.

La lista debe ser creada primero en MailChimp en la página http://admin.mailchimp.com/lists/ y posteriormente hacer su integración en Drupal creando una lista en la página admin/config/services/mailchimp/lists/add como se puede apreciar a continuación.

MailChimpAddList

Como se puede ver requerimos proveer un nombre, el tipo de lista y las opciones, además debemos definir que roles tendrán acceso a la lista de correo.

Una opción muy importante que se aprecia en la imagen anterior es el Double Opt-in, esto quiere decir que si esta marcada aunque el usuario lo seleccione en el proceso de registro se requerirá que el confirme la suscripción siguiendo las instrucciones que enviara mailchimp al correo proporcionado en el proceso de registro, es importante no marcar esta opción para este ejemplo puesto lo que estamos realizando es una migración no queremos molestar a nuestros usuario con un confirmación de algo que ya ellos aprobaron; Pero cuidado se abusa de esta opción para importar cientos de miles de correos es probable que MailChimp bloquee nuestra cuenta.

Dentro de las opciones también es posible definir que la suscripción a una lista se haga durante el proceso de registro.

Para finalizar debemos definir con que lista de las creadas en MailChimp se integrara en Drupal presentadas como un listbox, en caso que la lista permanezca vacía luego de crear la lista, se debe borrar el caché para forzar la sincronización.

La interfaz de selección de la lista sera similar a la siguiente imagen.

MailChimpListSelection 0

  1. Importar usuarios desde SimpleNews.

Ahora lo que nos falta es importar los correos presentes en SimpleNews a nuestra lista de MailChimp para este cometido crearemos un script que sera ejecutado con Drush, si deseas obtener mas información sobre como crear scripts para ejecutar con Drush te invitamos a leer la entrada de blog Cómo ejecutar PHP scripts con Drush (Drupal Shell), a continuación es script para la migración.

<pre title="simplenews2mailchimp.php"><?php

asas

/*
 * Return uid=>email for all of the users we want to subscribe
 */
function users_to_subscribe() {

  $uids_query = 'select uid,mail from {simplenews_subscriber} limit 0,50'; // Change query to choose your users
  $uids_result = db_query($uids_query);
  $users = array();
  foreach($uids_result as $uid_row) {
    $users[$uid_row->uid] = $uid_row->mail;
  }
  return $users;
}

$mcapi = mailchimp_get_api_object();

$users = users_to_subscribe();
foreach ($users as $uid => $email) {
  $account = user_load($uid);
  $lists = mailchimp_lists_get_available_lists($account, MAILCHIMP_LISTTYPE_OPTIONAL, array('show_account_form' => 1));

  $merge_vars = mailchimp_lists_load_user_mergevars($account, $lists[0]);

  $ret = mailchimp_subscribe_user($lists[0], $account->mail, $mergevars, FALSE, $mcapi);
  if ($ret == 1) {
    print "SUCCESS subscribe for user {$account->mail}\n";
  } else {
    print "FAILED ($ret)\n";
  }
}

?>

Del anterior script en la línea # 10 hacemos una consulta a todas las suscripciones del sitio y se procesas las primeras 50, podrías modificar la consulta para obtener las suscripciones de un newsletter en específico.

En la línea 24 se seleccionan todas las listas disponibles y en la línea 26 se utiliza la primera lista, el lector deberá cambiar un poco esta lógica para usar la lista de su predilección.

Para ejecutar el script sólo debemos usar el drush como se muestra a continuación.

$ drush php-script simplenews2mailchimp.php

Espero que haya sido de su agrado.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.