たった 37 行のコードでひたすらアイドル水着画像をあつめる(C++ + Boost.Asio だよ)


いまさらですが Boost.Asio + Boost.Xpressive を使って簡単に書いてみました。

[ソース]

// mizugi.cpp
#include <boost/xpressive/xpressive.hpp>
#include <boost/asio.hpp>
#include <iostream>

int
main(){
    boost::asio::ip::tcp::iostream s("matome.naver.jp", "http");
    if(!s){
        std::cout << "Unable to connect" << std::endl;
        abort();
    }

    s << "GET /odai/2135350364969742801 HTTP/1.0\r\n";
    s << "Host: matome.naver.jp\r\n";
    s << "\r\n";
    s << std::flush;

    std::string header;
    while (std::getline(s, header) && header != "\r"){}

    std::stringstream ss;
    ss << s.rdbuf();
    std::string body = ss.str();

    namespace x = boost::xpressive;
    auto chars = +(~x::as_xpr('>'));
    x::sregex token = "<img src=" >> chars  >> "class=\"MTMItemThumb\"" >> chars >> "/>";
    std::for_each(
        x::sregex_iterator(std::begin(body), std::end(body), token),
        x::sregex_iterator(),
        [](boost::xpressive::smatch const& what){
            std::cout << what[0] << std::endl;
        }
    );

    return 0;
}

[出力]

<img src="http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121231%2F99%2F942589%2F7%2F1062x1500xbc442e7e388abb674bd7f0.jpg%2F300%2F600&amp;twidth=300&amp;theight=600&amp;qlt=80&amp;res_format=jpg&amp;op=r" class="MTMItemThumb" title="日南響子" alt="日南響子" onerror="errorImage(this,'http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121231%2F99%2F942589%2F7%2F1062x1500xbc442e7e388abb674bd7f0.jpg%2F300%2F600&twidth=300&theight=600&qlt=80&res_format=jpg&op=r');" />
<img src="http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121227%2F99%2F942589%2F168%2F838x1200x78d8de233bbd01c147c0d8b.jpg%2F300%2F600&amp;twidth=300&amp;theight=600&amp;qlt=80&amp;res_format=jpg&amp;op=r" class="MTMItemThumb" title="" alt="" onerror="errorImage(this,'http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121227%2F99%2F942589%2F168%2F838x1200x78d8de233bbd01c147c0d8b.jpg%2F300%2F600&twidth=300&theight=600&qlt=80&res_format=jpg&op=r');" />
<img src="http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121212%2F99%2F942589%2F141%2F455x640xcc2735aa166b6c6e007f41fd.jpg%2F300%2F600&amp;twidth=300&amp;theight=600&amp;qlt=80&amp;res_format=jpg&amp;op=r" class="MTMItemThumb" title="" alt="" onerror="errorImage(this,'http://rr.img.naver.jp:80/mig?src=http%3A%2F%2Fimgcc.naver.jp%2Fkaze%2Fmission%2FUSER%2F20121212%2F99%2F942589%2F141%2F455x640xcc2735aa166b6c6e007f41fd.jpg%2F300%2F600&twidth=300&theight=600&qlt=80&res_format=jpg&op=r');" />
...以下省略...

[使い方]

適当にコンパイルして

$ mizugi.exe > photo.html

で、html に吐き出して開けばいいと思います。