Перевести ответ сайта в 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).

В итоге две проблемы у меня:

  1. перевести это всё в json
  2. удалить 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": "Успешная оплата"
}
→ Ссылка