วันพฤหัสบดีที่ ๑๙ เมษายน พ.ศ. ๒๕๕๐

Hack#40 GooglePeople

คนที่ต้องการ GooglePeople คือคนที่โชคดีที่สุดในโลก

บางครั้งเนื้อหาในเว็บไซต์ต่างๆนั้นก็ยากที่จะจำแนกเนื้อและน้ำออกจากกัน และก็ยากที่จะจำแนกข้อมูลเกี่ยวกับบุคคลหนึ่งๆออกจากสิ่งอื่นๆ นั่นคือที่มาของ GooglePeople (http://24.60.188.10:8080/demos/GooglePeople) โดย GooglePeople นั้นจะรับคำสืบค้นในลักษณะ “Who Is” หรือ “Who Was” (เป็นต้นว่า Who was the first man on the moon?” หรือ “Who was the fifth president of the United States?” แล้วก็แสดงรายชื่อของผู้ที่น่าจะได้เป็นออกมา ซึ่ง GooglePeople นั้นทำงานได้ดีกับบางคำถามเท่านั้น แต่สำหรับบางคำถามก็ออกทุ่งออกทะเลไปเลยเหมือนกัน

วิธีใช้ GooglePeople

การใช้งาน GooglePeople นั้นทำได้ง่ายๆ โดยเพียงแต่กรอกคำสืบค้นประเภท “Who Is” หรือ “Who Was” ลงไปเท่านั้น GooglePeople จะคิดอยู่ประมาณสองสามนาทีแล้วจึงคืนคำตอบมาให้ โดยจะเป็นรายชื่อของผู้ที่น่าจะเป็นคำตอบที่ถูกต้องของคำถามที่กรอกลงไป โดยจะให้ชื่อที่น่าจะใช่มากที่สุดอยู่ด้านบน และชื่อที่น่าจะใช่รองลงมาไล่ตามลำดับลงไป พร้อมทั้งให้คะแนน (rated) ความสัมพันธ์ด้วย

หากคลิกที่ชื่อของผู้ที่น่าจะเป็นคำตอบ จะเป็นการคิวรีที่เป็นการผนวกการสืบค้นในตอนต้นกับชื่อที่คลิกอีกทีหนึ่ง

เคล็ดลับในการใช้งาน GooglePeople

ผู้เขียนพบว่า GooglePeople ทำงานได้ดีมากกับบางคำถาม เช่น Who was the first African American woman in space? จะได้คำตอบที่ถูกต้องแม่นยำมาก แต่บางคำถามก็เล่นเอา GooglePeople งงงวยได้เหมือนกัน

หนังสือและผู้แต่ง ดูเหมือนว่า GooglePeople จะมีปัญหากับการระบุชื่อผู้แต่งหนังสือนิยาย เป็นต้นว่า หากใส่คำถาม Who is the author of “Galahad at Blandings” กรณีนี้ GooglePeople จะไม่มั่นใจในการให้คำตอบเลย แต่จะเสนอว่าน่าจะเป็น Bertie Wooster ซึ่ง Bertie ก็ใกล้เคียง แต่ว่าไม่ถูกต้อง เขาเป็นเพียงตัวละครที่สร้างขึ้นมาโดย P.G. Wodehouse ซึ่งเป็นผู้เขียนเรื่องนี้ต่างหาก อย่างไรก็ตาม GooglePeople กลับตอบได้ด้วยความมั่นใจว่า Mark Twain คือผู้ประพันธ์เรื่อง Huckleberry Finn

ตัวเลข บางทีการใช้ตัวเลขเช่น 1st แทนที่จะเป็นตัวอักษร first นั้นก็ให้ผลลัพธ์ที่ต่างกัน ฉะนั้นหากจะถามเกี่ยวกับ the first person to do something หรือ the 1st person to do something อาจจะให้ผลไม่ตรงกัน ดังนั้นจึงควรที่จะลองทั้งสองแบบไปเลย

คิดคำถามให้ดี อย่าได้ถามคำถามที่เป็นที่หาข้อสรุปไม่ได้ หากจะจริงจังกับคำตอบ เป็นต้นว่า หากจะถามว่า Who’s the most popular singer? หรือ Who is the smartest person in the world? คุณอาจได้คำตอบที่แบบเพี้ยนๆได้

ตระหนักไว้เมื่อใช้ GooglePeople

แม้ว่า GooglePeople จะดูเป็นของเล่น แต่ว่ามันก็เป็นเครื่องมือที่สะดวกในการตอบคำถามที่อ้างอิงได้ ซึ่งแน่นอนว่าคุณควรจะต้องตรวจสอบผลลัพธ์ที่คืนมาทั้งหมดซ้ำบนเว็บอีกครั้งหนึ่ง และที่สำคัญคือต้องระลึกเสมอว่า แม้ข้อมูลนั้นจะอยู่บนเว็บ ก็ใช่ว่าจะเป็นสิ่งที่เชื่อถือได้เสมอไป

Hack#39 Google คิดอะไรอยู่

Google คิดอะไรเกี่ยวกับ คุณ เพื่อนของคุณ คนรอบ ๆ ตัวคุณ หรือแม้แต่หนังเรื่องโปรดของคุณ

คุณเคยสงสัยบ้างไหมว่าผู้คนนั้นคิดอย่างไรกับเมืองที่คุณอยู่ วงดนตรีที่คุณชอบ อาหารว่างที่คุณโปรดปราน หรือแม้แต่คิดอย่างไรเกี่ยวกับตัวคุณ ที่เว็บไซต์ http://www.googlism.com อาจจะมีคำตอบให้ก็เป็นได้

หน้าตาของเว็บ

หน้าตาของ googlism.com นั้นแสนจะเรียบง่าย เพียงแต่ใส่คำถามเข้าไป แล้วก็เลือกกดปุ่มเพื่อระบุว่าสิ่งที่กำลังมองหานั้นอยู่ในคำถามประเภท ใคร อะไร ที่ไหน หรือเมื่อไร นอกจากนั้นคุณอาจจะเลือกดูที่แถบว่า คนอื่นๆเขาสืบค้นเรื่องอะไรกันบ้าง หรือไม่ก็หัวข้ออะไรที่เป็นที่นิยมกัน อย่างไรก็ตาม มีคำเตือนอยู่ว่าบางสิ่งบางอย่างใน googlism.com นั้นไม่เหมาะในการเอาไปใช้งานจริงจังนัก

สิ่งที่คุณได้กลับมา

Googlism นั้นก็จะตอบกลับด้วยสิ่งต่างๆที่ Google เชื่อเป็นข้อๆ โดยอิงตามคำถามที่ถามมา ไม่ว่าจะเป็นบุคคล สถานที่ สิ่งของ หรือแม้แต่ช่วงหนึ่งของเวลา เช่น หากสืบค้นด้วยคำว่า Pearl และ “What” จะได้คำตอบกลับเรียงกันดังนี้

Pearl is a fairly straightforward

Pearl is aesthetically pleasing

Pearl is just plain fun

และผลตอบกลับซึ่งน่าขบขัน หากมองหาด้วยคำว่า Steve Jobs และ “Who” คือ

steve jobs is my new idol

steve jobs is at it again

steve jobs is apple’s focus group

ถ้าหากต้องการระบุว่าข้อความเหล่านั้นมาจากเว็บไหน ทำได้ง่ายๆด้วยการก๊อบปี้แล้ววางในกรอบสืบค้นของ Google เช่น ตัวอย่างนี้มาจากบทความที่ชื่อว่า “Innovation: How Apple does it” ที่ http://www.gulker.com/ra/appleinnovation.html

การใช้งานในทางปฏิบัติ

โดยรวมๆแล้ว การแฮกหัวข้อนี้ ดูจะเหมาะกับการเล่นสนุกๆเสียมากกว่า เพราะเป็นการนำคำกล่าวจากที่ต่างๆมารวมกันเป็นข้อความไร้สาระข้อความหนึ่งนั่นเอง

ถึงแม้นั่นจะเป็นส่วนใหญ่ของการแฮกในหัวข้อนี้ แต่ว่า Googlism ยังสามารถนำไปใช้เป็นแหล่งอ้างอิงอย่างรวดเร็วได้ด้วย คุณสามารถหาคำตอบสำหรับคำถามที่ไม่ซับซ้อนได้จากที่นี่ หรือเพียงแต่ถาม Googlism ด้วยประโยคที่สามารถลงท้ายด้วยคำว่า is ได้ (แต่ไม่จำเป็นต้องใส่ is ก็ได้) เป็นต้นว่า หากต้องการหาเมืองหลวงของรัฐเวอร์จิเนีย ให้ถามด้วยคำว่า capital of Virginia หากต้องการรู้ว่าทำไมท้องฟ้าจึงมีสีฟ้า ให้ลองคำว่า The reason the sky is blue แต่บางทีแฮกนี้ก็ไม่ค่อยได้เรื่องนัก เช่น หากลองใส่คำว่า the oldest person in the world คุณก็จะได้คำตอบที่ไปคนละเรื่องเลยทีเดียว ดังนั้นคุณต้องเข้าไปเยี่ยมเว็บไซต์ที่เป็นที่มาของผลลัพธ์ดังกล่าว เพื่อหาคำตอบที่เข้ากับที่คุณต้องการมากที่สุด

การขยายการใช้งาน

แอพพลิเคชันตัวนี้ให้ความสนุกสนานได้มากมาย แถมยังอาจขยายขอบเขตการใช้งานได้ด้วย โดยเคล็ดลับก็คือการจะดูว่าผู้สร้างเว็บเพจนั้น สร้างคำกล่าวทั้งหลายได้อย่างไร

หากจะหาคำอธิบายชื่อย่อ หลายๆคนมักจะใช้คำว่า “stands for” ดังนั้น คุณจึงอาจผสมผสานใช้คำที่ต้องการหา และคำว่า “stands for” ใน Googlism ได้ อย่างเช่น อาจระบุในการสืบค้นว่า “SETI stands for” หรือ “DDR stands for” และคุณจะได้เห็นว่าผู้เขียนหมายถึงอะไร

เมื่อกล่าวถึงสัตว์ พืช หรือแม้แต่ก้อนหิน มักจะใช้วลี “are found” เพื่อที่จะหาผลลัพธ์จาก Googlism ว่าสิ่งที่กล่าวถึงนั้นอยู่ที่ใด ลองใช้วลี sapphires are found หรือ jaguars are found ในการสืบค้นดู แล้วสังเกตว่าคุณได้ผลลัพธ์ออกมาเช่นไร

ลองนึกถึงวลีที่ใช้กันทั่วๆไป แล้วลองทดสอบดูใน Googlism และดูว่าแต่ละวลีต่างๆจะให้ผลลัพธ์ออกมาเท่าไร หลังจากทดลองแล้วคุณอาจจะเข้าใจด้วยตัวเองได้ว่า เครื่องมือ Googlism นั้นคืออะไร

Hack#38 การทำให้ URL ของ Google ดูง่ายขึ้น

ถ้าหากว่า URL ของ Google Group นั้นรุงรังเกินไป คุณสามารถทำให้มันกระชับขึ้นได้ด้วย Google Groups Simplifier

Google Group (Hack #30) นั้นอาจจะให้ผลเป็น URL ในรูปแบบที่ไม่น่าพึงใจในการใช้งานหรือนำไปโพสต์ต่อสักเท่าไหร่นัก อย่างเช่น บางข้อความอาจได้ URL กลับคืนมาเป็น

http://groups.google.com/groups?q=O%27reilly+%22mac+os+x%22&hl=en&lr=&ie=UTF-8&oe=utf-8&scoring=d

นี่เป็นตัวอย่าง URL ที่ยากต่อการเก็บและอ้างอิงพอสมควร ไม่ต้องพูดถึงการจะส่งอีเมล์ไปให้เพื่อนๆเลยด้วยซ้ำ

จึงได้มี Google Groups Simplifier (http://www.bleb.org/google/) ซึ่งพัฒนาโดย Andrew Fleg ที่สามารถบีบให้ Groups URL นั้นสั้นลงมาก แต่ยังใช้งานได้ดังเดิม

นับว่าเป็นเครื่องมือเล็กๆที่มีประโยชน์มากเลยทีเดียว วิธีการใช้งานคือ ให้คุณก็อบปี้ URL ที่ต้องการทำให้สั้นลง แล้วแปะลงในฟอร์มที่เว็บ Google Groups Simplifier ก็เป็นอันเสร็จเรียบร้อย ซึ่ง URL ในตัวอย่างข้างต้นจะกลายเป็น

http://groups.google.com/groups?selm=ujaotqldn50o04%40corp.supernews.com

มันทำงานได้อย่างไร ? Google Group Simplifier นั้นจะตัดทุกอย่างออก เว้นไว้แต่ส่วนของ &selm= ซึ่งดูแล้วก็ไม่ใช่เรื่องยาก แต่เนื่องจาก URL บางอันนั้นยาวมาก กระทั่งจะสะดวกกว่าถ้าหากเราใช้วิธีอัตโนมัติทำงานแทน และเป็นการป้องกันการตัด URL เสียสั้นจนกระทั่งส่วนสำคัญหายไป

ถ้าหากว่าคุณใช้งานเครื่องมือนี้ประจำแล้ว เครื่องมือ Simplifier ตัวนี้ยังมีตัวเลือกให้ทำ bookmarklet จากหน้าแรกอีกด้วย

ทางเลือกอื่นในการทำ URL ให้สั้นลง

Google Groups Simplifier นั้นเป็นเครื่องมือที่สะดวก เพราะว่ามันลด URL ให้สั้นลงได้ และยังคงบอกได้อยู่ว่า URL นั้นมาจากไหน เพียงแค่การมองผ่านครั้งเดียวคุณก็จะรู้ว่า URL นั้นมาจาก Google Groups อย่างไม่ต้องสงสัย แต่บางทีคุณอาจจะเห็นว่า URL ที่ผ่านเครื่องมือนี้แล้วมันก็ยังยาวเกินไปอยู่ดี น่าจะสั้นกว่านี้ได้อีก ในกรณีเช่นนี้คุณต้องใช้เครื่องมือซึ่งเป็นบริการพิเศษที่ทำ URL ให้สั้นลงได้อย่างมากๆ

โดยเครื่องมือทำให้ URL ให้สั้นลงนี้ จะสร้าง unique code สำหรับแต่ละ URL ทำให้สามารถลดความยาวของ URL ที่ยาวมากๆให้เหลือสั้นนิดเดียวได้ ตัวอย่างเช่น URL ของ Yahoo! News ซึ่งปกติค่อนข้างยาวมาก แต่หากใช้ tinyURL แล้ว URL ดังกล่าวจะถูกย่อเหลือเพียง http://tinyurl.com/2ph8 เท่านั้น (หมายเหตุ URL เหล่านี้ไม่ถือว่าเป็นของส่วนตัว ดังนั้นต้องใช้งานให้ถูกต้องด้วย โดยจะมี tinyURL whacking ที่ http://marnanel.org/writing/tinyurl-whacking ซึ่งมีรายการของ tinyURLที่สร้างขึ้น และต้นตอของเว็บไซต์ที่ผู้คนส่งเข้ามาใช้บริการแสดงไว้อยู่)

  • Tip : อย่าได้ใช้เครื่องมือเหล่านี้หากว่าไม่จำเป็นจริงๆ เพราะว่ามันจะซ่อน URL อันจริงเอาไว้ ทำให้การติดตาม URL จริงๆในการค้นคว้าภายหลังทำได้ยาก แต่มันจะเป็นประโยชน์หากว่าคุณจำเป็นต้องอ้างถึงหน้าเว็บเพจที่แคชโดย Google เป็นต้นว่า URL ของ cached page ของ orielly.com จะเป็น http://216.239.39.100/search?q=cache:Tb0F_622vaYC:www.oreilly.com/+oreillyxhl=enxie=UTF-8 ซึ่งดูแล้วแม้ว่าจะไม่ยาวเท่า URL ของข้อความที่ได้จาก Google Group ก็ตาม แต่ก็ยาวพอที่จะทำให้การใส่ลงไปอีเมล์หรือการเผยแพร่ทำได้ลำบากบ้างไม่มากก็น้อย

TinyURL (http://www.tinyurl.com) นั้นจะทำให้ URL ทั้งหลายสั้นลงเหลือแค่ 23 ตัวอักษรเท่านั้น และสามารถทำ bookmarklet ได้ด้วย ดังเช่น URL ของ Google Groups ในตอนต้นของกฏการแฮกข้อนี้นั้นจะเหลือเพียงแค่ http://tinyurl.com/180q เท่านั้นเอง

MakeAShorterLink (http://www.makeashorterlink.com) จะลดขนาด URL ให้เหลือเพียงประมาณ 40 ตัวอักษรเท่านั้น โดยเมื่อคลิก จะนำพาบราวเซอร์ตรงไปยังหน้าหน้าหลักพร้อมกับรายละเอียดว่าจะส่งไปที่ไหน แล้วจากนั้นก็จะนำบราวเซอร์ไปสู่ URL เป้าหมาย ซึ่งสำหรับ MakeAShorterLink นั้นสามารถแปลง URL ของ Google Groups ข้างต้นได้เป็น http://makeashorterlink.com/?A2FD145A1

Shorl (http://www.shorl.com) นอกจากจะลงขนาด URL ให้เหลือประมาณ 35 ตัวอักษรแล้ว ยังเก็บสถิติของการคลิก (click-through) มายัง URL ที่สร้างขึ้นด้วย โดยสถิตินี้จะเข้าถึงได้เฉพาะผู้ที่เข้ามาสร้าง URL ในแบบของ Shorl เท่านั้น โดยจะได้รหัสผ่านเฉพาะในขั้นตอนนั้น Shorl ได้แปลง URL ของ Google Groups ข้างต้นให้กลายเป็น http://shorl.com/jasomykuprystu ได้ โดยมีหน้าแสดงสถิติอยู่ที่ http://shorl.com/stat.php?id=jasomykuprystuxamp;pwd=jirafryvukomuha ซึ่งสังเกตได้ว่ามีรหัสผ่าน (ส่วนที่เป็น pwd=jirafryvukomuh ) รวมอยู่ด้วย

Hack#37 การใช้ Google ผ่านอีเมล์

เข้าถึงผลการสืบค้นจาก Google ด้วย E-mail โดยแสดง 10 รายการต่อหนึ่งอีเมล์

ก่อนที่โลกนี้จะมีเครือข่ายเว็บ ได้มีอีเมล์เกิดขึ้นมาก่อนนานแล้ว และด้วย Google API ก็ได้มีอีเมล์สำหรับ Google ในชื่อ CapeMail ที่สามารถคิวรี Google ผ่านอีเมล์ได้ โดยผู้ที่สร้างขึ้นมาคือทีมงานของ Google ที่ Cape Clear (http://capescience.capeclear.com/google/) นั่นเอง การใช้งานทำได้โดยส่งอีเมล์ไปยัง google@capeclear.com ด้วยคำถามที่ต้องการค้นหา โดยระบุคำถามดังกล่าวไว้ใน subject line แล้วคุณก็จะได้รับข้อความส่งกลับมา โดยเป็นผลของการสืบค้น (search result) จำนวน 10 รายการ และตัวอย่างข้างล่างนี้เป็นผลการสืบค้นด้วยคำว่า Frankenstein

Estimated Total Results Number = 505000

URL = "http://www.nlm.nih.gov/hmd/Frankenstein/frankhome.html"

Title = "Frankenstein Exhibit Home Page"

Snippet = "Table of Contents Introduction The Birth of Frankenstein,

The Celluloid Monster. Promise and Peril, Frankenstein: The Modern

Prometheus. ... "

URL = "http://www.literature.org/authors/shelley-mary/Frankenstein/"

Title = "Online Literature Library - Mary Shelley - Frankenstein"

Snippet = "Next Back Contents Home Authors Contact, Frankenstein. Mary

Shelley. Preface; Chapter 1; Chapter 2; Chapter 3; Chapter 4;

Chapter 5; Chapter ... "

และเช่นเดียวกับ Google API คุณจะใช้ CapeMail ได้เพียง 1,000 ครั้งต่อวันเท่านั้น ถ้าหากคุณอยู่ในสถานการณ์ที่การเข้าเว็บไม่สะดวกได้เท่ากับอีเมล์ เป็นต้นว่า คุณใช้โทรศัพท์มือถือ หรือ PDA อยู่ เป็นต้น แฮกนี้ก็เป็นทางเลือกที่ง่ายและสะดวกในการเข้าถึงผลการสืบด้วยด้วย Google

กลเม็ดในการใช้ CapeMail

CapeMail นั้นใช้สะดวกมาก โดยการผนวกการใช้งานเข้ากับโปรแกรมส่งอีเมล์อัตโนมัติ สมมุติว่าคุณต้องการสืบค้นข้อมูลที่มีค่อนข้างน้อย คุณสามารถตั้งตารางเวลา (หรือตั้งโปรแกรมอีเมล์ หากโปรแกรมที่ใช้สามารถกำหนดเวลาส่งได้ เช่น cron เป็นต้น) ในการส่งข้อความไปยัง CapeMail วันละครั้ง เพื่อรวบรวมและจัดเก็บผลลัพธ์ที่ได้อย่างเป็นระบบ นอกจากนี้คุณอาจใช้เทคนิคการกรองอีเมล์ในการคัดอีเมล์จาก CapeMail ให้อยู่ในโฟลเดอร์เฉพาะ ซึ่งสะดวกในการทำงานแบบ offline ด้วย อย่างไรก็ตาม ต้องแน่ใจว่าผลของการสืบค้นนั้นต้องเฉพาะเจาะจงและแคบสักหน่อย ทั้งนี้เพราะว่า CapeMail จะคืนผลลัพธ์กลับมาแค่ 10 รายการต่อครั้งเท่านั้น

HACK#36 รู้จักกับ XooMLe ซึ่งเป็น Google API ในรูปของ Plain Old XML

ตอนที่ Google เปิดตัว Web API เมื่อเดือนเมษายน ค.ศ. 2002 ทุกคนเห็นตรงกันว่าเป็นสิ่งที่น่าสนใจเป็นอย่างยิ่ง แต่บางคนเห็นว่าน่าจะมีอะไรที่ดีกว่านี้ โดยตอนนั้น Google API ใช้โปรโตคอล SOAP (SOAP : Simple Object Access Protocal) ซึ่งไม่ใช่สิ่งที่ทุกคนหวังเอาไว้

SOAP มีอะไรผิดหรือ? Google ได้สร้างเครื่องมือสืบค้นที่ใหญ่ที่สุดและดีที่สุดในโลกสำหรับการบริการบนเว็บอย่างแท้จริง ดังนั้น SOAP ต้องดีด้วยใช่ไหม? อาจจะใช่! แต่หลายๆคนแย้งว่า การใช้ SOAP นั้นทำให้การเข้าถึง Google Service ยุ่งยากเกินความจำเป็น เพราะเพียงแต่ Google ใช้เทคโนโลยีที่อยู่บนฐานของ HTML ก็มีทุกอย่างที่ต้องการอยู่แล้ว แถมยังง่ายกว่าอีกด้วย ซึ่งคำกระทบกระเทียบเหล่านี้ก็ไม่ได้เลือนหายไปง่ายๆ เนื่องจาก Google เป็นที่รู้จักและใช้กันกว้างขวางก็เพราะความเรียบง่ายนั่นเอง หากแต่ตอนนี้กลายเป็นโดนตอกกลับเสียแล้วว่ากำลังเสนอ Service ที่เข้าถึงยากสำหรับนักพัฒนา

มีการโต้เถียงกันว่า SOAP นั้นไม่ดี และสิ่งที่ Google ต้องการจริงๆคือ REST (Representational State Transfer) ต่างหาก REST อันเป็นต้นแบบของ web service ที่ใช้โปรโตคอลและเทคโนโลยีต่างๆที่มีอยู่แล้ว เป็นต้นว่า HTTP GET request, URI หรือ XML ในการตระเตรียมการทำธุรกรรมต่างๆที่เกี่ยวข้องกับ web service ทั้งนี้กลุ่มผู้โต้แย้งเห็นว่า REST ทำให้การทำงานง่ายกว่ากันเยอะ ในขณะที่ได้ผลลัพธ์ในระดับเดียวกัน

ผู้สนับสนุน REST เห็นว่า Google น่าจะทำให้ API ใช้งานได้ง่ายๆโดยเพียงผ่านการ request URI เท่านั้น รวมไปถึงการค้นหาด้วยพารามิเตอร์ที่เป็นอักขระ (query string-based parameter) อย่างคีย์เวิร์ดที่ใช้ในการสืบค้นและการเข้ารหัสผลลัพธ์ โดยผลที่ได้ควรจะเป็นเอกสาร XML ง่ายๆ ที่ครอบคลุมการแสดงผลลัพธ์ชนิดต่างๆได้รวมไปถึง error message ด้วย

หลังจากได้ลองเล่น Google API ดูระยะหนึ่ง ผู้เขียนก็ได้ประสบการณ์รวมถึงจับทิศทางได้พอควร อย่างน้อยก็ในเรื่องวิธีการทำงานต่างๆระหว่างผู้เขียนกับ WSDL รวมทั้งเกร็ดเล็กเกร็ดน้อยในการใช้งาน Google ด้วย นอกจากนี้ผู้เขียนได้อ่านคำแนะนำและข้อเสนอที่ว่า Google ควรจะทำอย่างไรบ้าง รวมถึงสิ่งที่ได้เริ่มลงมือทำไปแล้ว ซึ่งผลก็คือ XooMLe (http://www.dentedreality.com.au/xoomle/) นั่นเอง

ลำดับแรกคือ การสร้างสถาปัตยกรรมที่มั่นคงเพื่อการเข้าถึง Google API ซึ่งผู้เขียนใช้ภาษาสคริปต์ที่โด่งดังและใช้กันแพร่หลายอย่าง PHP ซึ่งทำอย่างง่าย ๆโดยเพียงแค่ไปหยิบคลาสที่มีอยู่แล้วมาใช้งาน ซึ่งก็คือ NuSOAP (ชุดของ Dietrich Ayala) นั่นเอง เมื่อผู้เขียนได้มาแล้ว ขั้นตอนที่เหลือก็ไม่ยากอีกต่อไป ก็เพียงแต่เขียนฟังก์ชันเพิ่มเติมนิดหน่อย และต่อเติมฟังก์ชันที่มีอยู่บ้างเล็กน้อยเพื่อเรียกใช้ SOAP รวมทั้งการทำการคิวรี Google ด้วย และอีกส่วนก็คือการแปลงรูปแบบการตอบสนอง (respond) เพื่อให้บางอย่างชัดเจนยิ่งขึ้น

ผู้เขียนเลือกที่จะติดตั้งระบบที่รับการ request เพียง URL เดียวพร้อมกับพารามิเตอร์อีกเพียงจำนวนหนึ่งก่อน (เพราะว่าในขั้นนี้ผู้เขียนยังไม่คุ้นเคยกับการทำงานของ RESTful) ทั้งนี้ขึ้นอยู่กับว่า method ไหนจะถูกเรียกจาก Google ซึ่งสำหรับผลลัพธ์ที่ได้กลับคืนมาจะขึ้นกับชนิดของการ request ดังต่อไปนี้

Method ของ Google

ชนิดของผลลัพธ์

doGoogleSearch

เอกสาร XML (XML document) ซึ่งเป็นข้อมูลที่มีรูปแบบเป็นโครงสร้างที่แน่นอน (structured information) ที่เป็นผลลัพธ์ที่ได้จากการค้นหา

doGoogleSpellingSuggestion

ข้อความ plain text แสดงคำแนะนำการสะกดคำที่ถูกต้อง (suggested spelling correction)

doGetCachePage

โค้ด HTML ที่เป็นหน้า cached page ที่ Google ทำการ cache เอาไว้


โดย method เหล่านี้ทั้งหมดจะแสดง error message ในรูปแบบภาษา XML (XML-encoded error message) ซึ่งจะทำให้ง่ายต่อนักพัฒนาโปรแกรม ในการที่จะตัดสินใจได้ว่า request ใดๆสำเร็จ (success) หรือล้มเหลว (failure)

การตระเตรียมอินเทอร์เฟซนี้ยังต้องการการประมวลผลเล็กน้อย ก่อนที่จะคืนข้อมูลกลับมายังผู้ใช้งาน อย่างเช่นกรณีของ doGoogleSearch ผลของคำสั่งคือการ map กับ XML template แล้วคืนค่ากลับ (return) สำหรับ doSpellingSuggestion นั้นก็เพียงแต่ดึงคำแนะนำในการสะกดคำออกมาแล้วส่งค่ากลับเท่านั้น ขณะที่ doGetCachePage จะต้อง decode ผลลัพธ์ แล้วก็แยกห้าบรรทัดแรกของรหัส HTML ซึ่งเป็น google header ออกมา ด้วยวิธีนี้จะทำให้ XooMle จะส่งผลลัพธ์ให้แก่ผู้ใช้งานเท่าที่ผู้ใช้ต้องการเท่านั้น นั่นคือ เป็นส่วนแคชของหน้าเว็บเพจ (cached copy of a page) เป็นคำแนะนำในการสะกดคำ และผลของการสืบค้นที่ตรงกับคีย์เวิร์ดที่ใช้สืบค้นนั่นเอง

ผู้เขียนเลือกที่จะใช้ XML template แทนที่จะเขียนโค้ดเองล้วนๆ โดยที่
เทลมเพลตนี้จะเป็นส่วนที่กำหนดโครงสร้างของรายการผลลัพธ์ที่ได้จากการค้นหา (result set) ทั้งหมดที่ Google ส่งคืนกลับมา รวมถึงส่วนที่เป็นข้อมูลเพิ่มเติมต่างๆด้วย เช่น เวลาที่ใช้ไปในการสืบค้น, Title ของผลลัพธ์, URL ของผลลัพธ์นั้น และอาจรวมไปถึงข้อมูลอื่นๆที่ Google ได้เก็บไว้ โดย XML template นี้จะขึ้นโดยตรงกับโครงสร้างใน WSDL และข้อมูลจริงที่ Google ให้คืนกลับมา โดยจะถูก parse และบางส่วนจะถูกทำซ้ำและแก้ไขดัดแปลงตามต้องการ ดังนั้นจากเอกสาร XML เปล่าๆก็จะเต็มไปด้วยผลลัพธ์แล้วส่งต่อไปยังผู้ใช้อีกทีหนึ่ง และถ้าหากว่ามีบางสิ่งผิดพลาด error message ก็จะถูก encode ในรูปแบบของ XML template ที่แตกต่างกันออกไป แล้วส่งกลับมาแทน

ทันทีที่การค้นหาเริ่มต้นขึ้น ส่วนที่เป็นคำแนะนำในการสะกดคำ (spelling suggestion) จะถูกเพิ่มเข้าไปทันที โดยเพียงแต่เป็นการดึงคำแนะนำออกมาจาก SOAP envelop แล้วคืนออกมาเป็นตัวอักษร plain text ธรรมดาๆเท่านั้น หันไปดูในส่วนของหน้า cached page ซึ่งจะมีการดัดแปลงเล็กน้อย โดยที่ผลลัพธ์จะต้องถูกแปลงกลับเป็นตัวอักษรธรรมดา จากนั้น google header บนหน้า cached page นั้นจะถูกดึงออก เมื่อเสร็จสิ้นกระบวนการดังกล่าวแล้ว ข้อมูลทั้งหมดก็จะถูกส่งไปยังผู้ใช้อย่างต่อเนื่อง

หลังจากการโพสต์ผลที่ได้ไปยังเว็บไซต์ DentedReality ก็ปรากฏว่าไม่มีอะไรเกิดขึ้นเลย ไม่มีใครรู้จัก XooMLe ดังนั้นจึงไม่มีใครใช้มัน แต่บังเอิญผู้เขียนได้เข้าไปอ่าน Scripting News ของ Dave Winer จึงได้ลองส่งอีเมล์เกี่ยวกับ XooMLe ไปยัง Dave ในทำนองว่า Dave อาจจะสนใจใน XooMLe และหลังจากนั้นเพียงภายในห้านาทีเท่านั้น ก็มีลิงก์เชื่อมโยงไปยังผลงานของผู้เขียนบน Scripting News โดยมีการอธิบายว่าเป็นหนึ่งใน “อินเทอร์เฟซแบบ REST” และภายใน 12 ชั่วโมงเท่านั้น ก็มีคนประมาณ 700 คนเข้ามาเยี่ยมชมเว็บไซต์ และไม่หยุดอยู่แค่นั้น เช้าวันต่อมา เมื่อผู้เขียนเปิดอีเมล์ ก็ได้ข้อความจาก Paul Prescod แนะนำในส่วนอื่นๆของ RESTful อีก รวมทั้งการปรับปรุงฟังก์ชันทั่วไปเพื่อให้มันเป็น service อีกตัวหนึ่ง

หลังจากการแลกเปลี่ยนอีเมล์โดยตรงกับ Prescod และได้รับคำแนะนำรวมทั้งความเห็นจากคนอื่น ๆใน REST – discuss Yahoo ! Group (ซึ่งผู้เขียนได้สมัครเป็นสมาชิกนับตั้งแต่บัดนั้น) ผู้เขียนได้ปรับปรุง XooMLe เสียใหม่อย่างขนานใหญ่ โดยมีการเปลี่ยนแปลงดังนี้

  • เลี่ยงการใช้ URL เดียวในทุก method โดยเพิ่ม /search/, /cache/ และ /spell/ เข้าไปต่อท้าย URL เพื่อที่ว่าจะได้มี URL แยกเฉพาะในแต่ละ method ไปเลย
  • ข้อจำกัดที่ Google กำหนดให้มีผลลัพธ์การค้นหาได้ไม่เกิน 10 รายการต่อการคิวรีหนึ่งครั้ง ได้ถูกแก้ไขโดยให้ XooMLe วนลูบ และส่งกลับออกมาเป็นเอกสาร XML เพียงชุดเดียวในตอนท้าย
  • เพิ่มส่วนของ cachedVersion ลงในผลลัพธ์แต่ละรายการ ซึ่งจะมีลิงก์เตรียมไว้พร้อม เพื่อดึงสำเนาของเว็บเพจที่แคชเอาไว้ผ่าน XooMLe ได้ในทันที
  • ถ้าหากว่าข้อมูลที่เกี่ยวข้องกันมีอยู่ใน Google ด้วย ก็จะมีลิงก์เตรียมไว้เพื่อให้ดึงข้อมูลนั้นออกมาได้ เพิ่ม XLing (สำหรับ relatedInformation และ cachedVersion) เข้าไปยัง URL ซึ่งจะช่วยให้สามารถสร้างลิงก์ได้อย่างอัตโนมัติผ่านเทคโนโลยี XML
  • เพิ่มความสามารถในการระบุ XSLT เมื่อทำการสืบค้น ซึ่งจะทำให้สามารถใช้เทคโนโลยี XML ล้วนๆ ในการกำหนดแบบของผลลัพธ์ให้อยู่ในรูปแบบที่คนเราอ่านเข้าใจได้

ดังนั้น RESTful Web Service จึงได้ถือกำเนิดขึ้นมา ซึ่ง XooMLe มีฟังก์ชันของ Google API อย่างเต็มที่ (ที่จริงแล้วได้ขยายความสามารถออกไปในบางจุดด้วย) โดยอยู่ในรูปแบบที่เรียบง่าย ขณะที่ผลลัพธ์ที่ได้จาก XooMLe นั้นสามารถทำ bookmark ไว้ได้ด้วย ส่วนคำแนะนำในการสะกดนั้นสามารถเข้าถึงอย่างง่ายดายด้วย Bookmaklet นอกจากนี้ผลลัพธ์สามารถ parse ในภาษาคอมพิวเตอร์ได้แทบทุกภาษาโดยใช้ฟังก์ชันง่ายๆที่มีอยู่ และสำหรับหน้า cached page นั้นก็พร้อมเสมอต่อการเรียกใช้งาน

XooMLe ได้แสดงให้เห็นแล้วว่า มันเป็นไปได้ที่ Google จะสร้าง API โดยใช้สถาปัตยกรรมของ REST ซึ่งปัจจุปัน XooMLe ได้ถูกเลือกให้เป็นหนึ่งในตัวอย่างของ REST done right โดยกลุ่มผู้ที่สนับสนุนจำนวนหนึ่งรวมทั้งจากลิงก์บางแห่งจาก Amazon/Google ที่พัฒนาโดยสมาชิกของกลุ่มสนทนา REST (REST-discuss members)

โดยตัวของมันเอง XooMLe อาจจะไม่มีประโยชน์นัก แต่เมื่อมันถูกผนวกเข้ากับจินตนาการและพลังการเขียนโปรแกรมของชุมชน Web Service แล้วนั้น ไม่ต้องสงสัยเลยว่ามันจะเกิดคลื่นแห่งของเล่น เครื่องมือ และประเด็นพูดคุยใหม่ๆออกมาได้แน่นอน

XooMLe ทำงานอย่างไร

โดยทั่วๆไป หากจะใช้ XooMLe คุณเพียงแต่ “request” หน้าเว็บสักหน้าหนึ่ง จากนั้นก็ทำอะไรสักอย่างกับผลที่ส่งกลับมาให้เท่านั้น โดยบางคนอาจจะเรียกมันว่าเป็นสถาปัตยกรรมแบบ request-response โดยที่เมื่อคุณ request XooMLe ในบางสิ่งบางอย่าง มันก็จะไป request Google ในสิ่งเดียวกันให้อีกทีหนึ่ง แต่จะจัดรูปแบบของผลที่ได้ตามรูปแบบเฉพาะของมันเอง แล้วจึงส่งต่อให้คุณอีกทอดหนึ่ง จากนั้นคุณจะทำอะไรกับผลลัพธ์ดังกล่าวก็ได้ ซึ่งถ้ากล่าวสั้นๆก็คือ อะไรก็ตามที่คุณถามเอาจาก Google SOAP API ได้ คุณก็ถามเอาจาก XooMLe ได้เหมือนกัน

Google method: doGoogleSearch

  • XooMLe URI อยู่ที่ http://xoomle.dentedreality.com.au/search/
  • Successful Response Format: ตอบกลับด้วยเอกสาร XML document ที่เป็นผลลัพธ์การสืบค้นด้วย Google ที่คุณได้ระบุไว้
  • Failure Response: แสดง error message ที่เป็นเอกสาร XML รวมทั้ง argument ต่างๆทั้งหมดที่คุณส่งไปยังXooMLe ด้วย (มีตัวอย่างอยู่ที่ http://www.dentedreality.com.au/xoomle/sample_error.xml)
คุณสมบัติเพิ่มเติม
  • maxResults : กำหนด maxResults ให้ได้ผลลัพธ์มากกว่า 10 รายการ โดย Google จะทำการวนลูปเพื่อคิวรีสืบค้นข้อมูลให้ได้ตามจำนวนที่ต้องการ แล้วส่งออกมาในตอนท้ายทีเดียวเลย
  • cachedVersion : ในผลลัพธ์แต่ะละรายการจะมีส่วนของ cached version ของผลลัพธ์นั้นๆไว้ด้วย โดยจะให้มาในรูปของ URI ที่ใช้ในการดึงหน้า cached page นั้นๆออกมา
  • xsl : คุณอาจจะระบุตัวแปรที่ชื่อ xsl เพิ่มเข้าไปในการคิวรีด้วย โดยค่านี้จะใช้ในการอ้างอิงไปยัง external XSLT stylesheet และจะถูกใช้ในการกำหนดรูปแบบ XML ที่คืนให้ผู้ใช้
  • relatedInformation : ถ้าหากมีการตรวจพบว่ามีข้อมูลเพิ่มเติมที่เกี่ยวข้องในแต่ละ resultElement แล้ว ก็จะมีลิงก์เพื่อดึงข้อมูลนั้นจาก XooMLe ด้วย
  • xlink : เป็นxlink attribute ที่เพิ่มเข้าไปยัง cachedVersion และ relatedInformation ของผลลัพธ์แต่ละรายการ
Google Method: doSpellingSuggestion
  • XooMLe URI อยู่ที่ http://xoomle.dentedreality.com.au/spell/
  • Successful Response Format: จะแสดงข้อความเป็นตัวอักษรธรรมดา ที่เป็นคำแนะนำให้แก้ไขข้อความหรือคำที่สะกดผิด ที่คุณส่งไปยัง Google ผ่าน XooMLe
  • Failure Response: จะแสดง error message ที่เป็นเอกสาร XML รวมทั้ง argument ต่างๆทั้งหมดที่คุณส่งไปยัง XooMLe ด้วย โดยข้อความจะเปลี่ยนไปตามความผิดพลาดชนิดต่างๆที่เกิดขิ้นตามจริง
Google Method: doGetCachedPage
  • XooMLe URI อยู่ที่ http://xoomle.dentedreality.com.au/cache/
  • Successful Response Format: จะให้ผลลัพธ์เป็นหน้า cached page ที่ request อย่างเดียว โดยปราศจาก google information header อย่างสิ้นเชิง ทั้งนี้เพราะ header ดังกล่าวจะถูกดึงออกก่อนที่จะแสดงผลลัพธ์ ดังนั้นคุณจะไม่ได้รับอะไรอื่นนอกจากโค้ด HTML ที่ใช้ในการสร้างเว็บหน้านั้นๆเพียงอย่างเดียว
  • Failure Respond: แสดง error message ในรูปเอกสาร XML รวมทั้ง argument ต่างๆทั้งหมด ที่คุณส่งไปยัง XooMLe ด้วย
การ request XooMLe
การที่จะ request อะไรสักอย่างจาก XooMLe นั้นเป็นเรื่องง่ายนิดเดียว โดยสามารถทำได้ทั้งในรูปของ hyperlink, bookmark หรือกระทั่งจาก favorite โดยการ request ต่อ XooMLe นั้นอยู่ในรูปของ URL ที่มีลักษณะดังนี้
http://xoomle.dentedreality.com.au/search/?key=yourGoogleDeveloperKey&q=dented+reality

เป็นยังไงบ้าง ง่ายไหม? และเมื่อคุณจะคุยกับ XooMLe เมื่อใดก็ตาม address ที่ต้องการก็คือ
http://xoomle.dentedreality.com.au//

โดย request ของคุณอาจจะดูเหมือนข้างต้น หรือไม่ก็อาจเป็นดังข้างล่างนี้ก็ได้
http://xoomel.dentedreality.com.au/search/
?key=YourKey
&q=dented+reality
&maxResults=1
&start=0
&hl=en
&ie=iso-8859-1
&filter=0
&restrict=countryAU
&safeSearch=1
&lr=en
&ie=latin1
&io=latin1
&xsl=myxsl.xsl

ที่ให้ออปชันต่างๆอยู่คนละบรรทัดกัน เหตุผลเพียงอย่างเดียวก็เพื่อทำให้อ่านง่ายนั่นเอง
พารามิเตอร์ทั้งหลายนั้น มีอยู่ในคู่มือของ Google แล้ว ในที่นี้เพียงแต่ทบทวนความจำกันนิดหน่อยเท่านั้นเอง

ส่วน key ในคำสั่งข้างต้นนั้นหมายถึง Google Developer Key ของคุณนั่นเอง ถ้าหากยังไม่มี คุณจะต้องไปลงทะเบียนกับ Google เสียก่อน

อีกอย่างหนึ่งที่คุณอาจจะอยากรู้ก็คือ XooMLe ใช้เทคนิคของการวนรอบเพื่อให้คุณสามารถ request ผลลัพธ์ได้มากกว่า 10 รายการต่อครั้ง เป็นต้นว่าถ้าหากคุณต้องการผลลัพธ์ 300 รายการ มันก็จะ query ไปยัง Google หลายรอบ แล้วส่งผลลัพธ์ทั้ง 300 รายการให้คุณในรูปของ XML ทีเดียวในตอนท้าย อย่างไรก็ตาม อย่าลืมว่าคุณได้ใช้โควต้าที่ Google กำหนดให้สามารถ request ได้ไม่เกิน 1,000 ครั้งต่อวันไปแล้วถึง 30 ครั้ง

Error Message
ถ้าหากว่าคุณทำอะไรผิดไปจากรูปแบบที่กำหนดไว้ XooMLe จะแจ้งให้คุณทราบในรูปของ XML package และสำหรับ error message นั้นมีหลายรูปแบบตามสาเหตุของมัน รายละเอียดข้างล่างนี้เป็น error message ที่คุณอาจได้รับ และเหตุผลว่าทำไมจึงได้รับข้อความเช่นนั้น

Google API key not supplied
คุณลืมใส่ Google API key ให้แก่ XooMLe คุณจำเป็นจะต้องใส่คีย์ดังกล่าวเพื่อที่ XooMLe จะได้สื่อสารกับ Google ในนามของคุณได้ วิธีการระบุก็คือใส่คีย์ของคุณลงไปแทน insert key here ถ้าหากว่าคุณยังไม่มีคีย์ ให้ลงทะเบียนขอรับได้จาก Google เสียก่อน มิฉะนั้นจะทำอะไรไม่ได้เลย

Search string not specified

คุณมีความรู้มากพอที่จะใช้ method=doGoogleSeach แต่ว่ากลับลืมบอก XooMLe ว่าต้องการจะสืบค้นหาอะไร วิธีการแก้ไขทำได้ใช้คำสั่งลักษณะดังนี้ เช่น q=Your+search+terms (คำที่คุณต้องการค้นหา ควรใช้ให้ถูกต้องตามแบบของ URL ที่ถูกต้องด้วย)

Invalid Google API key supplied
มีบางอย่างผิดพลาดเกี่ยวกับคีย์ของคุณ (ลองตรวจดูว่าคุณลืมที่จะแปลงให้อยู่ในรูปแบบที่ URL ยอมรับได้หรือเปล่า)
Your search found no results
คำนี้ชัดเจนในตัวอยู่แล้ว

Phase not specified
ถ้าหากว่าคุณขอคำแนะนำในการสะกดคำ (ใช้ method=doSpellingSuggestion) คุณควรจะบอก XooMLe ด้วย โดยใช้ phase=stoopid+speling+here

No suggestion available
Google เองก็ไม่ได้สมบูรณ์แบบไปซะทุกอย่าง บางครั้ง request ของคุณเกี่ยวกับการสะกดคำก็ไม่คืนผลลัพธ์ใดๆกลับคืนมาเลย (บางที Google อาจจะถอดความจากคำสะกดที่ผิดของคุณไม่ได้ เลยทำให้หาคำที่ถูกมาเสนอไม่ได้ด้วย)

URL not specified
ถ้าหากว่าคุณต้องการหน้า cached page จาก Google ด้วย คุณก็ควรจะระบุให้ชัดเจน โดยใช้ url=http://thepagehere.com

Cached page not available
มีบางสิ่งผิดพลาดในหน้า cached page ที่ Google ให้มา (หรืออาจจะไม่พบหน้า cached page ของเว็บเพจที่อยู่ในรายการผลลัพธ์ในคลังข้อมูลของ Google ก็ได้) แต่ทั้งนี้ต้องไม่ลืมว่า ใช่ทุกหน้าเว็บเพจที่อยู่ใน Google จะต้องมี cached page เสมอ

Couldn’t contact Google server
มีปัญหาในการติดต่อกับ Server ของ Google ทำให้ request ของคุณจึงไม่สามารถประมวลผลได้

XooMLe ในทางปฏิบัติการแทนที่โมดูล SOAP :: Lite
XooMLe ไม่ได้เป็นเพียงวิธีเดียวที่จะทำให้ได้ผลลัพธ์จาก Google ในรูปของเอกสาร XML กลับคืนมาได้ แต่ว่าก็เป็นวิธีการง่ายๆในการที่จะนำมาใช้ทดแทน SOAP :: Lite ซึ่งเป็นโมดูลที่ ISP บางแห่งไม่สนับสนุน ไฟล์ XooMLe.pm จึงเป็นโมดูลเพิ่มเติมของ Perl ซึ่งเหมาะอย่างยิ่ง ที่จะเก็บไว้ในไดเรกทอรีเดียวกับโค้ดที่เป็นวิธีการแฮกรูปแบบต่างๆ ในหนังสือเล่มนี้

# XooMLe.pm
# XooMLe is a drop-in replacement for SOAP::Lite designed to use
# the plain old XML to Google SOAP bridge provided by the XooMLe
# service.

package XooMLe;
use strict;
use LWP::Simple; use XML::Simple;

sub new {
my $self = {};
bless($self);
return $self;
}

sub doGoogleSearch {
my($self, %args); ($self, @args{qw/ key q start maxResults
filter restrict safeSearch lr ie oe /}) = @_;
my $xoomle_url = 'http://xoomle.dentedreality.com.au';

my $xoomle_service = 'search';
# Query Google via XooMLe

my $content = get(
"$xoomle_url/$xoomle_service/?" .
join '&', map { "$_=$args{$_}" } keys %args
);
# Parse the XML my $results = XMLin($content);
# Normalize

$results->{GoogleSearchResult}->{resultElements} =
$results->{GoogleSearchResult}->{resultElements}->{item};

foreach (@{$results->{GoogleSearchResult}->{'resultElements'}}) {
$_->{URL} = $_->{URL}->{content};
ref $_->{snippet} eq 'HASH' and $_->{snippet} = '';
ref $_->{title} eq 'HASH' and $_->{title} = '';
}
return $results->{GoogleSearchResult};

}
1;

การใช้งานโมดูล XooMLe

นี่เป็นตัวอย่างสคริปต์ที่จะแสดงว่าโมดูล XooMLe ฉบับทำเองนั้นทำงานอย่างไร ทั้งนี้ก็ไม่ต่างจากแฮกอื่นๆที่อยู่ในเล่มนี้นัก ส่วนที่มีการดัดแปลงจากเดิมที่ใช้กับ SOAP::Lite ให้ใช้กับ XooMLe ได้นั้น จะแสดงไว้วยตัวหนา (bold)



#!/usr/bin/perl
# xoomle_google2csv.pl
# Google Web Search Results via XooMLe 3rd party web service
# exported to CSV suitable for import into Excel
# Usage: xoomle_google2csv.pl "{query}" [> results.csv]

# Your Google API developer's key
my $google_key = 'insert key here';

use strict;

# Uses our home-brewed XooMLe Perl module
# use SOAP::Lite
use XooMLe;

$ARGV[0] or die qq{usage: perl xoomle_search2csv.pl "{query}"\n};

# Create a new XooMLe object rather than using SOAP::Lite
# my $google_search = SOAP::Lite->service("file:$google_wdsl");
my $google_search = new XooMLe;

my $results = $google_search -> doGoogleSearch(
$google_key, shift @ARGV, 0, 10, "false", "",
"false", "", "latin1", "latin1"
);

@{$results->{'resultElements'}} or warn 'No results';

print qq{"title","url","snippet"\n};

foreach (@{$results->{'resultElements'}}) {
$_->{title} =~ s!"!""!g;
# double escape " marks
$_->{snippet} =~ s!"!""!g;
my $output = qq{"$_->{title}","$_->{URL}","$_->{snippet}"\n};
# drop all HTML tags
$output =~ s!<.+?>!!g;
print $output;
}

การใช้งานแฮก

ให้เรียกสคริปต์จากบรรทัดคำสั่ง โดยระบุการคิวรี และส่ง output ไปยังไฟล์ CSV ที่ต้องการ หรือไปยังไฟล์ที่คุณต้องการจะนำผลลัพธ์ที่ได้เข้าไปต่อท้าย (append) เช่น ถ้าจะใช้คำว่า “restful SOAP” ในการ query และส่ง output ไปยังไฟล์ result.csv ให้ระบุดังนี้

$ perl xoomle_google2csv.pl “restful SOAP” > results.csv

แต่ถ้าเอา > และ results.csv ออก จะทำให้ผลลัพธ์ที่ได้ถูกแสดงบนหน้าจอแทน

การนำไปใช้งาน

ด้วยวิธีการเดียวกันนี้ คุณก็สามารถที่จะปรับเปลี่ยนโค้ดที่เป็นการแฮก ที่ใช้กับ SOAP::Lite ในหนังสือเล่มนี้ รวมทั้งโค้ดที่คุณได้สร้างขึ้นมาเอง โดยให้ใช้กับ XooMLe ได้

  1. บันทึกเก็บไฟล์ XooMLe.pm ไว้ในไดเร็กทอรีที่คุณเก็บโค้ดในการแฮกไว้
  2. แทนที่คำว่า SOAP::Lite; ในโค้ดด้วย XooMLe;
  3. แทนที่คำว่า my $google_search = SOAP::Lite -> service (“file:$google_wdsl”); ในโค้ดด้วย my $google_search = new XooMLe;

จงตระหนักว่าจุดประสงค์ในการใช้งานของแต่ละคนไม่เหมือนกัน ดังนั้นจงอย่ากลัวที่จะดัดแปลงโค้ดต่างๆที่มีอยู่

โปรดดูเพิ่มเติม

PoXML (Hack#53) เป็น XML แบบเดิม ที่เป็นทางเลือกทดแทน SOAP::Lite

NoXML (Hack#54) เป็น  XML ที่อยู่บนฐาน expression ธรรมดา ซึ่งเป็นทางเลือกทดแทน SOAP::Lite แบบ Parser-free

วันจันทร์ที่ ๕ มีนาคม พ.ศ. ๒๕๕๐

บทที่ 3 บริการด้วย Google โดยบุคคลภายนอก (Third-Party Google Services) Hacks #36-40

ถามแบบปรัชญาของนิกายเซ็นว่า Google เป็น Search Engine หรือเทคโนโลยีกันแน่?

อืมม์! เป็นคำถามที่แปลกมาก! ว่าแต่ Google เป็นเพียงแค่ Search Engine ไม่ใช่หรือ? แต่ Google ก็มีศักยภาพในการสืบค้นจากข้อมูลจากที่ต่างๆมากมายใช่หรือไม่? หรือว่ามีมากกว่านั้นอีก? หรือว่า Google เป็นเทคโนโลยีประเภทหนึ่งที่ผู้อื่นสามารถนำไปประยุกต์ใช้กับงานสืบค้นในแบบของตัวเองกันได้แน่?

โชคดีที่มี Google API ที่ทำให้บุคคลภายนอกสามารถใช้และพัฒนาเทคโนโลยีของ Google ให้เป็นแอพพลิเคชันต่างๆซึ่งไม่ข้องเกี่ยวกับ Google เลยได้โดยไม่ยากเท่าไหร่ เพียงแต่ใช้เทคโนโลยีของ Google เท่านั้นเอง

ด้วย Google แต่ไม่ใช่ Google

ในบทนี้คุณจะได้เห็นถึงตัวอย่างบริการ (service) ของบุคคลภายนอกหลายแบบ ที่ผนวกเอาเทคโนโลยีของ Google ซึ่งบริการเหล่านี้เป็นโครงการพัฒนาซอร์สโค้ดของผู้อื่นที่โพสต์บนเว็บไซต์ของ Google เท่านั้น Google ไม่ได้มีส่วนในการร่วมสร้างแต่อย่างใด และ Google เองก็ไม่อาจจับตาเฝ้ามองผู้คนจำนวนนับพันที่นำ API ของ Google ไปใช้ได้ และที่สำคัญคือ Google จะไม่เข้าไปยุ่งเกี่ยวกับการใช้งาน Google API ของบุคคลภายนอกแต่อย่างใด เว้นแต่ว่าผู้ที่นำไปใช้นั้นทำผิดกฎของการให้บริการ (term of services) ที่ตกลงกันไว้ ดังนั้นหากว่าคุณไปพบเอาแอพพลิเคชันที่ใช้งานได้ไม่ตรงกับที่ป่าวประกาศเอาไว้แต่แรก หรือกระทั่งถึงขนาดที่ว่าใช้งานไม่ได้ตามที่พูดเลย ก็ขอให้นำปัญหานั้นไปคุยกับนักพัฒนาแอพพลิเคชันเหล่านั้นเอง ไม่ใช่มาที่ Google แต่ว่าถ้าแอพพลิเคชันเหล่านั้นทำผิดกฎของ Google อย่างชัดเจน รวมถึงกฎการใช้งาน Google API ด้วย คุณก็สามารถแจ้ง Google ได้ทันทีเลย

เรื่องของ User Interface

การที่บุคคลภายนอกจะผนวกเทคโนโลยีการสืบค้นเข้าไปในอินเทอร์เฟซ หรือชิ้นงานใดๆของเขาก็ตามนั้น ไม่ใช่เรื่องที่ใหญ่โตแต่อย่างใดเลย เช่น ตัวอย่างหนึ่งในการแฮกในบทนี้นั้น เป็นเพียงแต่การทำให้ Google Group URL ใช้งานได้ง่ายขึ้นเท่านั้น ซึ่งไม่ใช่เรื่องที่ซับซ้อนแม้แต่น้อย ทว่าก็ทำให้การใช้งาน Google Group URL สะดวกขึ้นมาก โดยเฉพาะถ้าหากคุณเป็นนักวิจัยหรือนักสะสมข้อมูล

แต่ก็แน่ล่ะ หากคุณจะทำมากกว่านั้นก็ย่อมได้ เช่น ใช้ Google API ในการสร้างบริการที่สามารถเข้าถึงผลของการสืบค้นของ Google ได้ โดยการใช้แอพพลิเคชันที่พัฒนาขึ้นมาเองค้นหาแทน เป็นต้น

การขยายทางเลือกด้วย Google API

เมื่อคุณเลือกใช้ Google API นั่นหมายความว่า คุณสามารถทำอะไรที่เป็นได้เกินกว่าอินเทอร์เฟซการสืบค้นแบบเดิมๆที่เคยมีมา เป็นต้นว่า หนึ่งในการแฮกในบทนี้เป็นการสืบค้นด้วย Google ที่แสดงผลผ่านอีเมล์ได้ หรืออีกแฮกหนึ่งที่เป็นการผนวกการสืบค้นด้วย Google ที่แทรกเข้าไปในงานที่พัฒนามาจากโปรแกรมแฟลช (Flash) เป็นต้น ฉะนั้นโดยการใช้ Google API จึงเกิดสิ่งที่น่าประหลาดใจที่การสืบค้นด้วย Google สามารถคืบคลานเข้าไปในทุกที่ได้

คิดนอกกรอบ

มีคนจำนวนมากที่พัฒนา Google Servie ในงานขนาดใหญ่ เช่น การใช้งาน Google ด้วยคีย์บอร์ดล้วนๆ ซึ่งเป็นโครงการของบริษัทโลจิเทค http://www.google.com/press/pressrel/logitech.html) ไปจนกระทั่งถึงงานที่ขึ้นหน้าขึ้นตาอย่างการร่วมกับ BMW ในการสร้างรถที่สามารถใช้เสียงสืบค้นข้อมูลบนอินเทอร์เน็ตได้ (http://www.google.com/press/highlights.html) เป็นต้น และใครจะรู้ได้ว่าจะมีอะไรอื่นๆอีกที่ Google จะนำเสนอในวันข้างหน้า