$def with (title, opts, async_load=False) $def affiliate_link(key, analytics_key, name, link, price='', price_note=''):
- $name $if price:
  $price$price_note
$if async_load: $:macros.LoadingIndicator(_("Fetching prices"), additional_classes="affiliate-links-loading") $else: $code: prices = opts.get('prices') isbn = opts.get('isbn', '') asin = opts.get('asin', '') bwb = { 'key': 'betterworldbooks', 'analytics_key': 'BetterWorldBooks', 'name': _('Better World Books'), 'link': 'https://www.betterworldbooks.com/%s' % ( ('product/detail/-%s' % isbn) if isbn else ('search/results?q=' + title.replace(' ','%20')) ), 'price_note': _(' - includes shipping') } amazon = { 'key': 'amazon', 'analytics_key': 'Amazon', 'name': _('Amazon'), 'link': 'https://www.amazon.com/dp/%s/?tag=%s' % (asin or isbn, affiliate_id('amazon')), } if (asin or isbn) else None bookshop = { 'key': 'bookshop-org', 'analytics_key': 'BookshopOrg', 'name': _('Bookshop.org'), 'link': 'https://bookshop.org/a/%s/%s' % (affiliate_id('bookshop-org'), isbn), } if isbn else None # Fetch price data if False and not is_bot() and prices and isbn: bwb_metadata = get_betterworldbooks_metadata(isbn) bwb['price'] = bwb_metadata and bwb_metadata.get('price') if amazon: amazon['price'] = bwb_metadata and bwb_metadata.get('market_price') if amazon and not amazon['price']: amz_metadata = get_amazon_metadata(isbn, resources='prices') amazon['price'] = amz_metadata and amz_metadata.get('price') primary_stores = [store for store in [bwb, amazon] if store] more_stores = [store for store in [bookshop] if store]

$for store in primary_stores: $:affiliate_link(store['key'], store['analytics_key'], store['name'], store['link'], store.get('price', ''), store.get('price_note', '')) $if more_stores:
- $_('More')
  $for store in more_stores: $:affiliate_link(store['key'], store['analytics_key'], store['name'], store['link'], store.get('price', ''), store.get('price_note', ''))

$:_('When you buy books using these links the Internet Archive may earn a small commission.')