amazon_url_extractor 0.1.2 copy "amazon_url_extractor: ^0.1.2" to clipboard
amazon_url_extractor: ^0.1.2 copied to clipboard

Extract ASIN, product info, prices, and metadata from Amazon URLs. Supports all Amazon domains, affiliate links, and shortened URLs.

Amazon URL Extractor #

A comprehensive Flutter package to extract ASIN, product information, prices, and metadata from Amazon URLs. Supports all Amazon domains, affiliate links, shortened URLs, and provides widgets for displaying product information.

Features #

Core Functionality #

  • Extract ASIN from various Amazon URL formats
  • Extract product titles from URLs (when available)
  • Extract prices from URL parameters (when available)
  • Multi-domain support - All major Amazon domains (.com, .in, .uk, .ca, .au, .de, .fr, .it, .es, .jp, .mx, .br, .nl, etc.)
  • Affiliate link handling - Detect and manage affiliate tags
  • Short URL expansion - Expand amzn.to, amzn.eu shortened URLs
  • URL normalization - Convert to canonical product URLs
  • URL sanitization - Remove tracking parameters

Advanced Features #

  • Batch processing for multiple URLs
  • Intelligent caching with LRU eviction policy
  • Robust error handling with custom exceptions
  • URL validation and ASIN validation
  • Product metadata extraction - Variants, seller info, etc.
  • Availability detection (limited - requires API for full support)
  • URL builders - Build affiliate URLs, variant URLs, etc.

Flutter Widgets #

  • Product Preview Widget - Display product link previews
  • Product Card Widget - Rich product card component

Optional Features #

  • 🔄 Amazon Product Advertising API integration (placeholder - requires AWS SDK for full implementation)

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  amazon_url_extractor: ^0.1.0

or run

flutter pub add amazon_url_extractor

Quick Start #

Basic ASIN Extraction #

import 'package:amazon_url_extractor/amazon_url_extractor.dart';

void main() {
  const extractor = AmazonUrlExtractor();
  
  // Extract ASIN
  const url = 'https://www.amazon.com/dp/B08N5WRWNW';
  final asin = extractor.extractAsin(url);
  print('ASIN: $asin'); // B08N5WRWNW
}

Comprehensive Product Information #

void main() async {
  const extractor = AmazonUrlExtractor();
  
  const url = 'https://www.amazon.com/dp/B08N5WRWNW?tag=affiliate-20';
  
  try {
    final result = await extractor.extractProductInfo(url);
    
    print('ASIN: ${result.asin}');
    print('Domain: ${result.domain.domain}');
    print('Country: ${result.domain.countryCode}');
    print('Currency: ${result.domain.currency}');
    print('Title: ${result.title}');
    print('Price: ${result.price?.formattedPrice}');
    print('Affiliate Tag: ${result.affiliateInfo?.tag}');
    print('Canonical URL: ${result.canonicalUrl}');
  } catch (e) {
    print('Error: $e');
  }
}

Extract Entity from URL #

void main() {
  const extractor = AmazonUrlExtractor();
  
  // Product URL
  final productResult = extractor.extract('https://www.amazon.com/dp/B08N5WRWNW');
  if (productResult.isSuccess && productResult.value!.type == UrlType.product) {
    final asin = productResult.value!.product!.asin;
    print('Product ASIN: $asin');
  }
  
  // Search URL
  final searchResult = extractor.extract('https://www.amazon.com/s?k=laptop');
  if (searchResult.isSuccess && searchResult.value!.type == UrlType.search) {
    final query = searchResult.value!.searchQuery;
    print('Search query: $query');
  }
}

API Reference #

Core Methods #

extractAsin(String url)

Extracts ASIN from an Amazon URL.

final asin = extractor.extractAsin(url);
if (asin != null) {
  print('ASIN: $asin');
}

extractProductInfo(String url)

Extracts comprehensive product information.

final result = await extractor.extractProductInfo(url);
print('ASIN: ${result.asin}');
print('Title: ${result.title}');
print('Price: ${result.price?.formattedPrice}');
print('Domain: ${result.domain.domain}');

processAmazonUrl(String url)

Processes any Amazon URL (expands if needed, then extracts).

final result = await extractor.processAmazonUrl(url);

URL Processing #

expandShortUrl(String shortUrl)

Expands shortened Amazon URLs (amzn.to, amzn.eu).

try {
  final expanded = await ShortUrlExpander.expandShortUrl('https://amzn.to/abc123');
  print('Expanded: $expanded');
} catch (e) {
  print('Error: $e');
}

canonicalProductUrl(String url)

Converts URL to canonical format.

final canonical = AmazonUrlNormalizer.canonicalProductUrl(url);
print('Canonical: $canonical'); // https://amazon.com/dp/B08N5WRWNW

Batch Processing #

processBatch(List<String> urls)

Processes multiple URLs in batch.

final urls = [
  'https://www.amazon.com/dp/B08N5WRWNW',
  'https://www.amazon.in/dp/B08N5WRWNW',
];
final results = await extractor.processBatch(urls);
for (int i = 0; i < results.length; i++) {
  if (results[i] != null) {
    print('URL ${i + 1}: ASIN ${results[i]!.asin}');
  }
}

Validation #

isValidAmazonUrl(String url)

Validates if a URL is a valid Amazon URL.

final isValid = AmazonUrlValidators.isValidAmazonUrl(url);
print('Valid: $isValid');

isValidAsin(String asin)

Validates ASIN format.

final isValid = AsinExtractor.isValidAsin('B08N5WRWNW');
print('Valid ASIN: $isValid');

Affiliate Handling #

extractAffiliateInfo(String url)

Extracts affiliate information from URL.

final info = AffiliateHandler.extractAffiliateInfo(url);
if (info.hasAffiliateTag) {
  print('Affiliate tag: ${info.tag}');
}

addAffiliateTag(String url, String tag)

Adds affiliate tag to URL.

final urlWithTag = AffiliateHandler.addAffiliateTag(url, 'my-tag-20');

URL Builders #

buildProductUrl(...)

Builds product URL with options.

final url = AmazonUrlBuilders.buildProductUrl(
  asin: 'B08N5WRWNW',
  domainOrUrl: 'amazon.com',
  affiliateTag: 'test-20',
  variants: {'size': 'large', 'color': 'black'},
);

Domain Information #

getDomainInfo(String urlOrDomain)

Gets domain information (country, currency, marketplace).

final domain = DomainMapper.getDomainInfo('https://www.amazon.in/dp/B08N5WRWNW');
print('Country: ${domain!.countryCode}'); // IN
print('Currency: ${domain.currency}'); // INR
print('Marketplace: ${domain.marketplace}');

Cache Management #

clearCache()

Clears the internal cache.

UrlExpansionCache.clear();

getCacheSize()

Gets current cache size.

final size = UrlExpansionCache.size;
print('Cache size: $size');

Flutter Widgets #

Product Preview #

AmazonProductPreview(
  imageUrl: 'https://example.com/image.jpg',
  title: 'Product Title',
  price: PriceInfo(formattedPrice: '\$29.99'),
  availability: AvailabilityInfo(status: AvailabilityStatus.inStock),
  asin: 'B08N5WRWNW',
  onTap: () {
    // Handle tap
  },
)

Product Card #

AmazonProductCard(
  imageUrl: 'https://example.com/image.jpg',
  title: 'Product Title',
  subtitle: 'Product Subtitle',
  price: PriceInfo(formattedPrice: '\$29.99'),
  availability: AvailabilityInfo(
    status: AvailabilityStatus.inStock,
    isPrimeEligible: true,
  ),
  reviewInfo: ReviewInfo(
    averageRating: 4.5,
    totalReviews: 1234,
  ),
  asin: 'B08N5WRWNW',
  onTap: () {
    // Handle tap
  },
)

Supported URL Formats #

This package supports multiple Amazon URL formats:

  • Product URLs: /dp/ASIN, /gp/product/ASIN, /product/ASIN
  • Short URLs: amzn.to, amzn.eu, a.co
  • Affiliate URLs: URLs with tag, AssociateTag, linkCode parameters
  • Wishlist URLs: /gp/registry/wishlist/ID
  • Search URLs: /s?k=query
  • Store URLs: /stores/ID
  • Review URLs: /review/ID

Supported Domains #

  • amazon.com (US)
  • amazon.co.uk (UK)
  • amazon.ca (Canada)
  • amazon.de (Germany)
  • amazon.fr (France)
  • amazon.it (Italy)
  • amazon.es (Spain)
  • amazon.in (India)
  • amazon.co.jp (Japan)
  • amazon.com.au (Australia)
  • amazon.com.mx (Mexico)
  • amazon.com.br (Brazil)
  • amazon.nl (Netherlands)
  • amazon.se (Sweden)
  • amazon.pl (Poland)
  • amazon.sg (Singapore)
  • amazon.ae (UAE)
  • amazon.sa (Saudi Arabia)
  • amazon.tr (Turkey)
  • amazon.eg (Egypt)

Error Handling #

The package provides comprehensive error handling with custom exceptions:

try {
  final result = await extractor.extractProductInfo(url);
} on InvalidUrlException catch (e) {
  print('Invalid URL: ${e.message}');
} on UrlExpansionException catch (e) {
  print('URL expansion failed: ${e.message}');
} on AsinExtractionException catch (e) {
  print('ASIN extraction failed: ${e.message}');
} on UnsupportedDomainException catch (e) {
  print('Unsupported domain: ${e.message}');
} catch (e) {
  print('Unexpected error: $e');
}

Exception Types #

  • InvalidUrlException: Invalid URL format
  • UrlExpansionException: Short URL expansion failed
  • AsinExtractionException: ASIN extraction failed
  • InvalidAsinException: Invalid ASIN format
  • UnsupportedDomainException: Unsupported Amazon domain
  • NetworkException: Network-related errors
  • ApiException: API-related errors

Performance Features #

Caching #

  • Automatic caching of expanded URLs
  • LRU eviction policy to manage memory usage
  • Configurable cache size (default: 100 entries)
  • Cache management methods for manual control

Batch Processing #

  • Efficient batch processing for multiple URLs
  • Error isolation - one failed URL doesn't affect others
  • Memory efficient processing

Amazon Product Advertising API (Optional) #

For fetching detailed product information, you can integrate with Amazon PA-API. This package provides a placeholder interface. For full implementation, use AWS SDK or implement proper AWS Signature Version 4 signing.

final api = AmazonProductAdvertisingApi(
  accessKey: 'your-access-key',
  secretKey: 'your-secret-key',
  partnerTag: 'your-associate-tag',
);

// Note: Full implementation requires AWS Signature Version 4 signing
// See: https://webservices.amazon.com/paapi5/documentation/

Contributing #

Contributions are welcome! Please feel free to submit a Pull Request.

License #

This project is licensed under the MIT License. See the LICENSE file for more details.

0
likes
160
points
162
downloads

Publisher

unverified uploader

Weekly Downloads

Extract ASIN, product info, prices, and metadata from Amazon URLs. Supports all Amazon domains, affiliate links, and shortened URLs.

Repository (GitHub)
View/report issues

Topics

#amazon #urls #parser #asin #product-extractor

Documentation

API reference

License

MIT (license)

Dependencies

flutter, http

More

Packages that depend on amazon_url_extractor