元ネタ、というかほぼ「まんま」ですけど…。
仕組みとしては、 Wikipediaの日本のAV女優一覧というページのExportというXMLを出力するサービスから、 正規表現でごりごりスクレイピングしています。
WikipediaのページをXMLで取得できるというのは知らなかった。
これならPipesでも出来るんじゃない??と考えてやってみたのですが、「取得しようとするページがデカ過ぎですから!」といわれ(エラーになる)出来ませんでした。
なのでいくらでも実行できるようにローカルでPHP版Plaggerこと「Conveyor(旧名PRhagger)」を動かしてやってみました。
最初は標準で用意されている「CustomfeedFetchpage」や「FilterRegex」をメインに複数のworkerを組み合わせればいけるかなあ?と軽く考えていたのですがなかなかウマくいかず、さらにすっごく遅い!のでCustomfeed系のworkerを自作しました。
<?php
Rhaco::import("model.SubscriptionBase");
Rhaco::import("lang.DateUtil");
Rhaco::import("lang.StringUtil");
Rhaco::import("network.http.Browser");
Rhaco::import("tag.model.SimpleTag");
Rhaco::import("tag.feed.Rss20");
/**
* CustomfeedAvActress
* @author fumix
*
* @license New BSD License
* @copyright Copyright 2007- The Rhacophorus Project. All rights reserved.
*/
class CustomfeedAVActress extends SubscriptionBase{
function execute($variable){
$rss20 = new Rss20();
$rss20->setChannel("AV ACTRESS",
"description",
"http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AV%E5%A5%B3%E5%84%AA%E4%B8%80%E8%A6%A7",
"ja"
);
$source = new RssSource("http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AV%E5%A5%B3%E5%84%AA%E4%B8%80%E8%A6%A7","AV女優一覧 - Wikipedia");
$browser = new Browser();
$page = StringUtil::encoding($browser->get("http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AV%E5%A5%B3%E5%84%AA%E4%B8%80%E8%A6%A7"));
$tag = new SimpleTag();
$tag->set($page);
$counter = 0;
$flg = false;
foreach($tag->getIn("text") as $key => $text_tag){
$lines = explode("\n",$text_tag->getValue());
foreach($lines as $key => $value){
if($value == "== 関連項目 =="){
break;
}
if($value == "== あ行 =="){
$flg = true;
}
if($flg == true){
if ( preg_match("/===\s([あ-ん]*?)\s===\Z/",$value, $matches) ) {
$initial = $matches[1];
}
else if ( preg_match('/\[\[(.*?)\]\](.*)/',$value, $matches) ) {
$name = $matches[1];
$temp = $matches[2];
if ( preg_match('/(?:(|\()(.*?)(?:)|\)).*(?:(|\()\[\[(\d{4})年\]\](?:)|\))/',$temp, $matches) ){
$yomi = $matches[1];
$debut = $matches[2];
}
else if ( preg_match('/(?:(|\()\[\[(\d{4})年\]\](?:)|\))/',$temp,$matches) ) {
$yomi = "";
$debut = $matches[1];
}
else if ( preg_match('/(?:(|\()(.*?)(?:)|\))/',$temp,$matches) ) {
$yomi = $matches[1];
$debut = "";
}
if ( preg_match('/(.*)\|(.*)/',$name,$matches) ) {
$name = $matches[2];
}
if($yomi == ""){$yomi = $name;}
$description = $initial.",".$name.",".$yomi.",".$debut.",";
if( ($initial == $this->variable("initial") || $this->variable("initial") == "") &&
($name == $this->variable("name") || $this->variable("name") == "") &&
($yomi == $this->variable("yomi") || $this->variable("yomi") == "") &&
($debut == $this->variable("debut") || $this->variable("debut") == "") )
{
$item = new RssItem20();
$item->setTitle($name);
$item->setDescription($description);
$rss20->setItem($item);
}
}
}
}
}
$rss20 = $this->merge($variable,$rss20);
return $rss20;
}
function description(){
return "WikipediaからAV女優名の一覧を取得";
}
function config(){
$config = array(
"initial" => "頭文字",
"name" => "名前",
"yomi" => "読み",
"debut" => "デビュー(YYYY)",
);
return $config;
}
function rhacover() {
return "1.4.0";
}
}
?>
ダウンロードして解凍後、workerフォルダに放りこんでください。
頭文字(あ?ん)・名前・よみがな・デビュー年(YYYY)でデータの絞り込みができます。
feedの形状は、titleに名前(漢字)、descriptionに頭文字(あ?ん)・名前・よみがな・デビュー年(YYYY)がカンマ区切り(csv?)で入っています。
「SubscriptionRequest」を組み合わせて使えば、configにrequestデータ渡して動的に絞り込みしたfeedが取得できるのかな?と思っていたのですが、できないっぽい?
使い方が違うのかなあ?
※ConveyorはPHPフレームワークであるRhaco上で動くwebアプリケーションです。
Comments:2
- shigepon 08-02-05 (火) 21:44
-
shigeponです。是非workerに入れましょう!
workerについては試行錯誤で作ってますので、色々ご意見お聞かせ下さい。http://www.lingr.com/room/rhaco
とかに居ます。SubscriptionRequestの挙動はお書きのとおりです、が、ついこの間までConveyor本体の動作上うまく動いていませんでしたorz
- fumix 08-02-05 (火) 21:59
-
>shigeponさん
こんにちわー。
workerに入れていただけるのですか?!
・・・でも使う人、いるのかなあ?^^;
自分でも作ってはみたものの・・・といった感じです(笑
本当は自動エロサイト(ぉ)みたいなものをConveyorでやってみたかったのですが、自分では実力不足すぎです、はい。SubscriptionRequestはRSSは渡せましたのでローカルで動かして、色々と悪いことして遊んでます。
Conveyor面白いですね~。
ぶっちゃけ某Plaなんとかよりよっぽど面白いですよ。
Trackbacks:1
- Trackback URL for this entry
- http://www.planet-ape.net/blog/archives/566/trackback
- Listed below are links to weblogs that reference
- Conveyor(旧名PRhagger)で日本のAV女優一覧のRSSを取得してみる from planet-ape|blog
- trackback from planet-ape|blog 08-02-09 (土) 20:10
-
AV女優の画像を取得する(Conveyorネタ)…
以前に作った「Conveyor(旧名PRhagger)で日本のAV女優一覧のRSSを取得してみる」に追加する形でそこにAV女優の画像(顔写真)を検索して追加するようなw (more…)
