Index: wp-includes/class-oembed.php
===================================================================
--- wp-includes/class-oembed.php	(revision 38184)
+++ wp-includes/class-oembed.php	(working copy)
@@ -12,6 +12,13 @@
  */
 
 /**
+ * Regex used to handle Amazon OEmbed requests.
+ *
+ * @var string
+ */
+define( 'OEMBED_AMAZON_FORMAT', '#https?://([a-z0-9-]+\.)?amazon\.(com|co\.uk|de|fr|it|es|co\.jp|cn|com\.au|in|com\.mx|com\.br|ca|nl|ru)/.*#i' );
+
+/**
  * Core class used to implement oEmbed functionality.
  *
  * @since 2.9.0
@@ -98,6 +105,14 @@
 			'#https?://videopress.com/v/.*#'                      => array( 'https://public-api.wordpress.com/oembed/1.0/?for=' . $host, true  ),
 			'#https?://(www\.)?reddit\.com/r/[^/]+/comments/.*#i' => array( 'https://www.reddit.com/oembed',                             true  ),
 			'#https?://(www\.)?speakerdeck\.com/.*#i'             => array( 'https://speakerdeck.com/oembed.{format}',                   true  ),
+			OEMBED_AMAZON_FORMAT                                  => array( 'https://read.amazon.com/kp/api/oembed',                     true  ),
+			'#https?://(www\.)a.co/.*#i'                          => array( 'https://read.amazon.com/kp/api/oembed',                     true  ),
+			'#https?://(www\.)amz.onl/.*#i'                       => array( 'https://read.amazon.com/kp/api/oembed',                     true  ),
+			'#https?://(www\.)amzn.to/.*#i'                       => array( 'https://read.amazon.com/kp/api/oembed',                     true  ),
+			'#https?://(www\.)amzn.eu/.*#i'                       => array( 'https://read.amazon.co.uk/kp/api/oembed',                   true  ),
+			'#https?://(www\.)amzn.in/.*#i'                       => array( 'https://read.amazon.in/kp/api/oembed',                      true  ),
+			'#https?://(www\.)amzn.asia/.*#i'                     => array( 'https://read.amazon.com.au/kp/api/oembed',                  true  ),
+			'#https?://(www\.)z.cn/.*#i'                          => array( 'https://read.amazon.cn/kp/api/oembed',                      true  ),
 		);
 
 		if ( ! empty( self::$early_providers['add'] ) ) {
@@ -187,6 +202,9 @@
 		 */
 		$this->providers = apply_filters( 'oembed_providers', $providers );
 
+		// Ensure that any requests for Amazon URLs are routed to the correct endpoint based on their TLD
+		add_filter( 'oembed_fetch_url', array($this, '_match_amazon_tld'), 10, 2 );
+
 		// Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop().
 		add_filter( 'oembed_dataparse', array($this, '_strip_newlines'), 10, 3 );
 	}
@@ -676,6 +694,50 @@
 
 		return str_replace( $tokens, $pre, $stripped );
 	}
+
+	/**
+	 * Checks if the given URL is an Amazon URL, and if so, alters the
+	 * provider's subdomain and TLD to match the URL's TLD.
+	 *
+	 * These transformations are applied to the oembed endpoint served by
+	 * one of the read.amazon.com regionalized domains, which services all
+	 * *.amazon.* URLs for the corresponding region.
+	 *
+	 * This method ensures that oEmbed requests for different Amazon
+	 * marketplaces (.com, .de, .jp, etc) are routed to the correct oEmbed
+	 * endpoint for those marketplaces.
+	 *
+	 * @since 4.6.2
+	 * @access public
+	 *
+	 * @param string $provider The URL to the default OEmbed provider.
+	 * @param string $url      The URL to the content that is desired to be embedded.
+	 *
+	 * @return string The URL to the OEmbed provider.
+	 */
+	public function _match_amazon_tld( $provider, $url ) {
+		if ( 1 !== preg_match( OEMBED_AMAZON_FORMAT, $url, $matches ) ) {
+			return $provider;
+		}
+
+		$tld = $matches[2];
+		switch ( $tld ) {
+			case 'de': $subdomain = 'lesen'; break;
+			case 'fr': $subdomain = 'lire'; break;
+			case 'it': $subdomain = 'leggi'; break;
+			case 'es': $subdomain = 'leer'; break;
+			case 'com.mx': $subdomain = 'leer'; break;
+			case 'com.br': $subdomain = 'ler'; break;
+			case 'nl': $subdomain = 'lezen'; break;
+			default: $subdomain = 'read';
+		}
+		
+		return preg_replace(
+			'#^https://read.amazon.com/#',
+			sprintf( 'https://%s.amazon.%s/', $subdomain, $tld ),
+			$provider
+		);
+	}
 }
 
 /**
