Перевести ответ сайта в json
Я отправляю запрос на сайт (оплата подписки) и вот его примерный ответ:
b'date=2022-11-25T00%3A00%3A00%2B03%3A00&order_id=1&order_num=test&domain=convert.payform.ru&sum=1000.00&customer_phone=%2B79999999999&customer_email=email%40domain.com&customer_extra=%D1%82%D0%B5%D1%81%D1%82&payment_type=%D0%9F%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B0+Visa%2C+MasterCard%2C+%D0%9C%D0%98%D0%A0&commission=3.5&commission_sum=35.00&attempt=1&sys=test&products%5B0%5D%5Bname%5D=%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF+%D0%BA+%D0%BE%D0%B1%D1%83%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D0%BC+%D0%BC%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B0%D0%BC&products%5B0%5D%5Bprice%5D=1000.00&products%5B0%5D%5Bquantity%5D=1&products%5B0%5D%5Bsum%5D=1000.00&payment_status=success&payment_status_description=%D0%A3%D1%81%D0%BF%D0%B5%D1%88%D0%BD%D0%B0%D1%8F+%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D0%B0'
Мне надо эти данные как-то перевести в удобный Json формат, но сначала надо перевести из web кода на обычный текст и перевести дату в объект datetime. Как переводить с web кода в обычный текст я знаю, это делается с помощью метода
urllib unquote()
с датой тоже понятно, просто
datetime.strptime()
но когда я перевожу дату, мне хотелось бы перевести без tzinfo (оно там в конце +03:00).
В итоге две проблемы у меня:
- перевести это всё в json
- удалить tzinfo с конца даты, но желательно перевести в местное время.
У меня были идеи сделать это всё с помощью больших циклов и Сплита, но думаю это лишнее и хотел бы получить помощи, заранее спасибо большое за внимание!
Ответы (1 шт):
from urllib import parse
import time
import json
resp = 'date=2022-11-25T00%3A00%3A00%2B03%3A00&order_id=1&order_num=test&domain=convert.payform.ru&sum=1000.00&customer_phone=%2B79999999999&customer_email=email%40domain.com&customer_extra=%D1%82%D0%B5%D1%81%D1%82&payment_type=%D0%9F%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B0+Visa%2C+MasterCard%2C+%D0%9C%D0%98%D0%A0&commission=3.5&commission_sum=35.00&attempt=1&sys=test&products%5B0%5D%5Bname%5D=%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF+%D0%BA+%D0%BE%D0%B1%D1%83%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D0%BC+%D0%BC%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B0%D0%BC&products%5B0%5D%5Bprice%5D=1000.00&products%5B0%5D%5Bquantity%5D=1&products%5B0%5D%5Bsum%5D=1000.00&payment_status=success&payment_status_description=%D0%A3%D1%81%D0%BF%D0%B5%D1%88%D0%BD%D0%B0%D1%8F+%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D0%B0'
d = dict(parse.parse_qsl(resp))
d['date'] = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.mktime(time.strptime(d['date'], '%Y-%m-%dT%H:%M:%S%z'))))
js = json.dumps(d, indent=2, ensure_ascii=False)
print(js)
{
"date": "2022-11-24 21:00:00",
"order_id": "1",
"order_num": "test",
"domain": "convert.payform.ru",
"sum": "1000.00",
"customer_phone": "+79999999999",
"customer_email": "[email protected]",
"customer_extra": "тест",
"payment_type": "Пластиковая карта Visa, MasterCard, МИР",
"commission": "3.5",
"commission_sum": "35.00",
"attempt": "1",
"sys": "test",
"products[0][name]": "Доступ к обучающим материалам",
"products[0][price]": "1000.00",
"products[0][quantity]": "1",
"products[0][sum]": "1000.00",
"payment_status": "success",
"payment_status_description": "Успешная оплата"
}