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

  • 2021年7月6日
  • 2021年7月7日
  • Python

 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.

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG