perl:yahoo_dictionary
這是本文件的舊版!
yahoo 字典
Perl 版本
#!/usr/bin/perl # Yen-Ming Lee <[email protected]> # 2007/01/09 use Encode qw(encode decode from_to); use Term::ANSIColor qw(:constants); use Data::Dumper; use LWP::Simple; use strict; ydict(shift); sub ydict { my $p = shift; die if !$p; my $html = get("http://tw.dictionary.yahoo.com/search?p=$p"); from_to($html, "utf-8", "big5") if $ENV{'LC_CTYPE'} =~ /Big5/; my $i = 0; $html =~ s/\r//g; $html =~ s/\n//g; if ($html =~ m{<em class="warning">}) { if ($html =~ m{<em class="warning">.*?>(\S+)<.*?</em>}) { my $q = $1; print BOLD . YELLOW . "\nERROR: $p -> $q\n" . RESET; return ydict($q); } else { print BOLD . YELLOW . "ERROR: $p\n" . RESET; return; } } print BOLD . YELLOW . "\n$p\n" . RESET; while ($html =~ m{<div class=p(\w+)>(.*?)</div>}i) { my $type = $1; my $line = $2; $html = $'; my $color; my $bold = BOLD; my $reset = RESET; $line =~ s/^\s+//; $line =~ s/\s+$//; if ($type eq 'cixin') { $i = 0; $color = BOLD . RED; } elsif ($type eq 'chi' or $type eq 'eng') { $color = CYAN; $reset = RESET . $color; $line = "\t$line"; } elsif ($type eq 'explain') { $i++; $line = "$i $line"; } else { $color = BOLD . BLUE; next; } $line =~ s,<b>,$bold,g; $line =~ s,</b>,$reset,g; $line =~ s/<[^>]+>//g; print $color . "$line\n" . RESET; } print "\n"; }
awk + sed 簡單版
#!/bin/sh
curl -sd "p=$1" http://tw.dictionary.yahoo.com/search | \
awk "/pexplain/{ print } \
/peng/{ print } \
/pchi/{ print ; print \"\n\" }" | \
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
改變檔案屬性
$ chmod +x filename
執行:
$ ./filename [單字]
perl/yahoo_dictionary.1168585444.txt.gz · 上一次變更: (外部編輯)
