• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
 日常業務にperlを使おう
 

日常業務にperlを使おう

on

  • 2,557 views

YAPC::Asia Tokyo 2011 のLTで発表したスライドです。

YAPC::Asia Tokyo 2011 のLTで発表したスライドです。

Statistics

Views

Total Views
2,557
Views on SlideShare
2,162
Embed Views
395

Actions

Likes
1
Downloads
5
Comments
0

6 Embeds 395

http://floralcompany.jp 370
http://paper.li 11
http://webcache.googleusercontent.com 11
http://a0.twimg.com 1
http://b.hatena.ne.jp 1
http://cache.yahoofs.jp 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

     日常業務にperlを使おう 日常業務にperlを使おう Presentation Transcript

    • 日常業務に perl を使おう Let's use perl in your daily work 2011-10-14 @YAPC::Asia Tokyo 2011 turugina
    • 自己紹介 H.N. : turugina Web Site : http://floralcompany.jp/ Twitter : @turugina CPAN : http://search.cpan.org/~turugina/ 好きな言語 : Perl, C++ 好きじゃない言語 : Ruby, Java
    • 話すこと
      • 日々行っているちょっとしためんどくさい業 務をperlを使ってなんとかしたい
      • でも日常業務といっても色々あるし、発表の時間も短い
      • ので、1つのテーマに絞って考える
    • MISSION:
    • MISSION: 勤怠管理システムを攻略せよ
    • 勤怠管理システム...
    • これは流石にperlで何とかできない
    • but
    • ← の Web アプリ版 なら何とかなりそう!
    • 例:こういうの
    • 例:こういうの
    • 早速
    • lwp-requestでアクセス(GET)
      • lwp-request -P "http://ikisaki/change.php?empno=999&today_status=17&nextday_status=2&nextday_hour=11&nextday_min=00"
    • lwp-requestでアクセス(GET)
      • lwp-request -P "http://ikisaki/change.php? empno=999 & today_status=17 & nextday_status=2 & nextday_hour=11&nextday_min=00 "
      • -P -> no proxy (Intranet を想定 )
      • empno=999 -> 従業員番号:999
      • today_status=17 -> 出社しました
      • nextday_status=2 -> 明日の出社時刻を設定
      • nextday_hour=11&nextday_min=00 -> 明日の出社時刻(11:00 a.m.)
    • lwp-requestでアクセス(GET)
      • lwp-request -P -d "http://ikisaki/change.php?empno=999&today_status=17&nextday_status=2&nextday_hour=11&nextday_min=00"
      • -d -> リクエスト結果を標準出力に出力しない
    • 「うちのシステムは POST じゃないと受け付けないよ><」
    • lwp-requestでアクセス(POST)
      • perl -e "print q{empno=999&today_status=17&nextday_status=2&nextday_hour=11&nextday_min=30}" | lwp-request -P -d -m POST -c application/x-www-form-urlencoded http://ikisaki/change.php
      • -m POST -> HTTPメソッド指定
      • -c application/x-www-form-urlencoded -> POSTデータのcontent-typeを指定
    • いっそone-linerで
      • perl -MLWP::UserAgent -e “LWP::UserAgent->new->post(qw{http://ikisaki/change.php empno 999 today_status 17 nextday_status 2 nextday_hour 11 nextday_min 00})”
    • 「 Basic 認証かかってますから><」
    • lwp-requestで(以下略)
      • lwp-request -P -d -C turugina:hogehoge http://ikisaki/(r y
      • -C turugina:hogehoge -> Basic認証のcredencial
    • 「パスワード丸見えかよ><」
    • 諦めてコードを書く use strict; use warnings; use LWP::UserAgent; use Config::Pit; my $cfg = pit_get("ikisaki" , require => { user => "your user id", pass => "your pass" }); my $ua = LWP::UserAgent->new; $ua->credentials( "ikisaki:80", "ikisaki", @$cfg{qw{user pass}} ); my %setting = ( empno => 999, today_status => 17, ... ); $ua->get( 'http://ikisaki/change.php', %setting ); # or $ua->post( 'http://ikisaki/change.php', %setting );
    • 「ちゃんと form にアカウント名とパスワード書いてログインしてよ><」
    • WWW::Mechanize use WWW::Mechanize; use Config::Pit; my $cfg = pit_get("ikisaki" , require => { user => "your user id", pass => "your pass" }); my $ua = WWW::Mechanize->new; $ua->get("http://ikisaki/index.php"); $ua->submit_form( # ログイン form_id => "login", with_fields => $cfg ); $ua->submit_form(...); # 出社設定とか何か色々
    • 「 Flash( 以下略 「 Silverlight( 略 「 ActiveX(ry
    • (# ノ ° 皿 ° ノ ⌒ ┴┴
    • Win32::GuiTest use Win32::GuiTest qw/:ALL/; system(qq{cmd.exe /c "start explorer http://ikisaki/"}); my $w = WaitWindow('.*Windows Internet Explorer$', 30) or die "window not found!"; sleep 10; # ← Flash がロードされるのを待ってる SendKeys("username{TAB}password~"); sleep 10; # ← ログイン処理が終わるのを待ってる SendKeys(.....) s.a. 「 Perl で無理ゲー攻略 (How to play Win32::GuiTest) 」 TAKESAKO (Sat Oct 15 12:10) -
    • 注意
      • ちゃんと実行結果は確認しよう
      • Intenet越しの場合は意図しない「攻撃」にならないように注意しよう(e.g. 某社製図書館システム)
    • 以上
    • ご清聴ありがとうございました m(_ _)m