Почему у меня на мой get запрос не выводится ответ сервера?
Почему у меня на мой get запрос не выводится ответ сервера? Все параметры запроса написаны правильно, программа останавливается на моменте
timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
if timestamp > i:
print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
i = timestamp
else:
pass
Общий вид кода
import requests
from datetime import datetime, date, time
global i
i = datetime.strptime("0001-01-01 01:01:00", '%Y-%d-%m %H:%M:%S')
while True:
data = {'from_datetime': i}
r = requests.get('http://xx.xx.xx.xx/getmessages' , params= data)
global message
for message in r.json():
if not message:
pass
else:
timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
if timestamp > i:
print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
i = timestamp
else:
pass
Ошибка:
Traceback (most recent call last):
File "/home/user1/Рабочий стол/podklycheniye/text.py", line 10, in <module>
for message in r.json():
File "/usr/lib/python3/dist-packages/requests/models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 525, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
Ответы (1 шт):
Автор решения: alex
→ Ссылка
area13@area13:~$ python3
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "[{'user': 'dfsf', 'text': 'ntrcn', 'timestamp': '2021-17-11 11:45:32'}] "
>>> import json
>>> json.loads(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 353, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
проблема в том, что в ответе одинарные кавычки, а json использует двойные кавычки.
Решение? просто замените кавычки в ответе
>>> s.replace("'", '"')
'[{"user": "dfsf", "text": "ntrcn", "timestamp": "2021-17-11 11:45:32"}] '
>>> json.loads(s.replace("'", '"'))
[{'user': 'dfsf', 'text': 'ntrcn', 'timestamp': '2021-17-11 11:45:32'}]
На всякий случай
import requests
import json
from datetime import datetime, date, time
global i
i = datetime.strptime("0001-01-01 01:01:00", '%Y-%d-%m %H:%M:%S')
while True:
data = {'from_datetime': i}
r = requests.get('http://xx.xx.xx.xx/getmessages' , params= data)
global message
for message in json.loads(r.text.replace("'", '"')):
if not message:
pass
else:
timestamp=datetime.strptime(message['timestamp'], '%Y-%d-%m %H:%M:%S')
if timestamp > i:
print(f">>> {message['user']}: {message['text']} ({message['timestamp']})\n")
i = timestamp
else:
pass