建立亚马逊附属链接 Swift

时间:2021-01-22 00:29:52

标签: swift url amazon affiliate

我希望能够在提供“正常”Amazon URL 时建立 Amazon-Affiliate 链接。

我尝试使用这种结构:

http://www.amazon.com/dp/{ASIN}/?tag={trackingId}

按照建议here

这就是我尝试创建 URL 的方式:

func getAmazonAffiliateLink() -> URL? {
    if let regex = try? NSRegularExpression(pattern: "([\\w-]+/)?(dp|gp/product)/(\\w+/)?(\\w{10})"),
       let match = regex.firstMatch(in: self, range: NSRange(self.startIndex..., in: self)),
       let asinMatchRange = Range(match.range(at: 4), in: self) {
        let asin = self[asinMatchRange]
        let partnerId = "wishlists07-21"
        let affiliateLink = "https://www.amazon.com/dp/\(asin)/?tag=\(partnerId)"
        return URL(string: affiliateLink)
    } else {
        return nil
    }

}

但这给了我这个 URL 例如:

<块引用>

https://www.amazon.com/dp/b085sp5sxh/?tag=wishlists07-21

正如您亲眼所见,它不起作用......

我在这里错过了什么?如何建立附属链接?

1 个答案:

答案 0 :(得分:2)

看起来您正在测试的初始链接可能是错误的——换句话说,当我删除您的心愿单标签并尝试使用基本的亚马逊链接时,它仍然失败。

但是,使用有效的亚马逊产品链接,它似乎可以工作。这是我在 Playground 中所做的:

extension String {
    func getAmazonAffiliateLink() -> URL? {
        if let regex = try? NSRegularExpression(pattern: "([\\w-]+/)?(dp|gp/product)/(\\w+/)?(\\w{10})"),
           let match = regex.firstMatch(in: self, range: NSRange(self.startIndex..., in: self)),
           let asinMatchRange = Range(match.range(at: 4), in: self) {
            let asin = self[asinMatchRange]
            let partnerId = "wishlists07-21"
            let affiliateLink = "https://www.amazon.com/dp/\(asin)/?tag=\(partnerId)"
            return URL(string: affiliateLink)
        } else {
            return nil
        }

    }
}

"https://www.amazon.com/dp/B0863ZGP2R/ref=fs_a_ipadt2_us0".getAmazonAffiliateLink()

产生 https://www.amazon.com/dp/B0863ZGP2R/?tag=wishlists07-21 的结果,这是一个有效的亚马逊链接。