
API تبلیغات محصول (PA-API) 5.0 – Helmut Karger

سه مقاله قبلی در مورد سرور پروکسی آمازون مربوط به API تبلیغات محصول آمازون نسخه 4 . در آغاز سال 2020 ، آمازون آن را با نسخه جدید نسخه 5.0 جایگزین می کند. این بدان معنی است که تغییراتی اساسی ایجاد می شود و برای کاربران PA-API ، هنگام جابجایی از V4 به V5 ، به سختی یک سنگ بدون سوختگی باقی می ماند. در این مقاله به تفاوت های نسخه های API 4 و 5 ، مهاجرت کلیدهای API و خراش پد جدید می پردازیم. سپس Amazon Proxy Server به نسخه جدید 5.0 Amazon PA-API Amazon به روز می شود.
با PA-API 5.0 چه تغییری می کنید؟
البته ، API جدید بهتر ، لاغرتر و سریع تر است. ؛-) چیزهای قابل توجهی که با آنها سر و کار خواهیم داشت عبارتند از:
- کلیدهای دسترسی جدید (اعتبار) – حداقل کلیدهای قدیمی باید مهاجرت شوند. ما در بخش بعدی توضیح خواهیم داد كه آیا این واقعاً ضروری است.
- دریافت دیگر با فرمت XML نیست ، اما داده JSON (قلب برنامه نویسان سریعتر ضرب می شود).
- امضای درخواست ارسال شده ایمن تر می شود (اما این امر منجر به كد طولانی تر نیز می شود).
- گروه های واكنش از بین می روند (كه ضرری ندارد) ، اکنون [ منابع وجود دارد.
- [جدید] Scratchpad .
- و البته اسناد جدید وجود دارد.
بررسی کلیدهای API موجود
آمازون می گوید که کلیدهای API ، که ایجاد شده اند قبل از 29 سپتامبر 2017 باید مهاجرت کنند. احتمالاً موارد جدیدتر هم نیست. برای اینکه در جای امن باشیم ، بیایید با Scratchpad امتحان کنیم. اگر نمی دانید که صفحه خراش چیست ، باید بخش اول این سری از مقاله ها را دوباره بخوانید ، حتی اگر هنوز هم در مورد نسخه PA-API نسخه 4 است.
همانطور که قبلاً نیز اشاره شد ، [APA 5.0] یک نسخه جدید وجود دارد. Scratchpad ، اما مشابه با قدیمی کار می کند. ما این را صدا می کنیم و به عملیات را در GetItems انتخاب می کنیم.

و در اینجا داده های دسترسی خود را وارد می کنیم. جدا از اینکه نامها تا حدودی تغییر کرده اند و یک [شریکشریک اضافه شده است ، این تقریباً مطابق با مدخل های موجود در خراشاد قدیمی است.
در بخش GetItems در زیر مشخص می کنیم ArticleIds یک آمازون معتبر ASIN (یعنی شماره محصول) را وارد کنید و هر منبع را انتخاب کنید ، به عنوان مثال بارهای آرام همه را انتخاب کنید. با کلیک روی اجرای درخواست در سمت راست نشان می دهد که آیا کلیدهای دسترسی کار می کنند یا خیر. اگر یک پیام خطایی مانند به عنوان پاسخ به پاسخ ارسال شده دریافت کنیم ، پس کلیدهای دسترسی ما با API 5.0 سازگار نیستند و باید منتقل شوند .

کلیدهای API مهاجرت
آمازون نیز برای این کار دستورالعمل های انگلیسی دارد ، اما به خودی خود موضوع بسیار ساده است. این مهم است که بدانید که کلیدهای جدید در طی فرآیند مهاجرت تولید می شوند . نسخه های قدیمی حفظ می شوند و هنوز هم می توانند با PA-API 4 استفاده شوند – حداقل تا زمانی که API 4 در دسترس باشد. جفت اصلی جدید با PA-API 4 و PA-API 5 کار می کند.
برای مهاجرت به Amazon PartnerNet وارد می شویم ، به عنوان مثال از طریق لینک درآمد در SiteStripe بالاتر از هر صفحه محصول آمازون. سپس در منو به [ Tools و API Advertising Product می رویم.

تحت مدیریت داده های دسترسی خود اکنون می توانیم با دکمه حرکت مهاجرت را آغاز کنیم. مهم است فوراً کلیدهای دسترسی جدید را با خیال راحت ذخیره کنید – کلید مخفی آنقدر مخفی است که بعداً نمی توانید به آن دسترسی داشته باشید.
ساختار داده را با خراش
کاوش کنید. ساختار خش خش جدید بسیار شبیه به قدیمی است. اول از همه جالب است كه ResponseGroups ناپدید شده اند و به جای آن منابع وجود دارند. این مشخص می کند که کدام قسمتهای داده پاسخ (عنوان محصول ، توضیحات ، قیمت) شما می خواهید دریافت کنید. در گذشته کل لیست هایی مانند Large انتخاب شده بودند ، که هرگز مناسب نبود. اکنون می توانید منابع جداگانه را بصورت جداگانه یا در گروه های کوچک انتخاب کنید. این در ابتدا کمی دشوارتر است ، اما منجر به پاسخ های فشرده تر از API می شود.
دومین تغییر آشکار را می توان در قالب پاسخ مشاهده کرد . XML XML توسط JSON جایگزین شد ، که برای من بسیار خوشایند تر است. من هرگز با XML واقعا گرم نشده ام. جدا از اینکه همه نام ها و کل ساختار تغییر کرده است ، رویه مانند گذشته است. ما باید به دنبال مکانهایی در داده های حاوی اطلاعات مورد نظر خود باشیم. من قبلاً این کار را برای سرور پروکسی آمازون انجام داده ام – در زیر مشاهده کنید.
اگر اکنون فکر می کنید که اطلاعات بیشتری وجود دارد ، من باید شما را ناامید کنم. از ژانویه سال 2020 ، این کمتر از گذشته خواهد بود. برای مثال ، [ویرایش] Review Review ، که شامل توضیحات محصول است ، در PA-API 5.0 وجود ندارد (
) و اکنون ما به دنبال قسمت های کد هستیم و آن برای PHP . خبرهای خوب و خبرهای بد وجود دارد:
الف) [ کد نمونه پی اچ پی بهتر و کاملتر است. اگر فقط درخواست در Scrappad قدیمی تنظیم و امضا شده باشد ، پرس و جو نیز در مورد جدید انجام می شود و جواب نمایش داده می شود. (بنابراین وقتی کد برنامه را بر روی سرور خود قرار می دهید و اجرا می کنید.)
b) به دلیل امضای پیچیده تر (کلاس AwsV4) و منابع مشخص شده جداگانه ، کد بسیار طولانی تر است.
هر دو من را به تصمیم گیری سوق دادند. برای تهیه کد نمونه ای از PHP (تا حد زیادی). اما من آن را مستقیماً در برنامه amaprox.php نمی سازم ، اما در عوض من یک [پرونده ایجاد می کنم که شامل پرونده است.
اصلاح پروکسی آمازون برای PA-API 5.0
تاکنون این مقاله درمورد API 5.0 Amazon Product Advertising Amazon و نوآوری ها در مقایسه با نسخه 4 بود. اکنون ما در مورد نحوه سرور پروکسی آمازون Amazon صحبت خواهیم کرد ، که من به آن اشاره می کنم. قسمت دوم این سری از مقالاتی که PA-API 5.0 قابل انتقال است. خبر خوب اول: کار محدود به [کامپوننت Amazon Proxy PHP Server می باشد. Proxy Client و ادغام آن در وردپرس یا وب سایت های دیگر بدون تغییر باقی مانده است.
pa- api5.php
این پرونده اخیراً اضافه شده شامل پرونده است که من قبلاً ذکر کردم و آن را تا حد زیادی با کد نمونه پی اچ پی مطابقت دارد که Amazon PA-API 5.0 Scratchpad تولید می کند. .
setRegionName ($ منطقه)؛
$ Awsv4-> setServiceName (نام سرویس $)؛
$ awsv4-> setPath ($ uriPath)؛
$ awsv4-> setPayload ($ payload)؛
$ awsv4-> setRequestMethod ("پست")؛
$ awsv4-> addHeader (&;رمزگذاری محتوا&; ، &;amz-1.0&;)؛
$ awsv4-> addHeader (&;نوع محتوا&; ، &;برنامه / json؛ charset = utf-8&;)؛
$ awsv4-> addHeader (&;میزبان&; ، $ میزبان)؛
$ awsv4-> addHeader (&;x-amz-target&;، &;com.amazon.paapi5.v1.ProductAdvertisingAPIv1.GetItems&;)؛
$ headers = $ awsv4-> getHeaders ()؛
$ headerString = "http://blog.helmutkarger.de/"؛
foreach ($ هدر به عنوان $ key => مقدار) {
$ headerString. = $ کلیدی. &;:&; ارزش دلار " r n و"؛
}
$ params = آرایه (
&;http&; => آرایه (
&;header&; => $ headerString ،
&;method&; => &;POST&;،
&;content&; => $ payload
)
)؛
$ stream = stream_context_create ($ Params)؛
$ fp =fopen (&;https: //&;.$host.$uriPath،&; rb &;، false، stream $))؛
اگر (! $ fp) {
بازگشت به دروغ؛
}
پاسخ $ =stream_get_contents ($ fp)؛
پاسخ $ بازگشت؛
}
کلاس AwsV4
خصوصی $ accessKey = null؛
خصوصی $ secretKey = null؛
مسیر $ private = null؛
خصوصی $ regionName = null؛
سرویس $ $ name = null؛
خصوصی $ httpMethodName = null؛
خصوصی $ queryParametes = آرایه ()؛
خصوصی $ awsHeaders = آرایه ()؛
خصوصی $ payload = "http://blog.helmutkarger.de/"؛
خصوصی $ HMACAlgorithm = "AWS4-HMAC-SHA256"؛
خصوصی $ aws4Request = "aws4_ درخواست"؛
خصوصی $ strSignedHeader = null؛
خصوصی $ xAmzDate = null؛
$ $ فعلیDate = null؛
عملکرد عمومی __construct ($ accessKey ، $ secretKey) {
$ this-> accessKey = $ accessKey؛
$ this-> secretKey = $ secretKey؛
$ this-> xAmzDate = $ this-> getTimeStamp ()؛
$ this-> currentDate = $ this-> getDate ()؛
}
تابع setPath (مسیر $) {
$ this-> path = $ path؛
}
تابع setServiceName ($ serviceName) {
$ this-> serviceName = $ serviceName؛
}
تابع setRegionName ($ منطقه نام) {
$ this-> regionName = $ regionName؛
}
تابع setPayload (مبلغ بار) {
$ this-> payload = $ payload؛
}
تابع setRequestMethod (روش $)
$ this-> روش httpMethodName = $؛
}
تابع addHeader ($ headerName ، $ headerValue) {
$ this-> awsHeaders [$headerName] = $ headerValue؛
}
تابع خصوصی PreparCanonicalRequest ()
$ canonicalURL = "http://blog.helmutkarger.de/"؛
$ canonicalURL. = $ this-> httpMethodName. " N"؛
$ canonicalURL. = $ this-> مسیر. " n" " N"؛
$ signHeaders = "http://blog.helmutkarger.de/"؛
foreach ($ this-> awsHeaders به عنوان $ key => مقدار $) {
$ signHeaders. = کلید $. "؛"؛
کلید canonicalURL. = $. ":" ارزش دلار " N"؛
}
$ canonicalURL. = " n"؛
$ this-> strSignedHeader = substr ($ signHeaders، 0، - 1)؛
$ canonicalURL. = $ this-> strSignedHeader. " N"؛
$ canonicalURL. = $ this-> generateHex ($ this-> payload)؛
$ canonicalURL را بازگردانید
}
تابع خصوصی PreparStringToSign ($ canonicalURL)
$ stringToSign = "http://blog.helmutkarger.de/"؛
$ stringToSign. = $ this-> HMACAlgorithm. " N"؛
$ stringToSign. = $ this-> xAmzDate. " N"؛
$ stringToSign. = $ this-> currentDate. "/" $ this-> منطقه نام. "/" $ this-> خدمات نام. "/" $ this-> aws4 درخواست. " N"؛
$ stringToSign. = $ this-> generateHex ($ canonicalURL)؛
بازگشت $ stringToSign؛
}
محاسبه عملکرد خصوصی ($ stringToSign) {
$ signKey = $ this-> getSignatureKey ($ this-> secretKey، $ this-> currentDate، $ this-> regionName، $ this-> serviceName)؛
$ sign = hash_hmac ("sha256" ، $ stringToSign ، $ nënKeyKey ، صحیح)؛
$ strHexSignature = strtolower (bin2hex (امضای $))؛
بازگشت $ strHexSignature؛
}
عملکرد عمومی getHeaders ()
$ this-> awsHeaders ['x-amz-date'] = $ this-> xAmzDate؛
ksort ($ this-> awsHeaders)؛
// مرحله 1: یک درخواست کانونی ایجاد کنید
$ canonicalURL = $ this-> PreparCanonicalRequest ()؛
// مرحله 2: ایجاد STRING به SIGN
$ stringToSign = $ this-> PreparStringToSign ($ canonicalURL)؛
// مرحله 3: امضاء را محاسبه کنید
$ sign = $ this-> محاسبه Signature ($ stringToSign)؛
// مرحله 4: سرپرست اعتبار محاسبه شده
اگر (امضای $) {
$ this-> awsHeaders ['Authorization'] = $ this-> buildAuthorizationString (امضای $)؛
$ $-- awsHeaders را بازگردانید.
}
}
عملکرد خصوصی buildAuthorizationString ($ strSignature)
$ الگوریتم HMAC را بازگردانید. "http://blog.helmutkarger.de/". "اعتبار =". $ this-> accessKey. "/" $ this-> getDate (). "/" $ this-> منطقه نام. "/" $ this-> خدمات نام. "/" $ this-> aws4 درخواست. "،" "SuedHeaders =". $ this-> strSignedHeader. "،" "امضا =". $ StrSignature؛
}
عملکرد خصوصی generateHex (داده $) {
strtolower Return (bin2hex (هش ("sha256" ، داده $ ، درست)))؛
}
عملکرد خصوصی getSignatureKey (کلید $ ، تاریخ $ ، نام منطقه ، نام سرویس $ نام) {
$ kSecret = "AWS4". $ کلیدی؛
$ kDate = hash_hmac ("sha256" ، تاریخ $ ، $ kSecret ، درست)؛
$ kRegion = hash_hmac ("sha256" ، $ regionName ، $ kDate ، درست)؛
$ kService = hash_hmac ("sha256" ، $ serviceName ، $ kRegion ، درست)؛
$ kSigning = hash_hmac ("sha256" ، $ this-> aws4 درخواست ، $ kService ، درست)؛
بازگشت $ kSigning؛
}
عملکرد خصوصی getTimeStamp ()
بازگشت gmdate ("Ymd THIS Z")؛
}
عملکرد خصوصی getDate ()
بازگشت gmdate ("Ymd")؛
}
}
؟>
نیمه دوم برنامه ، یعنی کلاس کلاس AwsV4
کاملاً بدون تغییر است و 1: 1 را با خروجی خراشنده مطابقت می دهد. در نیمه فوقانی ، [ را اصلاح کردم :
- کل قسمت بالایی برنامه را به یک تابع
paapi5
تبدیل کردم ، که 4 پارامتر باشد. این عملکرد داده های ارسال شده به API ($ paypoad
) را گردآوری می کند ، آن را امضا می کند ، درخواست را به آمازون می فرستد و پاسخ را با فرمت JSON به برنامه فراخوانی باز می گرداند. - برای این کار من از چهار پارامتر انتقال که در برنامه نمونه سخت کار شده اند ، بعنوان متغیرهای استفاده کرده ام – به عنوان مثال در بارگذاری. اما پارامترهایی که برای اهداف پروکسی آمازون تغییر نمی کنند ، از جمله بازار ، منابع و منطقه ، در عملکرد کاملاً مشخص هستند. این ظریف اما عملی نیست.
- پاسخ echo $ به نفع بازپرداخت پاسخ $ بازگشت حذف شد.
- دو پیام خطا
به استثناء جدید حذف شدند
من همچنین [برگشت غلط
را حذف و ارسال کردم. در پرونده خطای آمازون پروکسی باید در سکوت بمیرد و نباید پیام های خطایی را در وبلاگ وردپرس منتشر کند.
تغییر در amaprox.php
] کامپوننت سرور PHP آمازون پروکسی از قسمت 2 این مجموعه مقالات. این بخش از نه بخش برنامه تشکیل شده است ، که از آنها در ابتدا را ذکر خواهم کرد فقط در که توسط PA-API 5.0 تغییر یافته است. سپس کد کامل دوباره در یک قطعه آمده است.
من تعاریف
<؟ پی اچ پی
نیاز به "paapi5.php"؛
$ access_key = "ABCDEFGHIJKLMNO"؛
$ secret_key = "AbCdEfGhIjKlMnOpQrStUvWxYz"؛
$ Associate_tag = "wwwmeinesite-21"؛
$ cachefolder = "حافظه نهان"؛
$ amaprox_homeURL = "https://www.meine-site.de/amaprox" ؛؛19659038 موفق در آغاز بیانیه need
وجود دارد ، که شامل شامل پرونده می باشد. این برنامه فرض می کند که در همان فهرست amaprox.php
قرار دارد ، اما مطمئناً مجبور نیستید این کار را انجام دهید. سپس به شکل مشابه ، مانند برنامه قدیمی ، کلیدهای و Tag Associate را دنبال کنید. نکته مهم: در اینجا باید از کلیدهای مناسب PA-API 5.0 استفاده شود. بنابراین در صورت لزوم از قبل مهاجرت کنید. برخی از تعاریف برنامه قبلی در اینجا حذف شده اند - آنها در پرونده ای که به سختی سیمی هستند ، هستند.
IV. ایجاد درخواست پرس و جو
این بخش کاملاً حذف شده است - عملکرد آن به پرونده موجود منتقل شده است.
V. درخواست آمازون و دریافت پاسخ
$ json = paapi5 ($ access_key، $ secret_key، $ Associate_tag، $ asin)؛
پرس و جو کاملاً متفاوت است - این عملکرد را در پرونده شامل می نامد و پاسخی را در پرونده خطا false
و در صورت موفقیت آمیز ساختار JSON برگشت.
VI. پاسخ پارس
if ($ json === FALSE) {
بازگشت؛
}
پاسخ $ = json_decode ($ json)؛
اگر (پاسخ $ === FALSE)
بازگشت؛
}
اگر (! خالی ($ پاسخ -> خطا)) {
بازگشت؛
}
if (! $ پاسخ-> ItemsResult-> موارد [0] -> ASIN)
بازگشت؛
}
if ($ bers-> ItemsResult-> موارد [0] -> ASIN! == $ asin) {
بازگشت؛
}
$ ama_title = $ پاسخ-> ItemsResult-> موارد [0] -> ArticleInfo-> عنوان-> DisplayValue؛
$ ama_medium = $ پاسخ-> ItemsResult-> موارد [0] -> تصاویر-> اولیه-> متوسط؛
$ ama_page_url = $ پاسخ-> ItemsResult-> موارد [0] -> جزئیاتPageURL؛
$ ama_preis = $ پاسخ-> آیتم ها نتیجه -> موارد [0] -> پیشنهادات-> لیست ها [0] -> قیمت-> نمایش مقدار؛
if (! $ خالی (پاسخ $) - آیتم ها نتیجه>> موارد [0] -> ArticleInfo-> ویژگی ها>
$ ama_feature = &;&;؛
foreach ($ پاسخ-> ItemsResult-> موارد [0] -> ArticleInfo-> ویژگی ها-> نمایشValues به عنوان $ ویژگی) {
$ ama_feature. = &;- &;. $ feature. &;
&;؛
}؛
$ ama_feature. = &;
&;؛
$ ama_beschreibung = $ ama_feature؛
} دیگه
$ ama_beschreibung = "http://blog.helmutkarger.de/"؛
}
از یک طرف ، به جای XML ، JSON تجزیه می شود ، از سوی دیگر ساختار متفاوت است و همه داده های نسخه 4 مانند ویرایشگرها بررسی نمی شوند. اگر می خواهید در اینجا تغییراتی ایجاد کنید ، باید از Scratchpad برای یافتن زمینه های داده مورد نظر استفاده کنید.
VII. دریافت تصاویر
$ mediumImg = $ cachefolder. "/". $ Asin. ". Jpg"؛
$ ch = curl_init ($ ama_medium-> URL)؛
$ targetfile = fopen ($ mediumImg ، "w")؛
curl_setopt ($ ch ، CURLOPT_FILE ، پرونده هدف)؛
curl_setopt ($ ch ، CURLOPT_TIMEOUT ، 600)؛
curl_exec ($ CH)؛
fclose (پرونده هدف $) ؛
فقط در اینجا نام نام پرونده تصویر تغییر می کند. از آنجا که در داده های JSON بیشتر منحصر به فرد موجود نیست ، من از ASIN به عنوان نام پرونده استفاده می کنم. (که البته فرض می کند که تاکنون فقط یک تصویر برای یک محصول فراخوانی شده است.)
amaprox.php کامل
همانطور که گفتم ، من فقط بخش های را که در مقایسه با نسخه 4 تغییر یافته است ، فهرست کردم. اکنون برنامه کاملاً می آید:
10)) {
لغو ارتباط ($ پرونده)؛
}
}
// IV - درخواست درخواست را ایجاد کنید
// قابل استفاده نیست - توسط paapi5.php انجام می شود
// V. پرسش و پاسخ آمازون
$ json = paapi5 ($ access_key، $ secret_key، $ Associate_tag، $ asin)؛
// VI. جواب پارس
if ($ json === FALSE)
بازگشت؛
}
پاسخ $ = json_decode ($ json)؛
اگر (پاسخ $ === FALSE)
بازگشت؛
}
اگر (! خالی ($ پاسخ -> خطا)) {
بازگشت؛
}
if (! $ پاسخ-> ItemsResult-> موارد [0] -> ASIN)
بازگشت؛
}
if ($ bers-> ItemsResult-> موارد [0] -> ASIN! == $ asin) {
بازگشت؛
}
$ ama_title = $ پاسخ-> ItemsResult-> موارد [0] -> ArticleInfo-> عنوان-> DisplayValue؛
$ ama_medium = $ پاسخ-> ItemsResult-> موارد [0] -> تصاویر-> اولیه-> متوسط؛
$ ama_page_url = $ پاسخ-> ItemsResult-> موارد [0] -> جزئیاتPageURL؛
$ ama_preis = $ پاسخ-> آیتم ها نتیجه -> موارد [0] -> پیشنهادات-> لیست ها [0] -> قیمت-> نمایش مقدار؛
if (! $ خالی (پاسخ $) - آیتم ها نتیجه>> موارد [0] -> ArticleInfo-> ویژگی ها-> DisplayValues)) {
$ ama_feature = &;&;؛
foreach ($ پاسخ-> ItemsResult-> موارد [0] -> ArticleInfo-> ویژگی ها-> نمایشValues به عنوان $ ویژگی) {
$ ama_feature. = &;- &;. $ feature. &;
&;؛
}؛
$ ama_feature. = &;
&;؛
$ ama_beschreibung = $ ama_feature؛
} دیگه
$ ama_beschreibung = "http://blog.helmutkarger.de/"؛
}
// VII. گرفتن عکس
$ mediumImg = $ cachefolder. "/". $ asin. ". jpg"؛
$ ch = curl_init ($ ama_medium-> URL)؛
$ targetfile = fopen ($ mediumImg ، "w")؛
curl_setopt ($ ch ، CURLOPT_FILE ، پرونده هدف)؛
curl_setopt ($ ch ، CURLOPT_TIMEOUT ، 600)؛
curl_exec ($ CH)؛
fclose ($ فایل مورد نظر)؛
// VIII. ایجاد کد HTML
سوئیچ (قالب $) {
مورد "Broadbox":
$ a = &;&;؛
$ a. = &;
عرض. "http://blog.helmutkarger.de/" height = "http://blog.helmutkarger.de/". $ ama_medium-> قد. "http: // blog. helmutkarger.de/ "border =" 0 "> &;؛
$ a. = &;&;؛
$ a. = &;&;؛
$ a. = &;&;؛
$ a. = &;&;. $ ama_title. &;&;؛
$ a. = &;
&;؛
$ a. = &; قیمت: &;. $ ama_preis. &;
&;؛
$ a. = &;&;. $ ama_beschreibung. &;&;؛
$ a. = &;&;؛
$ a. = &;&;؛
$ a. = &;&;؛
شکستن؛
مورد "smallbox":
شکستن؛
مورد "پیوند":
$ a = &;&;؛
$ a. = &;&;؛
$ a. = &;&;؛
شکستن؛
به طور پیش فرض:
$ A = "http://blog.helmutkarger.de/"؛
}
// IX. ارسال HTML
هدر ("نوع-محتوا: text / html؛ charset = UTF-8")؛
echo $ a؛
؟>
اگر هنوز کمی از کد برنامه احساس ناراحتی می کنید ، من قطعاً توصیه می کنم به قسمت 2 این مجموعه مقاله نگاهی بیندازید. این هنوز در مورد PA-API 4 است ، اما برنامه PHP پروکسی آمازون با جزئیات بیشتر توضیح داده شده است. از این مقاله ، همچنین می خواهم تکرار کنم که برنامه پروکسی آمازون ساختاری نسبتاً ساده است که کار می کند ، اما همچنین به دنبال پیشرفت است. به عنوان مثال ، پیشرفت ها ، از طریق برچسب گذاری تبلیغاتی ، دکمه خرید ، رسیدگی به خطا بهتر ، ورود به سیستم ، گزارش هنگامی که دیگر محصولات آمازون در دسترس نیستند ، یا ذخیره سازی. پتانسیل های زیادی وجود دارد.
و چه چیز دیگری؟
بیایید امیدوار باشیم که Amazon Product Advertising API 5.0 مدتی است که وجود داشته باشد و به زودی چنین تغییر عمده ای دوباره توسط آمازون ایجاد نخواهد شد. حکایتی از طرف طرف: Amazon Partners (Associates) که به درآمد خود در Amazon Partnerset نگاه می کنند ، هنوز هم در ژانویه سال 2020 عنوان را دریافت می کنند: جدید: افزونه سازنده لینک و پیوند مربوطه هرکسی که روی Amazon Associates Link Builder کلیک کند ، این یادداشت را دریافت می کند: اخطار: افزونه سازنده Link Amazon Associate Link در تاریخ 9 مارس 2020 قطع خواهد شد. این احتمالاً تلاش اول آمازون را برای ارائه یک افزونه وردپرس برای لینک های محصول خود به پایان می رساند. بنابراین شرم آور نیست ، این قسمت از نظر محافظت از داده ها بسیار سؤال برانگیز بود و اکنون ظاهراً قدم به سوی PA-API 5.0 نگذاشته است. مانند بسیاری دیگر از افزونه های وردپرس ، که این هدف را دنبال کرده اند ، نیز چنین نیست. فکر می کنم خیلی دور از پنجره خم نشده ام با این پیش بینی که پس از خاموش شدن PA-API 4 خاموش ، هیچ افزونه تبلیغاتی رایگان آمازون وجود نخواهد داشت که همچنین مطابق با GDPR باشد. کافی است. تمام چیزهایی که باقی مانده این است که یک افزونه مربوطه را بخرید و یا خودم برنامه نویسی کنم - من به شما نشان دادم که چگونه می توانید در این مجموعه مقاله انجام دهید.