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 +].
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..)
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 AmazonAssocHelper
. Incluirá 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:
- una frase clave específica que hace referencia al nombre del producto que queremos buscar
- 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. losget_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% 3DEn el
AmazonAssocHelper
clase, llame alget_signed_request ()
en un método llamadoget_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 nuestroAmazonAssocHelper
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
,
,
, y
. Están los nodos en los que nos centraremos en el análisis..
Analizar el objeto de respuesta
En el
AmazonAssocHelper
clase, crea otro metodo llamadoget_top_result_data ()
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./ ** * 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);Como puede ver en el código anterior, comenzamos por recuperar el primer nodo de elemento (
Artículo [0]
) desde el objeto XML y almacenándolo en una variable ($ first_item
). Luego, operamos en cada uno de sus hijos para recopilar la información que deseamos ($ item_title
,$ item_link
,$ item_image
,$ item_price
). Finalmente, lo empaquetamos todo en una matriz con atributos nombrados y devolvemos la matriz.Errores de manejo
Crea un método llamado
handle_errors ()
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 elnodo o los elementos
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:
/ ** * 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;Poblando los datos en una plantilla HTML
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.
$ product_data array
y cargar la página. Debería ver algo como esto: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)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.
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 index.php, agregue lo siguiente debajo del bloque PHP:
Tuts + Demo: API de producto de Amazon "target =" _ blank ">"target =" _ blank ">
en Amazon
"target =" _ blank "> Comprar ahoraTenga 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.