Exportar contactos usando nuestra API

Puede haber momentos en los que usted necesite exportar los contactos fuera de RebelContact. Tal vez para disponer de una copia de seguridad, o para analizar todos los contactos de su cuenta.

Dentro de RebelContact se ofrece una opción rápida "Exportar" que crea un archivo CSV o XML que pueden ser fácilmente importados a un programa de hoja de cálculo, o ser leídos a través de un lenguaje de programación.

También puede crear un Webhook (Formularios > WebHook) que enviará automáticamente los datos a la aplicación cada vez que se agrega un nuevo contacto o se actualiza una lista:

A pesar de estas dos características, aún puede haber momentos en que su aplicación necesita acceder a los datos bajo demanda. Le mostramos cómo hacerlo utilizando PHP.

En primer lugar, configurar la conexión API desde la secuencia de comandos:

define("REBELCONTACT_URL", "https://ACCOUNT.api-us1.com");
define("REBELCONTACT_API_KEY", "0c3b245df4785...005d2d3d7e1e386f");
require_once("REBELCONTACT-api-php/includes/REBELCONTACT.class.php");
$ac = new REBELCONTACT(REBELCONTACT_URL, REBELCONTACT_API_KEY);

A continuación, creamos una función que controla la solicitud de la API y añade cada contacto a una matriz global. La función acepta un número de página, así como lista opcional de ID (si desea solicitar contactos sólo desde algunas listas), y devuelve el número total de contactos encontrados para la página solicitada.

$GLOBALS["contacts"] = array(); // Holds all contacts.

function run($page, $listids = 0) {

  // API method.
  $request = "contact/list";

  // Check for list filter. If none, request all contacts.
  if ($listids)
    $request .= "?filters[listid]={$listids}";
  else
    $request .= "?ids=all";

  // Make request.
  $request .= "&full=0&sort=id&sort_direction=ASC&per_page=500&page={$page}";
  $response = $GLOBALS["ac"]->api($request);

  // Internal counter.
  $count = 0;

  // If request comes back successfully.
  if ((int)$response->success) {

    // Loop through each item.
    foreach ($response as $key => $value) {

      // If there is an email item, we know it's a contact.
      if (isset($value->email)) {

        $count++; // Increment the internal counter.

        // Store this contact in the global array.
        if (!isset($GLOBALS["contacts"][$value->id])) {
          $GLOBALS["contacts"][$value->id] = $value;
        }

      }

    }

  }
  else {

    // Request failed. Output the reason.
    echo $response->error;

  }

  return $count;

}

Como puede observar (resaltado), añadimos cada contacto a una matriz global ($contacts). He aquí un registro de contacto de ejemplo:

stdClass Object
(
  [id] => 29564
  [subscriberid] => 29564
  [cdate] => 2012-12-14 09:01:00
  [sdate] => 2012-12-14 09:01:00
  [first_name] => Mike
  [last_name] => Smith
  [email] => test@test.com
  [last_list] => Rewards List
  [avatar_url] => https://test.api-us1.com/gravatar.php?h=test@test.com&s=50
)

Como puede observar, limitamos los resultados a 100 por página. Esta es la cantidad máxima que puede recibir por cada página. Para solicitar las páginas siguientes, vamos a añadir algo más de código:

$page_start = 1; // The page to start from.
$page_end = 1; // The page to end on.
$page_loop = 0;
$listids = 9; // Any list filters (use comma-separated format for more than one: 1,2)

while (($page_start + $page_loop) <= $page_end) {
  $page_current = $page_start + $page_loop;
  $count = run($page_current, $listids);
  $page_loop++;
  sleep(3);
}

El bucle se descargará automáticamente a la siguiente página de contactos hasta que llegue a la última página que usted especifique. Usted puede encontrar fácilmente su última página dividiendo el número de contactos en total en su cuenta entre 100. Por ejemplo, si usted tiene 1.000 contactos, usted necesitaría cerca de 10 páginas para buscarlos a todos ellos.

$page_start = 1; // The page to start from.
$page_end = 10; // The page to end on.
...

También puede cambiar el bucle para buscar sólo en el número total devuelto ($count):

while ($count == 100) ...

De esta manera sólo se irá a buscar la siguiente página si la página actual tiene la máxima cantidad devuelta. Si la página actual tiene menos de la cantidad máxima, usted ya sabe que es la última página.