Google มีคุณสมบัติในการสืบค้นโดยอิงวันที่ (Hack #
ฟอร์ม
ส่วนแรกของสคริปต์นั้นอยู่ในรูปของ HTML ธรรมดาๆ เท่านั้น
<form action="http://path/to/cgi-bin/goofresh.cgi"
method="get">Search for:
<br /><input type="text" name="query" size="30" /><p />Search for pages indexed how many days back?
<br /><select name="days_back"><option value="0">Today</option><option value="1">Yesterday</option><option value="7">Last 7 Days</option><option value="30">Last 30 Days</option></select><p /><input type="submit" value="Search"></form>
ฟอร์มข้างต้นนั้นจะขอรับอินพุตจากผู้ใช้สองรายการ โดยรายการแรกนั้นเป็นคิวรีของ Google ซึ่งพร้อมมูลด้วยการสนับสนุนซินแท็กซ์พิเศษทั้งหลาย รวมถึงการใช้งานซินแท็กซ์พิเศษต่างๆร่วมกันด้วย (Hack #8) โดยท้ายที่สุดแล้ว ก็คือการส่งผ่านคิวรีไปยัง Google ส่วนอินพุตที่สองเป็น pull-down list ซึ่งใช้แสดงตัวเลือกให้ระบุว่าช่วงเวลาใดที่ต้องการจะสืบค้น
Tip: การแฮกในหัวข้อนี้ต้องการโมดูล Time::JulianDay เพิ่มเติม (http://search.cpan.org/search? query=time%3A%3AjulianDay) สคริปต์จะไม่ทำงานเลยทีเดียว หากขาดโมดูลดังกล่าวโค้ดตัวอย่าง
สคริปต์นี้ทำงานอยู่สองสามขั้นตอนคือ แปลงวันที่ใน Perl แล้วทำการ redirect มายัง Google รวมทั้งแปลงคิวรีในระหว่างนั้น ซึ่งในมุมมองของ Google แล้วก็เป็นการคิวรีธรรมดาๆ และไม่ต้องการ Google API Developer’s Key แต่อย่างใด
#!/usr/local/bin/perl
# goofresh.cgi
# searches for recently-Indexed files on google
# usage: goofresh.cgi is called as a CGI with form input,
# redirecting the browser to Google, altered query in tow
use CGI qw/:standard/;
use Time::JulianDay;
# build a URL-escaped query
(my $query = param('query')) =~ s#(\W)#sprintf("%%%02x", ord($
# how many days back?
my $days_back = int param('days_back') || 0;
# what's the current julian date?
my $julian_date = int local_julian_day(time);
# redirect the browser to Google with query in tow
print redirect(
'http://www.google.com/search?num=
"&q=$query" .
"+daterange%3A" . ($julian_date - $days_back) . "-$julian_date"
);
Hacking the Hack
ถ้าหากว่าคุณไม่ชอบการระบุช่วงเวลาที่เป็นโค้ดดิบ (hardcoded) ลงไปในฟอร์มละก็ คุณสามารถทำเองได้ และปรับฟอร์มให้สัมพันธ์กัน
<form action="http://path/to/cgi-bin/goofresh.cgi"
method="get">Search for:
<br /><input type="text" name="query" size="30" /><p />Search for pages indexed how many days back?
<br /><select name="days_back"><option value="0">Today</option><option value="30">Around 1 Month</option><option value="60">Around 2 Months</option><option value="90">Around 3 Months</option><option value="365">1 Year</option></select><p /><input type="submit" value="Search"></form>หรืออาจจะให้ผู้ใช้ระบุง่ายๆ เป็นจำนวนวันที่จะย้อนกลับไปสืบค้นก็ได้
<form action="http://path/to/cgi-bin/goofresh.cgi"
method="get">Search for:
<br /><input type="text" name="query" size="30" /><p />Search for pages indexed how many days back?
<br /><input type="text" name="days_back" size="4"
maxlength="4" /><p /><input type="submit" value="Search"></form>

0 ความคิดเห็น:
แสดงความคิดเห็น