Your SlideShare is downloading. ×
0
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mojo::UserAgentかわいい (@ YAPC::Asia2013 前夜祭 LT-thon 2013-09-19)

1,466

Published on

Published in: Technology, Self Improvement
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,466
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mojo::UserAgent かわいい ~ use Mojolicious as HTTP client ~ 2013-09-19 @ LT-thon in YAPC::Asia 2013 turugina
  • 2. 皆さん、
  • 3. Mojolicious 好きですか?
  • 4. ですよね
  • 5. Mojolicious 萌え♡
  • 6. Mojolicious 萌え♡
  • 7. みんな大好きMojolicious ● http://mojolicio.us/ ● 現在のバージョン: 4.39 (2013-09-16)
  • 8. Mojolicious has... ● Web Server (HTTP, HTTPS, WebSocket) ○ Mojo::Server::* ● CLI Framework ○ Mojolicious::Command::* ○ test, cpanify, print routes, run as CGI, ○ you can write your own commands ● UserAgent (HTTP/WebSocket client) ○ Mojo::UserAgent, Mojo::Transaction::* ○ Mojo::Cookie:: ○ DOM/Selectors ● ojo module (for one-liner) ○ perl -Mojo -E ‘b(g(“mojolicio.us”)->body)- >html_unescape->say’
  • 9. As HTTP UserAgent Mojo::UserAgent Mojo::UserAgent::Transactor Mojo::Transaction::HTTP Mojo::Message::Request Mojo::Message::Response use
  • 10. Basic Usage use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; my $tx = $ua->get(‘URL’ => Header =>BODY); if ( my $res = $tx->success) { # $res をつかってごにょごにょ } else { my ($msg, $code) = $tx->error; die “$msg: $code”; }
  • 11. Get my $tx = $ua->post(‘http://www.example.com/login’, form => { username => ‘scott’, password => ‘tiger’ }); if ( my $res = $tx->success ) { for my $cookie (map {$_->res->cookies} @{$tx- >redirects}) { if ( $cookie->name eq ‘PHPSESSID’ ) { # ごにょごにょ } } }
  • 12. Put my $cookie = Mojo::Cookie::Response->new; $cookie->name(‘PHPSESSID’); $cookie->value($phpsessid); $cookie->path(‘/’); $ua->cookie_jar->add($cookie);
  • 13. Scraping my $coll = $res->dom(‘section#illust_list ul li a.work’); # $coll … Mojo::Collection $coll->each(sub { my ($e, $count) = @_; my $title = $e->find(‘h1’)->first->text; my $img_url = $e->find(‘img’)->first->attr(‘src’); # ごにょごにょ });
  • 14. JSON my $tx = $ua->post(‘...’, json => {loren => ‘ipsum’}); # assuming json in response: # { “result”: “ok”, “body”: {“title”: “hogehoge”} } if (my $res = $tx->success) { if ( $res->json(‘/result’) eq “ok” ) { say $res->json(‘/body/title’); } }
  • 15. ByteStream use Mojo::ByteStream; my $tx = $ua->get(‘http://.../foo.jpg’); if ( my $res = $tx->success ) { my $bs = Mojo::ByteStream->new($res->body); $bs->spurt(‘/tmp/foo.jpg’); say “MD5: “, $bs->md5_sum; }
  • 16. 普通に使う分には 超 優 秀
  • 17. Mojo::UserAgent Mojo::Server 優秀な子たちですから
  • 18. Easy to mashup Mojo::UserAgent Mojo::Server the Internet Data myapp Cache/DB HTML, js,... Service
  • 19. と、いうのを 2日くらいで作ってみた けどデータ元がpixivで自分のアカウントでログイン してるから公開はできない 2013-09-23追記: pixivのアカウント情報はバージョン管理に 入ってないことを確認したのでコード晒してみます: https://code.launchpad. net/~turugina/+junk/illust_sns_viewer 但し、このコードを使ってpixivさんに迷惑はかけないように!
  • 20. 概要 Mojo::UserAgent Mojo::Server pixiv 検索結果 画像 myapp DBM File Cache jQuery. Gallarie 「艦これかわいい」
  • 21. 艦これ KAWAII! http://www.pixiv.net/member_illust.php?mode=medium&illust_id=38587771
  • 22. Demo
  • 23. ご清聴ありがとうございました

×