27
もうブラウザは見たくない REQUESTSで始める明日5分早く帰る方法 山田 @DENZOWILL #STAPY 20160510

Requestsで始める5分前帰社

Embed Size (px)

Citation preview

Page 1: Requestsで始める5分前帰社

もうブラウザは見たくないREQUESTSで始める明日5分早く帰る方法

山田 聡@DENZOWILL

#STAPY 20160510

Page 2: Requestsで始める5分前帰社

WHO AM I?

非プログラマDBエンジニア6年生(PostgreSQL,Oracle)Python歴3年?worked at 株式会社アシストstapy参加8回目

Page 3: Requestsで始める5分前帰社

#STAPYでLTを7回やらせていただきました

http://www.slideshare.net/satoshiyamada71697

stapy05-stapy12DBエンジニアに必要なPython

Pythonでハガキに宛名書きする方法PythonでIPMessenger送る方法etc

Page 4: Requestsで始める5分前帰社

今日話すこと社内のイントラで提携業務を毎回マウスでやるのに消耗し

た山田がいろいろめんどくさくなって帰るのが遅くなるから

PythonのHTTPクライアントモジュール で効率化して23:00退社を22:55退社に改善しようって話

Requests

Page 5: Requestsで始める5分前帰社

CAUTION実際の私の勤務時間とは関係ございま

せん

Page 6: Requestsで始める5分前帰社

REQUESTS?サードパーティのHTTPクライアントライブラリ

Requestsは、人が使いやすいように設計されていて、Pythonで書かれているApache2 Licensed ベースのHTTPライブラリです。

Page 7: Requestsで始める5分前帰社

REQUESTSを使うべき3つの理由1. 直感的につかえる

このメソッドだろうと思ったものがちゃんとある2. 豊富な機能

GET/POSTのステートレスなリクエストからセッション作成してのステートフルなリクエストまでダイジェスト認証もデフォルトでできる

3. 作者がイケメンhttp://www.kennethreitz.org/

Page 8: Requestsで始める5分前帰社

天は二物を与えずは嘘

Page 9: Requestsで始める5分前帰社
Page 10: Requestsで始める5分前帰社

ぐぬぬ

Page 11: Requestsで始める5分前帰社

とてもつかうのが簡単import requests

# GETなんだからgetなのは自然res = requests.get("https://github.com/denzow/ipymessenger")# HTTPステータスコードもそのままres.status_code # ­> 200# 中身はtextで見られるprint res.text

Page 12: Requestsで始める5分前帰社

とてもつかうのが簡単import requests

# post用のデータはDictでそのままpayload = {'key1': 'value1', 'key2': 'value2'}

# POSTなんだからpostなのは自然res = requests.post("http://httpbin.org/post", data=payload)print res.text

Page 13: Requestsで始める5分前帰社

どうやって5分早く帰る?

Page 14: Requestsで始める5分前帰社

ブラウザ操作で投げているデータを真似られればイイ

Page 15: Requestsで始める5分前帰社

CHROMEならデベロッパツール

Page 16: Requestsで始める5分前帰社

NETWORKタブで確認可能

Page 17: Requestsで始める5分前帰社

効率化したいアクションをした後

CSSとかJSへのアクセスは無視大体MethodがPOSTのやつを調べればOK

Page 18: Requestsで始める5分前帰社

右クリックでパラメータとかをコピー

Page 19: Requestsで始める5分前帰社

{  "log": {    "version": "1.2",    "creator": {:

          "postData": { //このキーの下にある:            "params": [              {                "name": "key1",                "value": "value1"              },              {                "name": "key2",                "value": "value2"              }            ]          }        },::}

Page 20: Requestsで始める5分前帰社

パラメータがわかったらimport requests

# post用のデータはDictでそのままpayload = {'key1': 'value1', 'key2': 'value2'}

# POSTなんだからpostなのは自然res = requests.post("http://xxxxxxx", data=payload)print res.text

さっきと全然かわらないこれをfor文で回せば情シスにすぐ怒られる

Page 21: Requestsで始める5分前帰社

イントラはログインしないと使えないだろ

sessionをつかえばいけますimport requests

session = requests.session()auth_data = {"username":"xxxx", "password":"xxxxx" ....}# ログイン処理res = session.post("http://xxxxxxx/login", data=auth_data)# あとは好き勝手やるres = session.post("http://xxxxxxx/some_act", data={"key1":"data"})

Page 22: Requestsで始める5分前帰社

ちなみにGitHubにログインして云々

えらく大変CSRF対策とかの関係で結構他にやらないといけない事が多い投げるデータも多いイントラくらいのセキュリティでとりあえず遊ぶのが吉

Page 23: Requestsで始める5分前帰社

どうしてもやりたい素直にブラウザ操作自体をエミュレートしましょうJSいらないならMechanicalSoupが簡単

モジュール 補足mechanizeとBeautifulSoupを混ぜた合の子、Python3でも動作本当のブラウザ自体をコードで操作する。JSも動くブラウザライクな操作をコードで行う。Python2のみ。JSは動かない、古い

MechanicalSoup

Selenium

mechanize

Page 24: Requestsで始める5分前帰社

MECHANICALSOUP往年の名作mechanizeとHTMLパーサとして人気のBeautifulSoupの合の子2014年からの作成で比較的新しいライブラリブラウザ操作からHTMLパースまで一人でやれる偉い子

Page 25: Requestsで始める5分前帰社

まだまだ日本語のナレッジが少ないので次回のLTでどなたか是非

Page 26: Requestsで始める5分前帰社

皆様が明日22:55までに退社できる一助となれば幸いです。

Page 27: Requestsで始める5分前帰社

終わり