日常業務に 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/ 好...
話すこと <ul><li>日々行っているちょっとしためんどくさい業 務をperlを使ってなんとかしたい
でも日常業務といっても色々あるし、発表の時間も短い
ので、1つのテーマに絞って考える </li></ul>
MISSION:
勤
怠
管
理
シ
ス
テ
ム
を
攻
略
せ
よ
MISSION: 勤怠管理システムを攻略せよ
勤怠管理システム...
これは流石にperlで何とかできない
but
← の Web アプリ版 なら何とかなりそう!
例:こういうの
例:こういうの
早速
lwp-requestでアクセス(GET) <ul><li>lwp-request  -P &quot;http://ikisaki/change.php?empno=999&today_status=17&nextday_status=2&n...
lwp-requestでアクセス(GET) <ul><li>lwp-request  -P  &quot;http://ikisaki/change.php? empno=999 & today_status=17 & nextday_stat...
-P  -> no proxy (Intranet を想定 )
empno=999  -> 従業員番号:999
today_status=17  -> 出社しました
nextday_status=2  -> 明日の出社時刻を設定
nextday_hour=11&nextday_min=00  -> 明日の出社時刻(11:00 a.m.) </li></ul>
lwp-requestでアクセス(GET) <ul><li>lwp-request  -P  -d  &quot;http://ikisaki/change.php?empno=999&today_status=17&nextday_statu...
-d  -> リクエスト結果を標準出力に出力しない </li></ul>
「うちのシステムは POST じゃないと受け付けないよ><」
lwp-requestでアクセス(POST) <ul><li>perl -e &quot;print q{empno=999&today_status=17&nextday_status=2&nextday_hour=11&nextday_mi...
-m POST  -> HTTPメソッド指定
-c application/x-www-form-urlencoded  -> POSTデータのcontent-typeを指定 </li></ul>
いっそone-linerで <ul><li>perl -MLWP::UserAgent -e “LWP::UserAgent->new->post(qw{http://ikisaki/change.php empno 999 today_sta...
「 Basic 認証かかってますから><」
lwp-requestで(以下略) <ul><li>lwp-request -P -d  -C turugina:hogehoge  http://ikisaki/(r y
Upcoming SlideShare
Loading in …5
×

日常業務にperlを使おう

3,198 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,198
On SlideShare
0
From Embeds
0
Number of Embeds
467
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

日常業務にperlを使おう

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

×