たった 37 行のコードでひたすらアイドル水着画像をあつめる(C++ + Boost.Asio だよ)
- たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gym
- たった 4 行のコードでひたすらアイドル水着画像をあつめる(Python だよ) - maeharinの日記
- たった3行のコードでひたすらアイドル水着画像をあつめる(Rubyだよ) - Memo
いまさらですが 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&twidth=300&theight=600&qlt=80&res_format=jpg&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&twidth=300&theight=600&qlt=80&res_format=jpg&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&twidth=300&theight=600&qlt=80&res_format=jpg&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');" /> ...以下省略...