Home > PHP | rhaco > Conveyor(旧名PRhagger)で日本のAV女優一覧のRSSを取得してみる

Conveyor(旧名PRhagger)で日本のAV女優一覧のRSSを取得してみる

元ネタ、というかほぼ「まんま」ですけど…。

仕組みとしては、 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なんとかよりよっぽど面白いですよ。

Comment Form
Remember personal info

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…)

Home > PHP | rhaco > Conveyor(旧名PRhagger)で日本のAV女優一覧のRSSを取得してみる

Search
Feeds
Meta

Return to page top