前提・実現したいこと
######■前提
pythonで自社ECサイト(eccube)の受注データのcsvダウンロードを自動化したいと思っています。
以前自分で作成した、別サイトからのマスタデータのcsvダウンロードのPythonプログラムでうまくいった方法を流用して書いていたのですが、
以下のエラーメッセージが発生し、試行錯誤したのですが解決方法が分からず、質問させていただきました。
初回作成時は、以下サイトを参考にさせて頂きました。
https://gb-j.com/column/post-1911/
######■実現したいこと
pythonのrequestsを使って、
0. ECサイト管理ページに管理者アカウントでログイン
0. 対象受注データを期間(一週間前~今日)で指定して、csvダウンロードをリクエスト
0. csvファイルに名前を付けてフォルダ保存
今回は、2の時点で発生している500エラーの対応方法を教えていただきたいですm()m
発生している問題・エラーメッセージ
Traceback (most recent call last): File "\[ローカルフォルダパス]\Python\dlEcOrder.py", line 152, in <module> res.raise_for_status() # 4 File "C:\Users[ローカルフォルダパス]\AppData\Roaming\Python\Python310\site-packages\requests\models.py", line 953, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: https://[対象ECサイトドメイン]/admin/order/
該当のソースコード
Python
1#!python3 2# ECサイトから受注データをDL 3# pip install requests 4# pip install BeautifulSoup4 5# pip install datetime 6 7 8# モジュール読み込み 9import requests 10from bs4 import BeautifulSoup 11import datetime 12from datetime import date, timedelta 13import time 14 15 16#日付情報を準備 17today = datetime.date.today() 18t_year = str(today.year) 19t_month = str(today.month) 20t_day = str(today.day) 21 22a_week_ago_today = today + timedelta(weeks=-1) 23a_year = str(a_week_ago_today.year) 24a_month = str(a_week_ago_today.month) 25a_day = str(a_week_ago_today.day) 26 27 28# ログインページのURLから、BeautifulSoupオブジェクト作成 29url = "https://[対象ECサイトドメイン]/admin/" 30session = requests.session() 31response = session.get(url) 32bs = BeautifulSoup(response.text, 'html.parser') 33 34 35# クッキーとトークンを取得 36authenticity = bs.find(attrs={'name':txid'}).get('value') 37cookie = response.cookies 38 39 40# ログイン情報 41info = { 42 "txid": authenticity, 43 "mode": "login", 44 "loginid": "login", 45 "loginpasswd": "login", 46} 47 48 49# URLを叩き、ログイン先のhtmlを表示 50res = session.post(url, data=info, cookies=cookie) 51res.raise_for_status() #1 52 53 54# 受注管理ページへ遷移 55url = 56res = session.get("https://[対象ECサイトドメイン]/admin/order/") 57res.raise_for_status() #2 58 59 60# 受注データのDLリクエストURL 61url = "https:/[対象ECサイトドメイン]/admin/order/?" 62res = session.get(url) 63res.raise_for_status() #3 64 65 66# dataに項目をセット 67data = { 68 "txid:":authenticity, 69 "mode:":"csv", 70 "order_id:":"", 71 "search_page_max:":"500", 72 "search_supdateyear:":t_year, 73 "search_supdatemonth:":t_month, 74 "search_supdateday:":t_day, 75 "search_eupdateyear:":a_year, 76 "search_eupdatemonth:":a_month, 77 "search_eupdateday:":a_day 78 } 79 80header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/[ブラウザのユーザエージェント] (KHTML, like Gecko) Chrome/[ブラウザのユーザエージェント] Safari/[ブラウザのユーザエージェント]"} 81 82res = session.post(url, headers=header, data=data) 83res.raise_for_status() # 4 84 85# レスポンスで返ってきたコンテンツをcsvとして保存 86save_file_name = t_year + t_month + t_day + "-" + a_year + a_month + a_day +".csv" 87save_file_path = r"\[ローカルフォルダパス]\Python\EcOrder" 88save_file_path_join = os.path.join(save_file_path, save_file_name) 89 90with open(save_file_path_join, 'wb') as save_file: 91 save_file.write(res.content) 92
試したこと
res = session.post(url, headers=header, data=data) res.raise_for_status() # 4
の.post()を.get()に置き換えた場合は500エラーにならず、htmlが返ってきます(csvに保存されます)。
res = session.get(url, data=data) res.raise_for_status() # 4
が、.post()にすると500エラーとなってしまい・・・。
初歩的な質問でしたら申し訳ございません、類似の質問・回答が見つからず、新たに質問をさせていただきました。
対応方法をご教示いただけませんでしょうかm()m
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/07 02:14