Cree un enlace de afiliación personalizado con la API de comercialización de productos de Amazon

El programa Amazon Associates, junto con Amazon Web Services (AWS), ofrece a los desarrolladores un medio poderoso para buscar en el catálogo de Amazon Store utilizando una API RESTful e integrar datos para prácticamente cualquier listado de productos en una página web. Si usted es un programador con una mentalidad empresarial y busca formas de monetizar su sitio, puede registrarse para ser un afiliado de Amazon y ganar una comisión cada vez que un usuario haga clic en el enlace de su producto y complete una compra. (Y en cuanto a los programas de ingresos de afiliados, las comisiones de Amazon se encuentran entre las más generosas).

Para aquellos de ustedes que son nuevos en la idea del marketing de afiliación, supongamos que están ejecutando un blog o sitio web con reseñas de películas. Por cada reseña de película que se publique, puede beneficiarse al incluir un enlace para que los lectores compren la película en algún lugar cerca de su artículo. Para hacer que sea más atractivo hacer clic, el enlace puede incluir una imagen en miniatura del DVD, el nombre completo de la película, el precio más bajo disponible y un botón "Comprar".

En este tutorial, le mostraré cómo crear una clase dedicada y reutilizable en PHP que se conecte a la API de comercialización de productos y obtenga datos XML según el nombre del producto y la categoría de compras (en este caso "Películas"). Al final, rellenaremos esos datos en una plantilla HTML pequeña y totalmente personalizable para que terminemos con una demostración de trabajo de un mini módulo de afiliados. Empecemos.

[Antes de acceder a la demostración de ejemplo, tenga en cuenta que si opta por comprar o alquilar el DVD desde el enlace provisto, tendrá que pagar una comisión a Envato Tuts +].

Registrarse para obtener una ID de afiliado y obtener credenciales

Primero, regístrese para obtener una cuenta en affiliate-program.amazon.com. Es gratis y solo debe seguir los pasos para crear un perfil para su sitio web. Se le pedirá que verifique su identidad al finalizar el proceso ingresando su número de teléfono, recibiendo una llamada automática e ingresando el código de acceso que le dieron.

Una vez que haya completado el registro, se le proporcionará un ID de afiliado de Amazon (en este ejemplo, es "envtuts-20"). Inicie sesión en el área de su cuenta principal con su nombre de usuario y contraseña y haga clic en API de comercialización de productos lengüeta. Allí, haga clic en el enlace para comenzar a utilizar la API.. 

Deberá registrarse en Amazon Web Services (aws.amazon.com), si aún no lo ha hecho. En la consola de AWS, bajo Credenciales de seguridad, puede generar una clave de acceso y una clave secreta para realizar solicitudes de API. (Nota: es importante mantener estas credenciales privadas y seguras. Nunca los exponga públicamente en GitHub o en ningún otro lugar en línea..)

Configurando nuestra clase de ayudante de PHP

Para los propósitos de este ejemplo y para mantener las cosas relativamente simples, implementaremos el patrón de diseño Singleton para crear una clase auxiliar estática llamada AmazonAssocHelperIncluirá un método público que se conecta a la API, busca en el catálogo y devuelve datos del producto usando ciertos parámetros que pasamos. Así es como lo configuro:

Las primeras dos líneas declaran un espacio de nombres para nuestra clase e incluyen una clase de terceros que necesitaremos para realizar una solicitud firmada a la API con nuestras credenciales. Las tres constantes que he definido son nuestra importante identificación de afiliado, que obtuvimos después de registrarnos, y la clave de acceso y la clave secreta de AWS. Cuando hacemos nuestras solicitudes de API, el ID de afiliado se inserta automáticamente en el enlace del producto que recuperamos para que las compras puedan rastrearse adecuadamente en nuestra cuenta y ¡recibamos el pago! Asegúrate de completar estos tres valores por ti mismo.

Las tres variables privadas se refieren a los parámetros de búsqueda que proporcionaremos para cada solicitud. Estoy usando "ItemSearch" como nuestra opción de operación para buscar resultados. "2013-08-01" es la fecha de la última versión de la API, que también debemos proporcionar a nuestra solicitud firmada, y, por último, debemos designar qué grupos de respuesta nos gustaría devolver. Hay 55 opciones en total, y varían en tamaño y tipo de datos devueltos. Para nuestros propósitos, estamos buscando el título completo de la película y la URL completa para la página de detalles, los cuales están en el grupo de respuesta "Pequeño". También necesitamos una imagen en miniatura del grupo de respuesta "Imágenes" y el precio nuevo más bajo del grupo "OfferSummary".

los fetch_product_data () La función es nuestro método expuesto públicamente que toma dos parámetros:

  1. una frase clave específica que hace referencia al nombre del producto que queremos buscar
  2. una categoría de producto aceptada de Amazon

En última instancia, devolverá una serie de datos pertenecientes al resultado de búsqueda superior analizado a partir de una respuesta XML. (En muchos casos, el primer resultado será el producto que queremos, asumiendo que la frase clave que suministramos es lo suficientemente específica. Como alternativa, puede decidir modificar este ejemplo para buscar por ASIN específico o número de identificación del producto en su lugar, pero hay ventajas y desventajas de este método. Si tiene una gran base de datos de páginas de artículos para diferentes películas, el uso de un enfoque basado en nombres probablemente será más eficiente, ya que le permitirá generar automáticamente enlaces de productos para todos. de sus artículos al instante, y le ahorrará el tiempo extra y el esfuerzo de tener que buscar manualmente e insertar ID para cada uno.)

Generando una Solicitud Firmada

El siguiente paso es agregar una clase auxiliar que realizará la solicitud firmada a la API del producto. Utilicé una función de terceros escrita por Ulrich Mierendorff y la envolví en su propia clase estática llamada AWSSignedRequest. Toma varios parámetros, incluida la región (para la tienda de EE. UU., Usamos "com"), una matriz de parámetros de solicitud, nuestras claves de AWS, grupos de respuesta y la versión de API que ya hemos definido. los get_signed_request () el método esencialmente construye y devuelve una cadena de solicitud de URL completa de todas estas piezas.

La URL de solicitud firmada final se verá así:

http://webservices.amazon.com/onca/xml? AWSAccessKeyId = AKIAJILHUTAJ5MMQRJWA & AssociateTag = envt. % 2B14% 3D

En el AmazonAssocHelper clase, llame al get_signed_request () en un método llamado get_search_results ()y pasar en una matriz que contiene cuatro parámetros de búsqueda ($ params) junto con los otros argumentos como se muestra a continuación:

 / ** * Ejecuta la búsqueda con solicitud firmada en la API del producto usando frase clave y nombre de categoría * devuelve: objeto XML * / función estática privada get_search_results ($ frase clave, $ search_index) // Definir la solicitud $ params = array ("SearchIndex" = > $ search_index, // la categoría "Title" => $ keyphrase, "Operation" => self :: $ operation, "ResponseGroup" => self :: $ response_group); $ request = AWSSignedRequest :: get_signed_request ('com', $ params, self :: AMZ_ASSOC_ACCESSKEY, self :: AMZ_ASSOC_SECRETKEY, self :: AMZ_ASSOC_TAG, self :: $ version); $ respuesta = file_get_contents ($ request); // para la prueba / * header ('Content-type: application / xml'); echo $ response; exit; * / return simplexml_load_string ($ response); 

Nuestro $ params array incluye la operación y la respuesta que ya hemos definido, así como los valores de 'Título' y 'Índice de búsqueda'. En este caso, el SearchIndex es simplemente la categoría de producto que estamos buscando. Ahora podemos invocar el PHP incorporado. file_get_contents () función para generar una respuesta a partir de la solicitud, y dado que la respuesta es un documento XML, usamos otra función integrada, simplexml_load_string (), Cargarlo como un objeto que podamos analizar.. 

Probando la respuesta y previsualizando datos XML

En este punto, desearemos poder probar nuestra solicitud de API con algunos valores reales de productos para poder ver un ejemplo real de cómo se ven nuestros datos XML devueltos antes de analizarlos. Como se muestra arriba, agregue algunas líneas de prueba para establecer el encabezado a aplicación / XML e imprima el $ respuesta antes de que sea devuelto.

Ahora, cree un archivo que servirá como la página principal donde se mostrará el enlace del producto. He decidido llamarlo index.php. En la parte superior, agregue el siguiente bit de código:

Las dos primeras líneas declaran nuestro espacio de nombres e incluyen una función global que permite que nuestros archivos de clase se carguen automáticamente, ya que no estamos usando un marco PHP. La siguiente línea es la importante. Llamamos al fetch_product_data () método público en nuestro AmazonAssocHelper clase y asignarlo a una variable de matriz llamada $ product_data, pasando un nombre de película específico como la frase clave (elegí "Jurassic World" de la lista actual de los más vendidos) y "Películas" como la categoría. 

Cuando carga su página, el comienzo de su respuesta XML debería verse así:

  807ede04-f196-44a0-99ff-ff1bb1c12fee             0.0887890000000000   ...  37 4 ...   B016W01EXI  http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tG en este artículo.    Detalles técnicos  http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/tech-data/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%3tuc%25uctucuccesucucuccesucas_pucas_asucas_asucas_asucas_pucas_pucna_as_2_campo_contenido_vacaciones_contenido_vacaciones 3DB016W01EXI  

Si desplaza y escanea la salida, debería poder ver todos los datos que serán útiles para nuestra demostración, incluidos los , </code>, <code><LargeImage></code>, y <code><LowestNewPrice></code>. Están los nodos en los que nos centraremos en el análisis..</p><h2>Analizar el objeto de respuesta</h2><p>En el <code>AmazonAssocHelper</code> clase, crea otro metodo llamado <code>get_top_result_data ()</code> Eso toma nuestro objeto de respuesta XML como parámetro. Ahora podemos comenzar a leer los nodos que contienen los datos que queremos capturar, pero antes de ir allí, planifiquemos la incorporación de algunas comprobaciones de errores. He agregado un par de líneas en la parte superior de nuestra función para invocar un método que se encargue de analizar los nodos de error por nosotros, y lo analizaré con más detalle hacia el final de este tutorial.</p><pre> / ** * Analiza el nodo del resultado superior y sus atributos, del objeto XML * devuelve: matriz de datos del producto * / función estática privada get_top_result_data ($ xml) if (! Empty (self :: handle_errors ($ xml))) matriz de retorno ('error' => self :: handle_errors ($ xml)); // obtener el primer nodo de resultado $ first_item = $ xml-> Items [0] -> Item; $ item_title = $ first_item-> ItemAttributes-> Title; $ item_link = $ first_item-> DetailPageURL; $ item_image = $ first_item-> LargeImage-> URL; $ item_price = $ first_item-> OfferSummary-> LowestNewPrice-> FormattedPrice; matriz de retorno ('title' => (string) $ item_title, 'link' => (string) $ item_link, 'image' => (string) $ item_image, 'price' => (string) $ item_price); </pre><p>Como puede ver en el código anterior, comenzamos por recuperar el primer nodo de elemento (<code>Artículo [0]</code>) desde el objeto XML y almacenándolo en una variable (<code>$ first_item</code>). Luego, operamos en cada uno de sus hijos para recopilar la información que deseamos (<code>$ item_title</code>, <code>$ item_link</code>, <code>$ item_image</code>, <code>$ item_price</code>). Finalmente, lo empaquetamos todo en una matriz con atributos nombrados y devolvemos la matriz.</p><h2>Errores de manejo</h2><p>Crea un método llamado <code>handle_errors ()</code>y pasar el mismo objeto XML. Según la forma en que se configura esta API, se configuran varios nodos de error con códigos y mensajes específicos para que aparezcan en el <code><OperationRequest></code> nodo o los elementos <code><Request></code> nodo. Puede probarlos configurando un índice de búsqueda no válido o un grupo de respuesta. El siguiente código recorre cada uno de los nodos e inserta los mensajes de error en una matriz que devolvemos:</p><pre>/ ** * Comprueba errores en la solicitud / resultado * devuelve: matriz con mensaje (s) que describe el "error" * / función estática privada handle_errors ($ xml) $ errors_arr = array (); // procesar errores en la solicitud para cada ($ xml-> OperationRequest-> Errors-> Error as $ error) error_log ("Código de error:". $ error-> Code. "\ r \ n"); error_log ($ error-> Mensaje. "\ r \ n"); error_log ("\ r \ n"); array_push ($ errors_arr, (string) $ error-> Message); // compruebe si hay una categoría no válida, ninguna coincidencia u otro error de búsqueda para cada ($ xml-> Artículos-> Solicitud-> Errores-> Error como $ error) error_log ("Código de error:". $ error-> Código. "\ r \ n"); error_log ($ error-> Mensaje. "\ r \ n"); error_log ("\ r \ n"); array_push ($ errors_arr, (string) $ error-> Message); devolver $ errors_arr; </pre><h2>Poblando los datos en una plantilla HTML</h2><p>En este punto, puede eliminar las llamadas de prueba XML ya que estamos listos para ver el resultado final de los datos. En index.php, imprime los datos devueltos. <code>$ product_data array</code> y cargar la página. Debería ver algo como esto:</p><pre>Array ([title] => Jurassic World [link] => http://www.amazon.com/Jurassic-World-Chris-Pratt/dp/B016W01EXI%3FSubscriptionId%3DAKIAJILHUTAJ5MMQRJWA%26tag%3Denvtut-20%26linkClase 26camp% 3D2025% 26creative% 3D165953% 26creativeASIN% 3DB016W01EXI [image] => http://ecx.images-amazon.com/images/I/51ePeFXU2ML.jpg [price] => $ 5.99)</pre><p>Una vez que haya verificado que los datos parecen correctos para cada una de las cuatro propiedades que nos interesan, puede intentar ejecutar la llamada en otras películas o productos para comparar. Tenga en cuenta que el ID de afiliado (en este caso "envtut-20") se ha insertado automáticamente en el 'enlace' como deberíamos esperar.</p><p>Como paso final, vamos a codificar un bloque simple de HTML para mostrar los datos de nuestra película y vincularlo a la página de compra. En <em>index.php</em>, agregue lo siguiente debajo del bloque PHP:</p><pre><!doctype html> <html> <head> <title>Tuts + Demo: API de producto de Amazon

"target =" _ blank "> <?php echo $product_data['title']; ?>

"target =" _ blank ">

en Amazon

"target =" _ blank "> Comprar ahora

Tenga en cuenta que en el caso de que se devuelva un error, opté por ocultar la pantalla por completo, pero alternativamente, podría mostrar el mensaje de error correspondiente en su lugar. 

Ahora, con los estilos CSS agregados, la salida final se vería así:

¡Y ahí lo tienes! Una vez que haya lanzado su módulo de afiliados al mundo, puede hacer un seguimiento de todas las compras y ganancias iniciando sesión en su cuenta. 

Conclusión

En este tutorial, cubrimos todos los pasos necesarios para que un programador de PHP cree una solución de código escalable que genere instantáneamente un enlace de afiliado personalizado para prácticamente cualquier producto en la Tienda de Amazon. De acuerdo con sus necesidades o preferencias, puede decidir cambiar o ampliar este ejemplo con diferentes parámetros. 

También puede explorar la documentación de la API con más detalle por su cuenta para descubrir aún más de lo que es posible. El verdadero poder en el uso de la API de comercialización de productos reside en la flexibilidad que proporciona para organizar y mostrar una amplia gama de información en tiempo real sobre un producto o lista de productos. Con el generador de enlaces predeterminado de Amazon (no se requieren conocimientos de codificación), no obtiene casi la misma cantidad de control y sus opciones son limitadas. 

La API realmente brilla en las páginas web que se generan dinámicamente y en las páginas en las que necesita un mayor nivel de control sobre la apariencia de sus enlaces, por lo que si está trabajando en un sitio web o blog en este sentido y desea incorporar la monetización, espero que has encontrado útil este tutorial.