Python WooCommerce API JSONDecodeError: Ожидаемое значение - PullRequest
0 голосов
/ 26 апреля 2018

Настройка

Я использую оболочку Python и WESTCommerce REST API для подключения к моему интернет-магазину.

Соединение установлено успешно,

from woocommerce import API

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    wp_api=True,
    version="wc/v1"
)

Для получения информации о продукте я использую,

products = wcapi.get("products")

Для считывания продуктов я использую

products.text

, который правильно дает мне продукты. См https://pastebin.com/E3r2R1GF.


Задача

* .text создает грязный макет. У меня есть это в библиотеке. Итак, я использую,

products.json()

но это дает следующую ошибку,

  File "<ipython-input-31-c9e41d3bee87>", line 1, in <module>
    products.json()

  File "/Applications/anaconda/lib/python3.6/site-packages/requests/models.py", line 892, in json
    return complexjson.loads(self.text, **kwargs)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/__init__.py", line 518, in loads
    return _default_decoder.decode(s)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)

  File "/Applications/anaconda/lib/python3.6/site-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())

JSONDecodeError: Expecting value

Что я делаю не так?

1 Ответ

0 голосов
/ 26 апреля 2018

Что я делаю не так?

Что ж, совершенно очевидно, предположить, что .json() может взять любой фрагмент сломанной разметки и автоматически превратить его во что-то, соответствующее json-совместимости, просто неправильно;)

Да и да - источник проблемы в том, что - как это часто бывает с php, - что, вероятно, было правильным ответом json, загрязняется php:

<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/pedicure/public_html/pedicuremotorkopen.be/wp-content/plugins/woocommerce-parcelpro_1-2-8/admin/data/parcelpro-shipping-settings-services.php</b> on line <b>88</b><br />
[{"id":25348,"name":"Star Design Spa & Massage","slug":"star-design-spa-massage","permalink":"https:\/\/en.pedicuremotorkopen.be\/product\/star-design-spa-massage\/","date_created":"2018-01-23T11:46:28","date_modified":"2018-02-

и т.д ...

EDIT:

Как я могу убедиться, что JSON не учитывает Предупреждение ?

Как я уже упоминал, проблема с источником связана с самим PHP. Если у вас есть доступ администратора к этому сайту, вы можете изменить настройки php, чтобы он не отображал ложные предупреждающие сообщения (что я и рекомендовал бы, если бы сайт действительно работал).

Для более общего ответа, я бы сказал, что сайт, возвращающий что-то кроме хорошо сформированного json для того, что должно быть типом приложения "json", поврежден, и что это не ваша ответственность (как пишет человек) код клиента), чтобы «исправить» его - просто предупредите администратора сайта о проблеме и подождите, пока он исправит ее (см. выше).

Теперь Вы, конечно, можете попытаться быть "терпимыми" и исправить содержимое ответа самостоятельно, но вам придется делать это вручную, и в лучшем случае оно будет хрупким, поскольку у вас нет надежного способа расскажите, что является частью json, а что нет (такое загрязнение php может произойти где угодно в содержимом ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...