เนื่องจากผมได้เข้ามาสิงอยู่ในบอร์ดนี้ได้ระยะนึงแล้ว (ราวๆ ปีนึงครับ)
แต่ก็ยอมรับตรงๆเลยครับว่าไม่ค่อยได้แชร์หรือช่วยเหลือเพื่อนๆสักเท่าไหร่ เพราะผมเองเป็นคนที่ไม่ค่อยรู้เรื่อง โปรแกรมหรือเทคนิคเกี่ยวกับ SEO มากสักเท่าไรนัก แต่วันนี้ผมคิดว่า ในเมื่อเราได้ศึกษาจนมีความรู้บ้าง เล็กๆ น้อยๆ ในระดับนึง และได้รับผลประโยชน์ จากสิ่งที่ได้เรียนรู้ไปบ้างแล้ว ก็เลยถึงเวลาที่จะออกมาแชร์ความรู้หรือ อะไรที่ดีๆ บ้างแล้วล่ะครับ และวันนี้ผมมีบทความ ที่เหมาะสำหรับผุ้ที่สนใจอยากศึกษา เทคนิคและวิธีการใช้งาน API ของ Amazon.com แบบเล็กๆน้อยๆ มาให้เพื่อนๆในบอร์ดได้ศึกษากันครับ
วิธีการดึง API ในรูปแบบ text/xml ของ Amazon มาใช้ ก่อนอื่นต้องเข้าใจกระบวนการคร่าวๆของมันก่อนครับ ว่ามันก็คือ ลิ้งของ RSS Feed ที่เราเห็นๆกันนั่นแหล่ะครับ
เพียงแต่เรามาทำความเข้าใจกันครับว่าแต่ละแอตทริบิ้วต์ มันทำงานอย่างไร ใช้งานอย่างไร และเราจะเขียน REST ด้วย
.xslt เพื่อทำเป็น stylesheet ก่อนการแสดงผล ให้กับมันได้อย่างไร ซึ่งลิ้งที่ว่านี้ มันจะไม่ออกมาเป็น RSS Feed
อย่างเดียวเท่านั้นครับ มันเปลี่ยนแปลงวิธีการดึงข้อมูลได้เยอะแยะไปหมด แต่ที่สะดวกและง่ายสำหรับ คอ PHP
ก็น่าจะเป็นการใช้งานร่วมกับ XML แล้วแปลงเป็น RSS Feed นั่นเองครับ
หลักการของมันมีอยู่ดังนี้ครับThe topics we'll be covering are:
1. Getting Associates tag and Access key ID. **สมัครทั้งสองอย่างก่อนครับ
2. Formulating your REST queries. ** สร้าง REST เพื่อดึงข้อมูล [อธิบายข้างล่าง]
3. Using your REST queries with PHP. ** ใช้ PHP ดึง REST มาใช้งาน [อธิบายข้างล่าง]
4. Converting XML to PHP. **เปลี่ยน XML เป็น PHP [อธิบายข้างล่าง]
ขั้นตอนแรกก็สมัคร amazon web services เพื่อให้ได้เลข API มาใช้งาน และสมัคร Associate Tag เพื่อเป็น
Refer ของเราครับ วิธีการขอผ่านนะครับ คิดว่าคงมีแล้ว
ขั้นตอนที่สองทำความเข้าใจกับ แอตทริบิวต์ต่างๆ ของ REST เพื่อที่จะได้สร้างลิ้งสำหรับดึง API ออกมาได้
ตัวอย่าง: ข้อมูล แอตทริบิวต์ ของ API, REST แต่ละชนิด ตามไปอ่านได้ใน
http://docs.amazonwebservices....WSEcommerceService/2005-03-23/ http://xml-us.amznxslt.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&AssociateTag=XXXXXX-20&Operation=ItemSearch&Keywords=XXXXXXXX&ResponseGroup=Medium&SearchIndex=Blended&Catalog=Amazon.com&SortBy=salesrank&Style=http://khomtien.info/services/amazon.xsl&ContentType=text/xml
จับ REST มาแยกแต่ละส่วนจะได้http://xml-us.amznxslt.com/onc...ml?Service=AWSECommerceService ส่วนนี้เป็นส่วนแจ้ง services ว่าใช้ AWSECommerceService ของ xml-us.amznxslt.com
US - United States -------------------------- ใช้
http://ecs.amazonaws.com/onca/...ml?Service=AWSECommerceService UK - United Kingdom -------------------------- ใช้
http://ecs.amazonaws.co.uk/onc...ml?Service=AWSECommerceService DE - Germany --------------------------- ใช้
http://ecs.amazonaws.de/onca/xml?Service=AWSECommerceService JP - Japan --------------------------- ใช้
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService FR - France --------------------------- ใช้
http://ecs.amazonaws.fr/onca/xml?Service=AWSECommerceService CA - Canada --------------------------- ใช้
http://ecs.amazonaws.ca/onca/xml?Service=AWSECommerceService &AWSAccessKeyId=[ใส่เลข API Access Key ID]ส่วนนี้ใส่ API id ที่สมัครไปครับ
&AssociateTag=[ใส่ Associate TAG ID]ส่วนนี้ใส่ Refer ของเราลงไปครับ *xxxxxx-20
&Operation=ItemSearchส่วนโอเปอร์เพื่อแจ้ง API ว่าเรากำลังจะ Search Item ออกมานะ ซึ่งมีอยู่ด้วยกันหลายวิธีครับ
&Keywords=[xxxxxx]ใส่ keyword เพื่อที่จะให้ดึงสินค้าออกมาได้ตาม keyword ครับ
&ResponseGroup=Mediumส่วนนี้มีให้เลือกใช้เยอะมากครับ เราสามารถดึงข้อมูลออกมาได้หลายรูปแบบ แต่รูปแบบที่พอเหมาะพอดีกับ
RSS Feed ก็จะเป็น Medium ครับซึ่งก็จะมี img, title, description, link มาให้ครับ
&SearchIndex=Blendedตรงนี้เป็นการเลือก Category ของสินค้าครับ ใน US จะมีสินค้าอยู่ทั้งหมด 30 Category ใช้ Case Sensitive ครับ
1.Books
2.Music
3.DigitalMusic
4.Classical
5.DVD
6.VHS
7.Apparel
8.Toys
9.Baby
10.PCHardware
11.VideoGames
12.Electronics
13.Photo
14.Software
15.Tools
16.OfficeProducts
17.Magazines
18.SportingGoods
19.OutdoorLiving
20.Kitchen
21.Jewelry
22.Beauty
23.GourmetFood
24.MusicalInstruments
25.HealthPersonalCare
26.PetSupplies
27.Automotive
28.Video
29.Wireless
30.Blended
&Catalog=Amazon.comตรงนี้เป็นการเลือกสินค้าจาก amazon หรือ partner ครับ
&SortBy=salesrankตัวนี้เป็นการเลือกเรียงลำดับสินค้าก่อน - หลังครับ มีอยู่ 5 - 6 แบบแล้วแต่ Category ด้วย
&Style=http://khomtien.info/services/amazon.xslอันนี้แหล่ะครับ คือตัว Services Template ที่ผมเคยพูดไว้ในหัวข้อ ขายสินค้าของผม ซึ่งต้องใช้ไฟล์ .xslt
ไปใส่ไว้ในเว็บของเราเพื่อที่จะให้ข้อมูลที่เราดึงออกมา มีรูปร่าง หน้าตา ดั่งที่เรากำหนดครับ
&
ContentType=text/xmlอันนี้เป็นตัวแจ้งให้รู้ว่า ข้อมูลที่ดึงออกมาเป็น text/xml
ซึ่งถ้าแยกกันเป็นสองส่วน ก็คือ REST สำหรับดึงข้อมูลจาก API และ Stylesheet สำหรับ รูปร่างหน้าตา
ข้อมูลที่ดึงออกมา
REST :http://xml-us.amznxslt.com/onc...mazon.com&SortBy=salesrank
&.XSLT StylesheetStyle=http://khomtien.info/services/amazon.xsl&ContentType=text/xml
ซึ่งแต่ละ อันสามารถเอาไปรันดูผลได้ที่ Browser ถ้าใส่ API key,Associate ID และ KEYWORD แล้ว
ขั้นตอนที่ 3เมื่อเอามารวมกันแล้ว ก็จะได้ลิ้งที่เป็น .XML สามารถเอามาทำ RSS Feed ได้ดังนี้
http://xml-us.amznxslt.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&AssociateTag=XXXXXX-20&Operation=ItemSearch&Keywords=XXXXXXXX&ResponseGroup=Medium&SearchIndex=Blended&Catalog=Amazon.com&SortBy=salesrank&Style=http://khomtien.info/services/amazon.xsl&ContentType=text/xml
ขั้นตอนที่ 4ใช้ PHP ดึง REST มาใช้งาน ตรงนี้ถ้าจะให้เข้าใจได้ง่ายๆ ก็คือ การดึง RSS Feed ที่เป็น .xml
ลงมาใส่ใน page ที่เป็น php ของเรานั่งเองครับ ผมใช้ magpierss เป็นตัวดึงครับใช้งานได้ง่ายด
ีและเป็น module ที่อยู่ภายนอกไม่เกะกะ ขวางการเขียนสคริปครับ
เรื่อง API ของ amazon ก็มีเท่านี้ครับ คร่าวๆ ถ้าจะเอารายละเอียดของ REST ต่างๆ ต้องเข้าไปดูได้ที่
www.aswzone.com ครับผม
:
ตัวอย่างโค้ด ทีใ่ช้ Magpierss ดึง rssfeed มาใช้งานนะครับ<?php
require_once("config.php"); // <--- กำหนดค่าของ API Access Key ID, Associate Tag ID, Keywords
define('MAGPIE_DIR', './magpierss/');
define('MAGPIE_CACHE_DIR', './magpierss/cache');
define('MAGPIE_FETCH_TIME_OUT', 30);
define('MAGPIE_CACHE_ON', 0);
require_once(MAGPIE_DIR.'rss_fetch.inc');
error_reporting(E_ERROR);
$rss = fetch_rss("http://xml-us.amznxslt.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=1BZ8XEWYCAHTWCV8J902&AssociateTag=$amazonid&Operation=ItemSearch&Keywords=$keywords&ResponseGroup=Medium&SearchIndex=$s_category&Catalog=Amazon.com&SortBy=+salesrank&Style=http://khomtien.info/services/amazon.xsl&ContentType=text/xml");
if ( $rss ) {
$ii= 0;
foreach ($rss->items as $item) {
if($ii++ >= 5) break;
$href = $item['link'];
$title = $item['title'];
$desc = $item['description'];
echo "$title <br /> $desc ";
}
}
?>
พอทำได้ตามนี้ เราก็สามารถ เขียน Stylesheet ได้ตรงตามใจ
และดึงสินค้ามาแสดงได้อย่างที่ใจเราต้องการเลยทีเดียวครับ
ตัวอย่าง : stylesheet .XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aws="http://webservices.amazon.com/AWSECommerceService/2005-10-05" exclude-result-prefixes="aws">
<xsl:output method="xml"/>
<xsl:template match="/">
<rss version="2.0">
<channel>
<title>Amazon.com: <xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Power']/@Value"/><xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Keywords']/@Value"/> in <xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Catalog']/@Value"/></title>
<link>http://www.amazon.com</link>
<description>A feed of <xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Catalog']/@Value"/> with the keyword(s) '<xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Power']/@Value"/><xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'Keywords']/@Value"/>' found on Amazon.com, sorted by <xsl:value-of select="aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'SortBy']/@Value"/>, and created with the Rss Feeds Generator (http://kong-tp-demo.startdirectory-trix.info).</description>
<language>en-us</language>
<xsl:apply-templates/>
</channel>
</rss>
</xsl:template>
<xsl:template match="aws:RequestId"/>
<xsl:template match="aws:RequestProcessingTime"/>
<xsl:template match="aws:Items">
<xsl:apply-templates select="aws:Item"/>
</xsl:template>
<xsl:template match="aws:Item">
<item>
<title><xsl:value-of select="aws:ItemAttributes/aws:Title"/></title>
<link>http://www.amazon.com/exec/obidos/ASIN/<xsl:value-of select="aws:ASIN"/>/ref=nosim/<xsl:value-of select="//aws:ItemSearchResponse/aws:OperationRequest/aws:Arguments/aws:Argument[@Name = 'AssociateTag']/@Value"/></link>
<description>
<xsl:if test="aws:EditorialReviews/aws:EditorialReview/aws:Content">
<xsl:value-of select="aws:EditorialReviews/aws:EditorialReview/aws:Content"/>
</xsl:if>
<simage>
<xsl:if test="aws:SmallImage/aws:URL">
<img src="<xsl:value-of select="aws:SmallImage/aws:URL"/>" width="<xsl:value-of select="aws:SmallImage/aws:Width"/>" height="<xsl:value-of select="aws:SmallImage/aws:Height"/>" alt="<xsl:value-of select="aws:ItemAttributes/aws:Title"/>" style="border:solid 0px;" />
</xsl:if>
</simage>
<mimage>
<xsl:if test="aws:MediumImage/aws:URL">
<img src="<xsl:value-of select="aws:MediumImage/aws:URL"/>" width="<xsl:value-of select="aws:MediumImage/aws:Width"/>" height="<xsl:value-of select="aws:MediumImage/aws:Height"/>" alt="<xsl:value-of select="aws:ASIN"/>" hspace="5" vspace="5" align="left" style="border:solid 0px;" />
</xsl:if>
</mimage>
<imgurl>
<xsl:if test="aws:LargeImage/aws:URL">
<xsl:value-of select="aws:LargeImage/aws:URL"/>
</xsl:if>
</imgurl>
<b>Company:</b>A^ <xsl:value-of select="aws:ItemAttributes/aws:Manufacturer"/>A^
<xsl:if test="aws:ItemAttributes/aws:PublicationDate">
(<xsl:value-of select="aws:ItemAttributes/aws:PublicationDate"/>)
</xsl:if>
<xsl:if test="aws:ItemAttributes/aws:ReleaseDate">
(<xsl:value-of select="aws:ItemAttributes/aws:ReleaseDate"/>)
</xsl:if>
<br />
<xsl:if test="aws:ItemAttributes/aws:ISBN">
<b>ISBN:</b>A^ <xsl:value-of select="aws:ItemAttributes/aws:ISBN"/><br />
</xsl:if>
<b>List Price:</b>A^ <xsl:value-of select="aws:ItemAttributes/aws:ListPrice/aws:FormattedPrice"/><br />
<b>Amazon Price:</b>A^ <xsl:value-of select="aws:OfferSummary/aws:LowestNewPrice/aws:FormattedPrice"/><br />
<xsl:if test="aws:OfferSummary/aws:LowestUsedPrice/aws:FormattedPrice">
<b>Used Price:</b>A^ <xsl:value-of select="aws:OfferSummary/aws:LowestUsedPrice/aws:FormattedPrice"/><br />
</xsl:if>
</description>
</item>
</xsl:template>
</xsl:stylesheet>
ขอให้พัฒนาและทำเงินจาก Amazon Web Services กันได้เยอะๆนะครับ