Ограничение длины ответа запросами Python - PullRequest
0 голосов
/ 31 мая 2019

Я настраиваю представления, которые сохраняют данные из API в моей базе данных одним нажатием кнопки, и мне трудно понять, как ограничить размер ответа на запросы для описаний продуктов в следующем способ:

Если длина описания превышает 2000, удалите некоторые буквы в конце, пока он не достигнет предела 2000, но не удаляйте его полностью из запроса.

На данный момент я смог полностью удалить информацию о продукте, если длина превышает 2000, как вы можете видеть ниже.

Моя функция просмотра django:

def api_data(request):
    if request.GET.get('mybtn'):  # to improve, == 'something':
        resp_1 = requests.get(
            "https://www.test-headout.com/api/public/v1/product/listing/list-by/city?language=fr&cityCode=PARIS&limit=5000&currencyCode=CAD",
            headers={
                "Headout-Auth": HEADOUT_TEST_API_KEY
            })
        resp_1_data = resp_1.json()
        base_url_2 = "https://www.test-headout.com/api/public/v1/product/get/"

        for item in resp_1_data['items']:
            # concat ID to the URL string
            url = '{}{}'.format(base_url_2, item['id'] + '?language=fr')

            # make the HTTP request
            resp_2 = requests.get(
                url,
                headers={
                    "Headout-Auth": HEADOUT_TEST_API_KEY
                })
            resp_2_data = resp_2.json()

            if len(resp_2_data['contentListHtml'][0]['html']) < 2000: #represent the description of a product
                Product.objects.get_or_create(
                    title=item['name'],
                    destination=item['city']['name'],
                    description=resp_2_data['contentListHtml'][0]['html'],
                    link=item['canonicalUrl'],
                    image=item['image']['url']
                )

    return render(request, "form.html")

Но я удаляю путь ко многим строкам, поэтому я хотел бы знать, как я могу это исправить?

Пожалуйста, помогите.

1 Ответ

2 голосов
/ 31 мая 2019

Вместо использования условного оператора вы можете использовать оператор среза, чтобы задать ограничение на количество символов в описании.Используя этот подход, вы можете рефакторинг соответствующей части вашего кода:

resp_2_data = resp_2.json()
Product.objects.get_or_create(title=item['name'],
                              destination=item['city']['name'],
                              description=resp_2_data['contentListHtml'][0]['html'][0:2000],
                              ....
                              )
...