HACK#43 สร้าง URL สำหรับ Google Directory

การแฮกให้หัวข้อนี้ใช้ข้อมูลจาก Open Directory Project (Dmoz) เพื่อสร้าง Google Directory
Google Directory (http://directory.google.com/) ตั้งอยู่บนพื้นฐานของ Open Directory Project (หรือ ODP หรือ DMOZ, http://www.dmoz.org/) อันเป็นดัชนีหลักของ Google ซึ่งผลที่ได้ก็คือ การแสดงผลการสืบค้นที่เป็นไดเรกทอรีแบบลำดับชั้น (hierarchy) ที่เหมือนกับ Yahoo! พร้อมกับเติมความความสามารถเพิ่มเข้าไปด้วยอัลกอริทึมในแบบของ Google เอง
ODP นั้นเปิดฐานข้อมูลการทำรายการทั้งหมดให้แก่สาธารณะ โดยหากคุณอยากจะมีเป็นของตัวเอง ก็ต้องทำใจที่จะดาวน์โหลดข้อมูลจำนวน 205 เมกะไบท์ (นี่ผ่านการบีบอัดแล้วนะ) ซึ่งคุณคงไม่สนใจในรายละเอียดของทุกรายการที่แสดงไว้ทั้งหมดเป็นแน่ แต่อาจจะสนใจกลุ่มกลุ่มใดกลุ่มหนึ่ง หรือคุณอาจจะต้องการเฝ้าดูรายการใหม่ๆที่เพิ่มเข้าไปในบางกลุ่มก็เป็นได้
โชค ไม่ดีสักเท่าไหร่ที่ ODP ไม่สนับสนุนการสืบค้นด้วยคีย์เวิร์ดที่ไซต์ต่างๆเพิ่มเข้าไป (แต่ที่ Yahoo! สนับสนุน) ดังนั้นแทนที่มองหาจะเว็บไซต์ที่ถูกเพิ่มเข้ามาใหม่ๆ วิธีที่ดีที่สุดก็คือที่จะได้ข้อมูลของเว็บไซต์ใหม่ๆจาก ODP ก็คือดูจาก category ต่างๆแทน
เนื่อง จาก Google Directory นั้นสร้างไดเรกทอรีของตัวเองโดยมีฐานอยู่บน ODP ฉะนั้นคุณอาจใช้การจัดกลุ่มแบบลำดับชั้นของ ODP ในการสร้าง URL เพื่อบันทึกลงใน Google Directory ได้ โดยการแฮกนี้จะสำรวจกลุ่มแบบ category ของ ODP ด้วยคีย์เวิร์ดที่คุณระบุ จากนั้นก็จะสร้าง URL เพื่อบันทึกลงใน Google Directory และตรวจสอบว่าใช้งานได้จริง
คุณจะต้องดาวน์โหลดข้อมูล category จาก ODP เพื่อทำให้การแฮกในหัวข้อนี้ทำงาน โดยไฟล์ที่มีข้อมูลข้างต้นนั้นอยู่ในรูปที่ถูกบีบอัดอยู่ที่ http://dmoz.org/rdf.html โดยไฟล์ที่ต้องการนั้นอยู่ที่ http://dmoz.org/rdf/structure.rdf.u8.gz ก่อนที่จะใช้ให้ uncompress ไฟล์ดังกล่าวก่อนด้วยโปรแกรม decompress ที่มีอยู่ ซึ่งในระบบ Unix จะมีลักษณะดังนี้
% gunzip structure.rdf.u8.gz
แต่คุณต้องรู้ด้วยว่าข้อมูลโครงสร้าง category นั้นมีขนาดมากกว่า 35 เมกะไบต์ ถ้าหากคุณเพียงแค่อยากทดลองกับโครงสร้างของข้อมูลดังกล่าว ก็มีที่สรุปย่อไว้ให้แล้วที่ http://dmoz.org/rdf/structure.example.txt ซึ่งเป็นข้อมูลในรูป text ธรรมดา ไม่ต้องมีการ uncompress แต่อย่างใด
โค้ดตัวอย่าง
#!/usr/bin/perl
# google_dir.pl
# Uses ODP category information to build URLs into the Google Directory.
# Usage: perl google_dir.pl "keywords" <>
use strict;
use LWP::Simple;
# Turn off output buffering
$|++;
my $directory_url = "http://directory.google.com";
$ARGV
or die qq{usage: perl google_dir.pl "{query}" <>
# Grab those command-line specified keywords and build a regular expression
my $keywords = shift @ARGV;
$keywords =~ s!\s+!\|!g;
# A place to store topics
my %topics;
# Loop through the DMOZ category file, printing matching results
while (<>) {
/"(Top\/.*$keywords.*)"/i and !$topics{$1}++
and print "$directory_url/$1\n";
}
การใช้งานแฮก
รันสคริปต์จาก command line ตามด้วยคำถามและไฟล์ดังตัวอย่างข้างล่างนี้
% perl googledir.pl “keywords” <>
ถ้าหากว่าคุณใช้กลุ่ม structure.example.txt ก็ให้ใช้
% perl googledir.pl “keywords” <>
ผลลัพธ์
หากว่าคุณใช้คำ mosaic เป็นคีย์เวิร์ดในการสืบค้น ผลที่ได้จะเป็นดังนี้
% perl googledir.pl "mosaic" <>
http://directory.google.com/Top/Arts/Crafts/Mosaics
http://directory.google.com/Top/Arts/Crafts/Mosaics/Glass
http://directory.google.com/Top/Arts/Crafts/Mosaics/Ceramic_and_Broken_China
http://directory.google.com/Top/Arts/Crafts/Mosaics/Associations_and_Directories
http://directory.google.com/Top/Arts/Crafts/Mosaics/Stone
http://directory.google.com/Top/Shopping/Crafts/Mosaics
http://directory.google.com/Top/Shopping/Crafts/Supplies/Mosaics
Hacking the Hack
การ แฮกในหัวข้อนี้อาจะไม่ค่อยมีอะไรให้แฮกเท่าไร เพราะว่าได้ถูกออกแบบให้รับข้อมูลจาก ODP สร้าง Google URL และตรวจสอบ URL เหล่านั้นเท่านั้น ซึ่งจะใช้งานได้ดีหรือไม่ก็ขึ้นอยู่กับคีย์เวิร์ดที่ใช้ในการสืบค้น
การ เลือกคีย์เวิร์ดควรจะเลือกคำที่ใช้กันแพร่หลายทั่วไป เป็นต้นว่า หากคุณสนใจรัฐใดรัฐหนึ่งในอเมริกา ก็ควรที่จะเลือกใช้ชื่อของรัฐและเมืองหลักเป็นคีย์เวิร์ด ไม่ควรเลือกใช้ชื่อเมืองเล็กๆหรือใช้ชื่อผู้ว่าการรัฐ และในทำนองเดียวกัน กรณีต้องการหาข้อมูลของบริษัทบางแห่งก็ให้เลือกใช้ชื่อของบริษัทแทนที่จะใช้ ชื่อของผู้บริหาร โดยหลักแล้วก็คือให้เลือกใช้คีย์เวิร์ดที่คุณจะหาพบใน Encyclopedia ให้ยึดหลักเอาง่ายๆว่าใน Encyclopedia นั้นการจะพบชื่อบริษัทนั้นง่ายกว่าการที่จะพบชื่อผู้บริหารมาก

โพสต์ยอดนิยมจากบล็อกนี้

I miss you all กับ I miss all of you ต่างกันอย่างไร

ปัญหาและเฉลยวิชาธรรม นักธรรมชั้นตรี สอบในสนามหลวง วันอังคาร ที่ ๒๙ กันยายน พ.ศ.๒๕๕๒

ปัญหาและเฉลยวิชาอนุพุทธประวัติ นักธรรมชั้นโท สอบในสนามหลวง วันอาทิตย์ ที่ ๒๐ พฤศจิกายน พ.ศ. ๒๕๔๘