2008-08-22

http://anond.hatelabo.jp/20080821224627

おー、使ってくれてる奇特な奴がいるとはうれしいねぇ。

感謝の気持ちを込めて実はアレから少しバージョンアップしてるのでそれを公開しますよ!

改善点は2点。

終了判定の変更

で、以前取得したことのある画像にぶつかるとそこでプログラム終了。

これを修正。これ微妙なんだよね。4u.pl動かしてる最中画像が投稿されるとページングしたときに既に取得した画像にぶつかってしまって止まっちゃうんだよねー。

なので、最後に取得した画像にぶつかったらプログラム終了するように変更した。

画像が無い場合の挙動

元のURL画像削除されてしまって取得できなかった場合に、今までは.plainとかいうダミーデータが保存されてしまっていたが、それを4Uの画像を取得するように変更。

これで元画像が消えてても一応4Uから取得できるので取りこぼしが無くてヤッターって感じだねー。

でわでわコードは以下。


#!/usr/local/bin/perl -w
use strict;
use warnings;

use Web::Scraper;
use URI;
use Perl6::Say;
use MIME::Type;
use LWP::UserAgent;
use Path::Class;
use Data::Dumper;sub p { print Data::Dumper::Dumper(@_) };

my $page = shift || 10000;
unless ( $page =~ /^\d+$/ ) {
    die 'perl 4u.pl [page as int]';
}

my @files = dir('./img/')->children;
my $cache = {};
my $end_file = { mtime => 0 , file => '' };
for my $file (@files) {
    if ( $file->basename =~ /^(.+)\.(.+)$/ ) {
        $cache->{$1} = $2;
    }
    if ( $end_file->{mtime} < $file->stat->mtime ) {
        $end_file->{mtime} = $file->stat->mtime;
        $end_file->{file} = $file;
    }
}

for my $i (1..$page) {
    
    my $url = sprintf 'http://4u.straightline.jp/?page=%s' , $i;
    
    say "request url>".$url;
    
    my $tmp = scraper {
        process 'ul.entry-list>li>div.entry-body>div.entry-photo>a', 'link[]' => '@href';
        process 'ul.entry-list>li>div.entry-footer>div.wrapper-entry-description>div.entry-description>p.entry-img-src', 'img[]' => 'TEXT';
        result 'link','img';
    }->scrape(URI->new($url));
    
    my $links = $tmp->{link};
    my $imgs  = $tmp->{img};
    
    if ( ref $links ne 'ARRAY' ) {
        say "end program.";
        exit;
    }
    
    for my $link (@$links) {
        $link =~ m{/([^/]+)$};
        my $sesid = $1;
        
        if ( $end_file->{file} &amp;&amp; $end_file->{file}->basename =~ /^$sesid\./ ) {
            say "file exsits end program >".$sesid;
            exit;
        }
        
        if ( $cache->{$sesid} ) {
            say "file exsits next >".$sesid;
            next;
        }
        
        sleep 1;
        
        my $image_url = shift @$imgs || next;
        $image_url = 'http://'.$image_url;
        
        say "get image url    >".$image_url;
        
        my $ua = LWP::UserAgent->new;
        my $req = HTTP::Request->new(GET => $image_url);
        my $res = $ua->request($req);
        my $content = $res->content;
        my $content_type = $res->headers->header('content-type');
        my $ext = MIME::Type->new( type => $content_type )->subType || 'bin';
        
        if ( $ext eq 'plain' ) {
            say "not found image  >".$image_url;
            # 本家画像が消えてたら4Uの奴を保存する。
            my $image_url = 'http://www.straightline.jp/html/found/static/upload/l/l_'.$sesid.'.jpg';
            say "get 4u image url >".$image_url;
            my $req = HTTP::Request->new(GET => $image_url);
            my $res = $ua->request($req);
            $content = $res->content;
            $ext = 'jpeg';
        }
        
        my $write_path = './img/'.$sesid.'.'.$ext;
        
        open my $FH, '>', $write_path;
        binmode $FH;
        print $FH $content;
        close $FH;
        
        say "write image      >".$write_path;
    }
}

言わずもかなコードカオスなのでよろしゅうたのんます。

トラックバック - http://anond.hatelabo.jp/20080822142610
  • [perl]「,」と「=&gt;」の違いについて

    結論→一緒。 すまん嘘。 ほぼ同じ意味だって言いたかったの。カンマもイコールダイナリもほとんど同じ感覚で使用できる。 唯一つ違うのはイコールダイナリの左辺に置いた文字列は...

    • プログラ増田のあなぐら

      [perl]「,」と「=&gt;」の違いについて

      • 4Uの画像が美しすぎてPerlでプログラム組んでみた

        4Uって知ってるかい? http://4u.straightline.jp/ ”世界中の美女画像を皆でシェアするソーシャルイメージブックマークサービス” とのことさ。それはほんともう美しい画像が満載で毎日見...

        • http://anond.hatelabo.jp/20080821224627

          これのおかげで画像ファイルがとうとう8,000個(1GB!)を超えてしまい、どうしたものかと思っていたところ、いいものを発見。 Vredefort(フレデフォート) いわゆるデジタルフォトフレーム。SON...

          • http://anond.hatelabo.jp/20080821224627

            おー、使ってくれてる奇特な奴がいるとはうれしいねぇ。 感謝の気持ちを込めて実はアレから少しバージョンアップしてるのでそれを公開しますよ! 改善点は2点。 終了判定の変更 ...

            • http://anond.hatelabo.jp/20080822142610

              バージョンアップ、キタ━━━━━━(゜∀゜)━━━━━━ !!!!! [明日ためす]

            • http://anond.hatelabo.jp/20080822142610

              スーパーpre記法がアレなまま直ってないわけで。 姉妹サイト(?)ができていたわけで。 なにやらcookieを食べようとした形跡があるわけで。 #!/usr/local/bin/perl -wuse strict;use warnings;use Web::Scraper...

      • [perl]内部的に数値か文字かを判別する

        どうーでもいいーですよー。 どうでもいい話ー、聞いてください。 Perlというやつは一応内部的には数値か文字列かをちゃんと分けて変数の管理をしているのです。 でわ、現在ある変...

      • Shift_JISにおける危険な文字まとめ

        今時Shift_JISでプログラミングするバカな奴はいないだろうけど折角まとめたので公開 2バイト目がアスキーコードど丸被りしているものを列挙する @ [ \ ] ^ _ ` { &#124; }...

        • [セキュリティ]今日は増田的情報セキュリティの日

          私は単なる一増田でしかないのだが、なんとなく今日を増田的情報セキュリティの日とすることに決めた。 なぜって、今日は、年末年始という忙しく、そして狙われやすい時期をはさみ...

        • [UTF8][EUC-JP][Shift_JIS]

          Shift_JISにおける危険な文字まとめ 携帯サイトをUTF-8で出力するかShift_JISで出力するか - F.Ko-Jiの「一秒後は未来」

      • [perl]autobox::Unix

        autoboxが流行ってるのになんで誰もコレを作らないのか不思議遊戯 package autobox::Unix;sub SCALAR::rm { my $dir = shift; my $option = shift; `rm $option $dir`;}# etc・・・use autobox;use autobox::Core;use autobox...

      • [PHP]PHPでPerlのqwを実現するお!

        function qw ($str) { return preg_split(&#39;/&#92;s+/&#39;,$str,-1,PREG_SPLIT_NO_EMPTY);}$data = qw(&#39; hoge muge dae&#39;);print_r($data); にゃろめ。 プログラ増田のあなぐら

      • [ruby]rubyでNabeAtzz

        そろそろ FizzBuzz に飽きた - にぽたん研究所 NabeAtzzが空前のブームということで俺もRubyで書いてみた。 list = %W/さん ろく きゅう じゅうに じゅうさん じゅうご じゅうはち にじゅういち ...

      • 敬意を払おう

        フレームワークとか使ってるともはや隠蔽されすぎて自分で実装しようなんて思わないのが普通である。 ましてや車輪の再開発などもってのほか、バグを生み出す温床にしかならない。 ...

        • http://anond.hatelabo.jp/20160323090449

          ブコメの。 さそりアーマーに殺される夢を見た増田 俺はさそりアーマーに殺される夢を見たな 80年代女性アイドル論の増田 マスダ80年代女性アイドル論~総論 おまえは今まで食っ...

      • PerlのClass::Data::Inheritableの解析

        唐突にClass::Data::Inheritableのソースコードについて説明してやんよ。 使い方とかの説明はこの辺でも読んでから出直して来い、ごるぁ! まぁとりあえずソース見てみろ、下記にはっつけ...

      • [perl][Moose]Moose?Mooseってなんだ?あれか?整髪料か?え?Perl?

        最近Perl界隈ではMoose、MooseってなんかMooseってのが流行ってるらしい。 もう完全に出遅れてしまったので増田で書き殴ってみる。 自分自身のブログでは、さもずっと前からMoose知ってた...

      • [perl]もういつでもどこでもだれでもMooseでいいじゃねぇか

        おれはもうMooseしかつかわねぇ。後にも先にもMooseMooseMooseMooseMoose!!!!!!!!!!!1111111 ってな人の為にいつでもどこでもMooseする。automooseを実装しますた。 package automoose;use stric...

      • うんコード

        例えば下記の擬似コード i = 1; while( i &#38; 7 ) { i++; } 勘弁して。いや、わかるよ。言いたいことはさ。でも俺こういう書き方慣れてないから脳内で素早く2進数変換できないの。 いや単...

      • 増田でリンク名付きでURL張ると化けるので

        つまり下記のような書き方をした場合の話 [http://anond.hatelabo.jp/0000000:title=あああテスト] キーワードがリンクされてしまってうまくリンク名として認識されない。 詳しくはこの記事を読...

      • PHPの比較の素晴らしさ加減は正常

        if ("0x0A" == "10") { print '(´ε` )チュッ';} チュッ。されちゃいます。 文字列であっても整数と解釈できる文字列の場合は勝手に型変換しやがる今世紀最大の愚行を犯してしまうっての...

        • http://anond.hatelabo.jp/20090617130518

          興味深い。できたらblogでやってほしいところ。 増田だと流れちまうからなあ。

        • http://anond.hatelabo.jp/20090617130518

          プログラミングのこういう細かいところが死ぬほど嫌い。発狂するほど嫌い。 文字コードとかマジクソが死ねよって感じ。 こういうののせいでいつまでたってもプログラミングが好きに...

          • http://anond.hatelabo.jp/20090617132348

            PHPみたいな糞とまともなプログラミング言語を一緒にするなよw 文字コードについては言語レベルではどうにもならんことはあるが、他の言語での扱いは少なくともPHPよりは楽。 バッド...

            • http://anond.hatelabo.jp/20090617140839

              PHPに限らず、CとかC++もめんどくせーこと多くて嫌いなんだよ…。 あ、C/C++もまともな言語じゃないっすか。そうっすか…。

              • http://anond.hatelabo.jp/20090617144121

                C/C++はあくまでもCPU依存性を減らしたアセンブラであって、面倒くささを耐える代わりに速度を稼ぐという特殊用途言語なんだから、「プログラミングは面倒だ」というには局所的すぎる...

                • http://anond.hatelabo.jp/20090617212621

                  バッドノウハウ…! これですよ。こういうのがマジウザい。 何がバッドノウハウだよただ仕様が終わってるだけじゃねーかカスが!って思う。 ああいうクソ仕様素晴らしい仕様をいか...

                  • http://anond.hatelabo.jp/20090617215552

                    バッドノウハウってのはかっこつけた単語じゃなくて、奥が深い症候群を戒めた語だよ。 自分が知ってる「業界の雰囲気」ってのが偏ったものだと知覚した方がいい。 それが相応しい...

                    • http://anond.hatelabo.jp/20090617223655

                      職務的にはC++が適してるから使ってるんだなあこれがまた。 業務系SEやってる友達と話したときはC++wwwねえよwwwせめてC#にしとけwwwって感じだったけど。 業務系システムはプログラミン...

              • http://anond.hatelabo.jp/20090617144121

                C・C++の面倒くさいことって具体的に何? 自分は仕VB・C・C++しか使ったことないが、面倒くさいと思ったことない。 他の言語ってそんなに楽なんだろうか?

                • http://anond.hatelabo.jp/20090617222616

                  その経歴なら是非スクリプト言語を使ってみることを勧める。 Ruby, Perl, Pythonのうち1つは覚えた方がいい。絶対役に立つよ。 一昔前ならPerlを進めてたところだけど、今ならRubyかな。 ht...

                • http://anond.hatelabo.jp/20090617222616

                  型。状況や文脈を判断してよきに計らってほしい。 ポインタ。と言うよりメモリ管理か。必要に応じて増やすなり減らすなりよきに計らってほしい。

                • http://anond.hatelabo.jp/20090617222616

                  めんどくせーめんどくせー言ってる増田だけど。 C/C++はまずガベージコレクタが無いのがめんどくさすぎる。いちいちライブラリ導入したりboostのスマートポインタ使ったりしなきゃいけ...

                  • http://anond.hatelabo.jp/20090617231810

                    適材適所 sed ちょっとした正規表現抜き出しに perl そこそこの文書処理に Java わりと何でもいけるが、わりと平均的にめんどくさい JSP メモリ64K制限さえなければすばらしかったが、Ja...

        • http://anond.hatelabo.jp/20090617130518

          PHPで一番困るのは、この手の変換が直感的でも統一的でもなことだな。 「自分が何をしようとしているのか」が素直に書けないんだよね。 言語として元になっているPerlにも文字と数値...

        • http://anond.hatelabo.jp/20090617130518

          PHPの「==」は「数値として比較する」ためのものであって、そもそも文字列として比較するときに使うためのものではないという説。 文字列比較を意図するのであれば、 if (strcmp(&quot;0x0A...

          • http://anond.hatelabo.jp/20090617164618

            文字列比較を意図するのであれば、 if (strcmp("0x0A", "10")) { print '(´ε` )チュッ';} とすべき。当然チュッされない。 strcmp()は文字列が等しいときに0になるから、これだとチュッされ...

          • http://anond.hatelabo.jp/20090617164618

            そこの増田よ。 strcmpの使い方を間違っておられる。 さっと手元で書いたから間違えたのならまだいいが、いつもその書き方をしてるのなら君書いたプログラムには重大なバグが潜んで...

        • PHPではa==b, b==cでもc!=aなことがある

          PHPの比較の素晴らしさ加減は正常 @ はてな匿名ダイアリー PHPの「==」は数値比較なので、文字列は数値に変換されてから比較される。 PHPの「文字列→数値」の暗黙の変換は、文字...

        • http://anond.hatelabo.jp/20090617130518

          ===演算子を使えよ if ("0x0A" === "10") { print '(´ε` )チュッ';}else{ print '\(^o^)/';} \(^o^)/ ==演算子は方をキャストしながら、ほぼ同じなら同じと見なせという意味。 HTMLとかで曖昧に...

          • http://anond.hatelabo.jp/20090618113950

            自己レス 012とかは、よく桁のパディングで 000001 と 1が同じであることを見つけるとかって処理をするから、8進数と見なしてくれるより、10進数で0詰めって見なしてくれた方が、テキ...

          • http://anond.hatelabo.jp/20090618113950

            もちつけ。 ===演算子を使うなとは書いてないし、8進数使いたいとも書いてない。 元記事はただ事実をありのまま書いているだけだ。 そして誰も「つのだ★ひろ」には突っ込まないw

            • http://anond.hatelabo.jp/20090618115402

              えー、PHPの世界ではそういうときは===をつかうってなってるのに・・・ わざわざ==を使って 他の言語の規則を持ってきてどうのこうの言って===に触れないってのは、ちょっと意地悪い...

              • http://anond.hatelabo.jp/20090618115804

                ===なんていう意味不明な変態演算子をわざわざ使わなきゃいけない言語なんて…。 まぁPHPさわったことないけど。

              • http://anond.hatelabo.jp/20090618115804

                String型同士の比較であっても整数と解釈される文字列の場合は整数に変換される。 この仕様は知っていたが、まさか0x0Aという文字列が、普通にキャストした場合は0にしかならないのに...

                • http://anond.hatelabo.jp/20090618121442

                  もともと if("0x0a" == 10){ } を成り立たせた方が都合がよい。というのの応用で "0x0a" == 10 == "10" となるだけだからねぇ。 if ("0x0A" == 0x0A) { print '(´ε` )チュッ';}else{ print '\(^o^)/';} は'(...

        • [PHP]PHP「”0x0A” == ”10”はTRUEですがよろしいですか」

          ぼく「えっ」 PHP「”0x0A” == ”10”はTRUEになりますが」 ぼく「いえFALSEです」 PHP「えっ」 ぼく「えっ」 PHP「まだ比較したことがないということでしょうか」 ぼく「えっ」 PHP「えっ」 ...

        • [PHPコーディング規約][PHP]

          PHPコーディング規約  http://www.sksk.info/php.html 404 Blog Not Found:そろそろPHPに関して一言いっとくか  http://blog.livedoor.jp/dankogai/archives/50835571.html 404 Blog Not Found:「PHPなめんな」と「(Perl|Pytho...

          • http://anond.hatelabo.jp/20090618152620

            こうやって並べてみると PHP(C/Java/Ruby/Python好きな物に置換可能)は、良い・悪いの議論って、 本当に、隣の葡萄はすっぱい。俺のレモンは甘い 議論なんだなぁと。

        • 「はてな匿名ダイアリーによるプログラミング言語ユーザー論まとめ」をトゥギャりました

          プログラミング言語ヒエラルキーにおける罵倒 http://anond.hatelabo.jp/20070502200124 phpのいやなところ / perlのいやなところ http://anond.hatelabo.jp/20070522174725 LL編プログラミング言語ヒエラルキーに...

      • PHPのあの関数をPerlでやるには?

        元ネタ http://phpspot.org/blog/archives/2009/12/phpjavascriptph_1.html 面白そうだと思ったので僕もやってみた。モジュールはPerl5.8系の標準モジュールのみ利用可という制限。 全部はキツイので関数...

      • [PHP]create_functionで生成された匿名関数の一覧を得る関数

        ひーほー。いやぁさてさて一体このコード中に何度create_functionで匿名関数が生成されたのかふと気になったあなたのためにこんな関数を作ってみたよ! function get_lambda_functions () { $i ...

      • うたまっぷと歌ネットの歌詞をコピペするブックマークレット

        を作ってみた。 うたまっぷ javascript:(function(){%20var%20t;%20var%20d=document;%20var%20h=new%20XMLHttpRequest();%20var%20r=d.location.href.match(/surl=([A-Za-z0-9]+)/);%20h.open('GET','phpflash/flashfalsephp.php?unum=?'+r[1],true);%2...

      • PHPでQuineプログラミング

        &#82;&#117;&#98;&#121;&#12391;&#12358;&#12393;&#12435;&#12370;&#81;&#117;&#105;&#110;&#101;&#40;&#12392;&#65;&#65;&#22411;&#81;&#117;&#105;&#110;&#101;&#12398;&#20316;&#12426;&#26041;&#35611;&#24231;&#41; &#112;&#101;&#114;&#108;&#32;&#45;&#32;&#81;&#...

      • [ruby]闇プログラマーによる、うるう年の判定処理

        以下の記事を読んだ私は違和感を覚えた。 &#31169;&#12364;&#12477;&#12501;&#12488;&#12454;&#12455;&#12450;&#25216;&#34899;&#32773;&#12434;&#12420;&#12417;&#12383;&#29702;&#30001; 今時のソフトウェア技術者というものは...

        • http://anond.hatelabo.jp/20100925163206

          sqlとかでisdateしてやれば済むお話しさー。 最初の要件定義にうるう年について書かれていなければ、うるうどしが来たらうるう年対応でお金をもらえばいいじゃない。 というより、綺麗...

          • http://anond.hatelabo.jp/20100925165528

            超人が500行で1時間で書いたスマートなプログラムよりも、凡人が10000行、1カ月かけてつくったプログラムのほうがお金にはなるんだ。 マジレスすると、上記の条件であれば、案件...

      • より良いPHPerにならないための20Tips

        http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/ 良いPHPerだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。 つまり...

        • http://anond.hatelabo.jp/20110320223445

          ペロペロ 1. htmlのはき出しがあるやつは?&gt;を書いたほうがいいよ。それ以外は最近はかないのがはやりだねさらに昔はevalとかで書いてた 2. configこれはwwwやpublic_html以下にしかconfigを配...

        • http://anond.hatelabo.jp/20110320223445

          21. 分散SCMを使え なにはともあれまずはコミットだ 粒度だクソだはpushするときにかんがえろ 1コミットで合わせて全然関係ない別の場所を変更したおまえは死刑だ

        • より良いPHPerになるための20Tips

          去年の話ですが、海外でこんな記事が上がっていました。 20 Tips you need to learn to become a better PHP Programmer 記事の内容は、かなりレベルが低いです。 しかし、初心者のうちに知っておけば、...

      • プログラミング出来ない奴あっちよりこっち来い

        http://anond.hatelabo.jp/20130322031333 プログラミング出来る方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。 こんなタイトルに...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

        • 英語しゃべれない奴ちょっと来い

          http://anond.hatelabo.jp/20130322202542 コレ見て書いてみたくなっただけ。 英語が話せるようになる方法教えるだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん