Yahoo!APIを使ったアダルトページ判定
2006-09-09-2
[YahooHacks][Asamasearch]
Asamasearch で使っている、アダルトページ判定ロジックの解説を書いてみました。
参考:Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
ちなみに、「my %seen;」からの5行は「Perl クックブック」に載っているよく知られたイディオムを改変して使ってます。
それではどうぞ:
■■■アダルトページの判定
ヤフー検索にはアダルトページフィルタ機能があります。
Yahoo!検索APIにおいてパラメータ adult_ok を 1 にすると、
アダルトコンテンツ入りの、
0 にするとアダルトコンテンツなしの検索結果になります。
デフォルトは 1 です。
この機能を使って、検索結果からアダルトページのみを取り出してみます。
■処理手順
まず、adult_ok=1 を指定し、アダルトコンテンツを含む検索結果を得ます
(デフォルトが 1 なので指定なしでもOKです)。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=eros&adult_ok=1
次に、adult_ok=0 を指定し、アダルトコンテンツを含まない検索結果を
得ます。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=eros&adult_ok=0
前者の検索結果に含まれているが後者の検索結果には含まれていない URL
を取り出します。これがアダルト判定されたページであるとみなせます。
■コード
■Hack の実行
検索キーは引数で指定する仕様です。
日本語の場合の文字コードは UTF-8 です。
■Hack をさらに Hack する
サンプルコードではWeb検索を対象としていますが、
画像検索、動画検索でも可能です。
関連書籍:
- Perlクックブック〈VOLUME1〉
- Perlクックブック〈VOLUME2〉
- Yahoo! Hacks
- まるごとPerl! Vol.1
参考:Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
ちなみに、「my %seen;」からの5行は「Perl クックブック」に載っているよく知られたイディオムを改変して使ってます。
それではどうぞ:
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■アダルトページの判定
ヤフー検索にはアダルトページフィルタ機能があります。
Yahoo!検索APIにおいてパラメータ adult_ok を 1 にすると、
アダルトコンテンツ入りの、
0 にするとアダルトコンテンツなしの検索結果になります。
デフォルトは 1 です。
この機能を使って、検索結果からアダルトページのみを取り出してみます。
■処理手順
まず、adult_ok=1 を指定し、アダルトコンテンツを含む検索結果を得ます
(デフォルトが 1 なので指定なしでもOKです)。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=eros&adult_ok=1
次に、adult_ok=0 を指定し、アダルトコンテンツを含まない検索結果を
得ます。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=eros&adult_ok=0
前者の検索結果に含まれているが後者の検索結果には含まれていない URL
を取り出します。これがアダルト判定されたページであるとみなせます。
■コード
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use XML::Simple; my $key = shift @ARGV; $key =~ s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge; $key =~ s/ /+/g; my $url_prefix = "http://search.yahooapis.jp/WebSearchService/V1/" ."webSearch?appid=YahooDemo&query=$key&results=50"; my @aoks = map {$_->{Url}} @{get_results($url_prefix."&adult_ok=1")}; my @angs = map {$_->{Url}} @{get_results($url_prefix."&adult_ok=0")}; my %seen; @seen{@angs} = (); foreach my $item (@aoks) { print "$item\n" unless exists $seen{$item}; } sub get_results { my ($url) = @_; my $yahoo_response = get($url); my $xmlsimple = XML::Simple->new(); my $yahoo_xml = $xmlsimple->XMLin($yahoo_response); if (ref($yahoo_xml->{Result}) eq "ARRAY") { # found: many return $yahoo_xml->{Result}; } elsif (ref($yahoo_xml->{Result}) eq "HASH") { # found: 1 return [$yahoo_xml->{Result}]; } return []; # not found }
■Hack の実行
検索キーは引数で指定する仕様です。
日本語の場合の文字コードは UTF-8 です。
% hack_adult.pl eros http://www.shang-bu.com/jp/eros.htm http://eros.blog.shinobi.jp/Entry/3/ http://sketch-book.seesaa.net/category/11088-1.html % hack_adult.pl アイドル http://www.kumagaya.or.jp/~mamada/idol/idol.htm http://zxz.jugem.jp/ http://idol-yoshiwara.jp/ http://www.houmotsu.com/i/gazou.htm http://yapoo-bbs.net/bbs_ai/aidoru/
■Hack をさらに Hack する
サンプルコードではWeb検索を対象としていますが、
画像検索、動画検索でも可能です。
関連書籍:
- Perlクックブック〈VOLUME1〉
- Perlクックブック〈VOLUME2〉
- Yahoo! Hacks
- まるごとPerl! Vol.1