浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Python】Requests でセッションが必要な処理を自動化

 Requests は Python の HTTP クライアントライブラリの一つです。よくある pip install のみで導入できます。
python -m pip install requests
psf/requests: A simple, yet elegant HTTP library.
 Requests はシンプルな API をたたくのに最も適しています。例えば、次のコードで Backlog の課題登録 API にアクセスできます。

import requests

BACKLOG_URL = "https://hogehoge.backlog.jp/api/v2/issues"  # 各人の Backlog ドメインのURL
API_KEY = "hogehogefugafuga"  # Backlog の個人設定 > API から発行できるトークン
PROJECT_ID = 104607  # プロジェクトID
ISSUE_TYPE_ID = 485681  # 課題種別ID
CATEGORY_ID = 279257  # カテゴリID
PRIORITY_ID = 3  # 優先度
ASSIGNEE_ID = 251977  # ユーザID


def main():
    request_data = [
        {
            'summary': '会員登録機能',
            'startDate': '2018-12-07',
            'endDate': '2018-12-08',
        }, {
            'summary': '会員削除機能',
            'startDate': '2018-12-08',
            'endDate': '2018-12-09',
        }
    ]
    # ↑の部分的なリクエストを共通リクエストとまとめて POST
    for data in request_data:
        params = {
            'apiKey': API_KEY,
            'projectId': PROJECT_ID,
            'summary': data['summary'],
            'issueTypeId': ISSUE_TYPE_ID,
            'categoryId[]': CATEGORY_ID,
            'priorityId': PRIORITY_ID,
            'startDate': data['startDate'],
            'dueDate': data['endDate'],
            'estimatedHours': 7,
            'assigneeId': ASSIGNEE_ID,
        }

        response = requests.post(BACKLOG_URL, params=params)
        print(response)


if __name__ == '__main__':
    main()

 これだけでも便利なのですが、ブラウザのセッション相当のこともできます。これを使うことでブラウザを直に動かさなくともログイン機能付きの web サイト上で色々できます。使い方は次の様に Session を持つと定義した Requests のオブジェクトを使いまわして GET, POST 等し続けるだけです。

############
# attend.py
############
import requests

from hoge.login import login
from hoge.attend import attend

if __name__ == '__main__':
    # メインプログラム。各モジュールを呼び出して、やりたいリクエストを実行
    res = requests.sessions.Session()
    login(res) # セッションにログイン情報を持たせるリクエストを実行
    attend(res) # ログイン済みのセッションで出社リクエストを実行

############
# hoge/login.py
############
def login(res):
    """
    ログインリクエスト
    :param res:
        res = requests.sessions.Session()
    :type res: requests.sessions.Session
    :return:
    """
    # TOPページ(ログインページ)にアクセス
    res.get('https://hoge.example.com/index')
    # ログインページにアクセスして生まれたであろうセッション(実装次第。不要なことも多々あり)を維持してログイン
    res.post('https://hoge.example.com/login', data={
        'id': 'exampleId'
        'password': "hogehoge",
        'token': "exampleToken"
    })
############
# hoge/attend.py
############
def attend(res):
    """
    出社リクエスト
    :param res:
        res = requests.sessions.Session()
    :type res: requests.sessions.Session
    :return:
    """
    # ログイン後にのみできる出社のリクエストをPOST
    res.post('https://hoge.example.com/attend')

 上述の例の様に Requests でセッションを使うことによってブラウザで見る様なページでもコマンドラインのスクリプトとして自動で作業ができます。
 セキュリティ用のトークンが何らかのレスポンスで返ってくる HTML 内に埋め込まれている様な場合は、別途 Beautiful Soup の様な HTML パーサーライブラリを利用して次のリクエストにつなげられるようにレスポンスを加工してなんやかんやするのが近道です。
waylan/beautifulsoup: Git Clone of Beautiful Soup (https://code.launchpad.net/~leonardr/beautifulsoup/bs4)
Beautiful Soup: We called him Tortoise because he taught us.

  • この記事いいね! (0)