Get Amazon Affiliate Links With Image From Python Using Amazon’s API.

This script will show you how to build an Amazon affiliate link with image from the new API that generates HTML that can be inserted into a blog. I made this as an example for my wife. She ended up using a plugin in WordPress. It uses python-amazon-paapi to do all the heavy lifting. You can enter the ASIN in the var and run without Flet or, if you prefer a GUI and wish to use Flet, you can install it.

A good IDE for Python is PyCharm. It’s free and will automatically create a virtual environment. It’s below the 30 day trial of pro edition.

If you are not a programmer.

Install Python, copy the program below into a text editor like Notepad, save as get_affiliate_link.py

Be sure to fill in the API key, secret, your affiliate id, along with the asin for the product you want to display.

I did not put a lot of work into the HTML so change anything there you think will make it fit your design. Be sure not to remove anything starting with $ or ${} in the HTML.

To run, open the terminal or command prompt and run: python get_affiliate_link.py OR python3 get_affiliate_link.py

Code:

#!/usr/bin/env python3
from amazon_paapi import AmazonApi
from string import Template
try:
    import flet as ft
    term = False
except:
    term = True  # Flet not installed. Run without gui.
'''
Quick example to get Amazon affiliate data.

Best to create a Python virtual environment to keep
it all contained. PyCharm does this for you.

Install Amazon API module (https://pypi.org/project/python-amazon-paapi/):

pip install python-amazon-paapi --upgrade

Install flet (https://pypi.org/project/flet/), or not:

pip install flet --upgrade
'''

#  **** User configs:

access_key = "API Key"  # Enter your Amazon API key.
secret_key = "API Secret"  # Enter your Amazon API secret.
affiliate_tag = "affiliate-id"  # Enter your affiliate id.
country = "US"  # Country.
ASIN = "B074MN9DBB"  # Enter Product ASIN. Only used if Flet is not installed.

def get_item(asin):
    amazon = AmazonApi(access_key, secret_key, affiliate_tag, country)
    item = amazon.get_items(asin)[0]
    return item.to_dict()


def html(prod_url, prod_img, img_width, prod_title, div_pad=4, border_color="#000000;", background_color="#ffffff;"):
    div_width = img_width
    ad_html = Template('''
<div style="width: ${ad_width}px; background-color: ${bg_color}
    border: 1px solid ${bord_color} padding: ${div_padding}px; margin: 6px;">
      <div>
          <a href="$link" title="$link_title" target="_blank">
              <img src="$img_url" width="${img_width}px">
              <p font-size="9px">$title</p>
          </a>
      </div>
</div>
    ''')
    advert = ad_html.substitute(ad_width=div_width, title=prod_title,
                                link=prod_url, link_title=prod_title,
                                img_url=prod_img, img_width=img_width,
                                div_padding=div_pad, bord_color=border_color,
                                bg_color=background_color)
    return advert


if __name__ == '__main__':
    if term:

        #  Flet not installed.
        amz_data = get_item(ASIN)

        product_url = amz_data['detail_page_url']
        product_img_details = amz_data['images']['primary']['medium']
        product_img_url = product_img_details['url']
        product_img_width = product_img_details['width']
        product_title = amz_data['item_info']['title']['display_value']
        product_html = html(product_url, product_img_url, product_img_width, product_title)
        print(product_html)

    else:
        def main(page: ft.Page):
            page.title = "Amazon Affiliate Generator"
            try:
                page.window_width = 500
                page.window_height = 620
            except:
                pass # known issue in Flutter, with Wayland?

            def amz_data(e):
                tb.disabled = True
                amz_data = get_item(tb.value)

                product_url = amz_data['detail_page_url']
                product_img_details = amz_data['images']['primary']['medium']
                product_img_url = product_img_details['url']
                product_img_width = product_img_details['width']
                product_title = amz_data['item_info']['title']['display_value']
                product_html = html(product_url, product_img_url, product_img_width, product_title)
                to.value = product_html
                tb.disabled = False
                page.update()

            to = ft.TextField(multiline=True, width=500, height=500)
            tb = ft.TextField(label="ASIN", width=435)
            btn = ft.IconButton(ft.icons.ARROW_FORWARD, on_click=amz_data)

            top_row = ft.Row([tb, btn])
            top_textedit = ft.Container(content=top_row, alignment=ft.alignment.top_left)
            bottom_textedit = ft.Container(content=to, alignment=ft.alignment.top_left)
            page.add(top_textedit, bottom_textedit)

        ft.app(target=main)

Enjoy, and have fun learning!