たつをの ChangeLog

6 件 見つかりました。

1 2 [ 次へ ]

「まるごと Ruby! Vol.1」が出るそうです
  • https://chalow.net/2008-05-24-2.html
  • まるごと Ruby! Vol.1」が出るそうです[Book] 「まるごと Perl!」「まるごと PHP!」などの仲間として、「まるごと Ruby!」というムックがでるそうです。■まるごと Ruby! Vol.1まあ私は今のところ Ruby を本格的にやる予定はないので(あと数年したら取り組むかも)読まないですが、Ruby に興味のある人向けの入門書として良いものであろうと期待されます。「まるごと」シリーズだし。ref. Search「まるごと Perl
Yahoo!API の検索結果を JavaScript で表示
  • https://chalow.net/2006-09-15-1.html
  • Yahoo!API の検索結果を JavaScript で表示[YahooHacks] 今回の YahooHacks は Ajax ネタです。Yahoo! API による Web 検索結果を JavaScript でパーズして非同期で表示します。XMLと非同期の処理に、川崎ゆうすけさんによる jkl-parsexml.js を使ってみたら、非常に良いっす、スバラシス。「まるごと Perl Vol.1」のJSON記事でも紹介されてましたね。(検索サイトのサンプルを一時的に下記URLに置いておきます。そのうち消えますのでご了承ください。http://chalow.net/misc/yahoohacks-samp/hack_yjws_js.html)使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。■■■Yahoo!APIの検索結果をJavaScriptで表示するYahoo! API の Web 検索結果 XML をクライアント側で処理して表示します。クライアント(ブラウザ)では、JavaScript で XML のパーズ、HTML の生成、非同期出力を行っています。XML のパーズと非同期処理は、川崎ゆうすけさんによるjkl-parsexml.js (http://www.kawa.net/works/js/jkl/parsexml.html)を使っています。Perl の XML::Simple のように手軽に XML が扱え、とても便利です。■プロキシ CGI直接 Yahoo! API にアクセスして検索結果 XML を取得して加工したいところですが、アクセスに用いる JavaScript の XMLHttpRequest は、往々にしてリモートのコンテンツを取得できません。そこで同じディレクトリにプロキシ CGI を置いて対処します。このプロキシ CGI は、URL encode したキーワードが渡されると、Yahoo! API にアクセスし、そのキーワードでの検索結果 XML を取得し、そのまま表示するだけのものです。以下にプロキシ CGI のコードを示します。#!/usr/bin/perl -Tuse strict;use warnings;use LWP::Simple;print "Content-Type: text/xml; charset=UTF-8\n\n";no warnings 'uninitialized';print get("http://search.yahooapis.jp/WebSearchService/V1/webSearch" ."?appid=YahooDemo&query=$ENV{'QUERY_STRING'}");使用例:下記URLのようにパラメタを渡すと、キーワード「デジカメ」のYahoo! API 検索結果 XML が得られます。http://example.com/hack_proxy.cgi?%E3%83%87%E3%82%B8%E3%82%AB%E3%83%A1■コード検索ページの HTML ファイルを下記に示します。上記プロキシ CGI を通して取得した検索結果を処理して表示するJavaScript のコードも含まれています。<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" src="jkl-parsexml.js"></script><script><!--function yapi_search(key) { var ec = encodeURI(key); var http = new JKL.ParseXML("hack_proxy.cgi?" + ec); var func = function (data) { var r = data["ResultSet"]["Result"]; if (r == undefined) return; var num = r.length; if (num == undefined) { r[0] = r; num = 1; } for (var i = 0; i < num; i++) { document.getElementById("results").innerHTML += '<h3><a href="' + r[i]["Url"]+'">' + r[i]["Title"] + '</a></h3><p>' + r[i]["Summary"] + '</p>'; } } http.async(func); http.parse();}// --></script></head><body><h1>Y!API Search (JavaScript)</h1><form name="search"><input type="text" name="key" size="20"><input type="button" value="search" onclick="yapi_search(document.forms['search'].key.value)"><input type="button" value="clear" onclick="document.getElementById('results').innerHTML = ''"></form><div id="results"></div></body></html>■Hack の実行jkl-pasexml.js とプロキシ CGI と検索ページ HTML を Web サーバ上の同じディレクトリに置き、検索ページにアクセスします。検索実行例を下図に示します。[画像]参考ページ:- Yahoo!デベロッパーネットワーク http://developer.yahoo.co.jp/- [ajax] JKL.ParseXML/ajax通信処理ライブラリ http://www.kawa.net/works/js/jkl/parsexml.html- 404 Blog Not Found:perl - no warnings 'unintialized' http://blog.livedoor.jp/dankogai/archives/50622749.html 「no warnings 'unintialized'」、使い始めました!関連書籍:- Yahoo! Hacks- まるごとPerl! Vol.1- Ajax 実装のための基礎テクニック
Yahoo!商品検索のRSSで商品検索サイトを作る
  • https://chalow.net/2006-09-13-1.html
  • Yahoo!商品検索のRSSで商品検索サイトを作る[YahooHacks] どんな検索サービスにも言えることですが、検索結果のRSSが提供されているということは、そのまま検索APIとして使えるということを意味しています。てなわけで、今回の YahooHacks は、Yahoo!商品検索(http://psearch.yahoo.co.jp/)のRSSを用いた検索サイトの作り方です。なお、「use CGI qw/-no_xhtml/;」としているのはバッドノウハウです。バージョンの違いもあるかもだけど、start_html() で散々嫌な目にあったので。今回は、CGI.pm で昔ながらの方法を使って書いてみたのですが、前述のバッドノウハウも含め、なんか疲れますね。普段はテンプレートを使っています。そういうサンプルも今後載せていきます。(一時的にデモを置いておきます。そのうち消えます。ご了承ください。http://chalow.net/misc/yahoohacks-samp/hack_psearch.cgi)使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。■■■Yahoo!商品検索のRSSで商品検索サイトを作るYahoo!商品検索(http://psearch.yahoo.co.jp/)では、キーワード検索結果がRSSで提供されています。RSSのURLの構成は以下のようになっています。パラメタ p でエンコードしたUTF-8のキーワードを渡します。http://psearch.yahoo.co.jp/search?p=[キーワード]&ei=UTF-8\&tbid=02e89d655a5c&rss=1これを用いて商品検索サイトを作ってみました。■コードYahoo!商品検索のRSSを用い商品検索を行うCGIです。#!/usr/bin/perl -Tuse strict;use warnings;use Encode;use CGI qw/-no_xhtml/;use LWP::Simple;use XML::Simple;use URI::Escape;my $q = new CGI;my $key = $q->param('key') || "";my $ekey = URI::Escape::uri_escape($key);print $q->header(-charset => 'UTF-8'), $q->start_html(-title => 'psearch', -lang => 'JP'), $q->h1('psearch (RSS)'), $q->start_form(-method => 'GET'), $q->textfield(-name => 'key', -size => 20), $q->submit(-value => 'search'), $q->end_form(), $q->h2('Search Results');my $url ="http://psearch.yahoo.co.jp/rss?p=$ekey&ei=UTF-8&rss=1";my $r = get_presults($url);foreach (@$r) { print encode('UTF-8', $q->h3($q->a({href => $_->{link}}, $_->{title})). $q->p($_->{description})), "\n";}print $q->end_html(), "\n";sub get_presults { my ($url) = @_; my $rss = get($url); my $xmlsimple = XML::Simple->new(ForceArray => [ 'item' ]); my $xml = $xmlsimple->XMLin($rss); return $xml->{channel}->{item};}■Hack の実行そのままWebサーバに置けば動作するはずです。検索実行例を下図に示します。[画像]参考ページ:- Yahoo!商品検索 http://psearch.yahoo.co.jp/- Yahoo!デベロッパーネットワーク - RSS配信 http://developer.yahoo.co.jp/rss/- [を] Yahoo!知恵袋の検索結果RSSでQA検索サイトを作る[2006-09-14-1]関連書籍:- Yahoo! Hacks- まるごとPerl! Vol.1追記071021: ソース修正。
指定した URL へのリンクのアンカーテキストを収集する
  • https://chalow.net/2006-09-12-1.html
  • 指定した URL へのリンクのアンカーテキストを収集する[YahooHacks] 今回の YahooHacks は「アンカーテキストの収集」です。とはいえ、文字コードにはまったー!「./hack_anchor.pl http://www.yahoo.co.jp/」を実行すると、「UTF-16LE:Malformed LO surrogate dab3 at /usr/lib/perl/...」などと怒られて落ちるのですが(環境によって異なるみたい…)、これを skip するにはどうしたら良いのでしょうか?とりあえず、decode のところを eval してみました…。使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。■■■あるページへのリンクのアンカーテキストを収集する同じページを指すハイパーリンクのアンカーテキストにはいろいろとバリエーションがあります。例えば、 http://www.yahoo.co.jp/ に対するアンカーテキストは「ヤフー」「Yahoo!」「Yahoo! JAPAN」「18歳未満」(!)など多種多様です。ということで、指定した URL へのリンクのアンカーテキストを収集するハックです。クエリー構文「link:」を使います。「link:http://example.com/」で検索すると、http://example.com/ へのハイパーリンクを持つページが検索結果として表示されます。■コードYahoo! API 経由で、指定した URL へのリンクがあるページの URL を取得します。そして、それぞれのページをクロールし、アンカーテキストを簡単なパターンマッチングで収集します。#!/usr/bin/perluse strict;use warnings;use Encode;use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;binmode STDOUT, ":utf8";use LWP::Simple;use XML::Simple;my $t = shift @ARGV;(my $ec = $t) =~ s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge;my $url = "http://search.yahooapis.jp/WebSearchService/V1/" ."webSearch?appid=YahooDemo&query=link:$ec";my $results = get_results($url);my %anchor;foreach my $page (@$results) { my $str = get($page->{Url}); eval {$str = decode('Guess', $str)}; next if ($@); while ($str =~ m!<\s*a\s[^>]*?href=["']$t['"][^>]*?> (.+?) <\s*/\s*a\s*>!gsmix) { $anchor{$1}++; }}foreach my $anchor_text (sort {$anchor{$b} <=> $anchor{$a}} keys %anchor) { print "$anchor_text:$anchor{$anchor_text}\n";}sub get_results { my ($url) = @_; my $yahoo_response = get($url); my $xmlsimple = XML::Simple->new(ForceArray => [ 'Result' ]); my $yahoo_xml = $xmlsimple->XMLin($yahoo_response); return $yahoo_xml->{Result};}■Hack の実行% ./hack_anchor.pl http://nais.to/~yto/たつをのホームページ:4たつを:3たつをさん:2山下 達雄:2山下達雄:2山下達雄さん:1とある先輩:1■Hack をさらに Hack する同じサイト内のページからのリンクのアンカーテキストは、「トップ」「前」「ホーム」など面白みがないので、始めからサイト外のページのみを対象にするのも良いでしょう。例えば、 yahoo からのリンクを除外するときには「-inurl:yahoo」等、クエリー構文「inurl:」の否定(-)を使うと便利です。参考ページ:- Yahoo!デベロッパーネットワーク (YDN) http://developer.yahoo.co.jp/関連書籍:- Yahoo! Hacks- まるごとPerl! Vol.1追記070908: 「UTF-16LE:Malformed...」問題の解決策!なるほど感謝。- UTF-16LE:Malformed LO surrogate を避ける - 徒書 http://www.akatsukinishisu.net/itazuragaki/perl/malformed_lo_surrogate.html$Encode::Guess::NoUTFAutoGuess = 1;Encode::Guess->set_suspects( qw(euc-jp shiftjis 7bit-jis utf8) );
Yahoo!APIを使ったアダルトページ判定
  • https://chalow.net/2006-09-09-2.html
  • Yahoo!APIを使ったアダルトページ判定[YahooHacks][Asamasearch] Asamasearch で使っている、アダルトページ判定ロジックの解説を書いてみました。[asamasearch]参考: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/perluse 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.htmhttp://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.htmhttp://zxz.jugem.jp/http://idol-yoshiwara.jp/http://www.houmotsu.com/i/gazou.htmhttp://yapoo-bbs.net/bbs_ai/aidoru/■Hack をさらに Hack するサンプルコードではWeb検索を対象としていますが、画像検索、動画検索でも可能です。関連書籍:- Perlクックブック〈VOLUME1〉- Perlクックブック〈VOLUME2〉- Yahoo! Hacks- まるごとPerl! Vol.1

1 2 [ 次へ ]

たつをの ChangeLog
Powered by chalow