Возвращает ли этот метод URL-адрес?

#python #json #url #request #google-places-api

#python #json #url #запрос #google-places-api

Вопрос:

Извините, я учусь, поэтому простите меня, если это глупый вопрос. Я получил этот метод (обновленный):

     def get_photo(self, photo_reference):
    print(self.photourl)
    print(photo_reference)
    resp = requests.get(
        url='{}{}'.format(self.photourl, photo_reference),
        params={'key': self.api_key}
    )
    try:
        return resp.json()
    except ValueError:
        print('Invalid JSON')
  

Я создал requests.get с помощью API Google Places — Разместите фотографию.
В моем __init__(self):

 self.place_detail_url = 'https://maps.googleapis.com/maps/api/place/'
self.ref = 'photo?maxwidth=200amp;photoreference='
self.photourl = self.place_detail_url   self.ref
  

Я хочу получить фотографию из API Google place, но я попробовал, и он не возвращает ничего.
Интересно, что get_photo возвращает метод, и если это не URL. Как я могу закодировать его в URL-адрес?

Комментарии:

1. Вы должны возвращать что-то из get_photo() ?..

2. В этом методе нет return инструкции, поэтому он вернет значение по умолчанию None . Я подозреваю, что вам следует присвоить значение, возвращаемое requests.get вызовом, и вернуть его, которое должно быть объектом, содержащим данные фотографии, которые вы хотите (он также содержит другие полезные вещи).

3. Вы пытаетесь загрузить картинку? requests.get(url).content Вам нужно будет сгруппировать это с помощью команды open, чтобы сохранить файл: with open(file, 'wb') as file: file.write(requests.get(url).content)

4. Я заставил его вернуть что-то, сделав resp = requests.get(..) then return resp.json()

5. Какую ошибку вы получаете? Чего вы пытаетесь достичь? Пока вопрос заключается в том, «Возвращает ли он URL», и в предоставленном cod нет оператора return, но вы говорите, что он существует. Пожалуйста, обновите

Ответ №1:

Я получил свой ответ, resp это объект, и, согласно статусу HTTP 200, мой URL-адрес хорош. Так что мне просто нужно сделать return resp.url , чтобы получить правильную ссылку URL. Это небольшая проблема, но я сделал ее большой. Извините и спасибо всем за ваш ответ!

Ответ №2:

Может быть, попробуйте это (основываясь на вашем, казалось бы, предпочтительном подходе к созданию URL-адреса самостоятельно):

 def get_photo(self, photo_reference):
    request_url = (self.place_detail_url   self.ref   photo_reference   'amp;key='   self.api_key)
    output_file = (/path/to/image/here/file.png)
    with open(output_file, 'wb') as output:
        output.write(requests.get(request_url).content)
  

Комментарии:

1. На самом деле я хочу, чтобы он возвращал строку (ссылку https). Потому что я хочу поместить его в ‘image_url’ в параметрах и отправить его обратно по ссылке API Facebook messenger. У вас есть какие-либо идеи? Я знаю, как получить значение из json, но это фото Google Places возвращает что-то другое. Я знаю, что он не вернет ответ json.

2. Я попробовал print(str(resp)) и получил это обратно https://maps.googleapis.com/maps/api/place/photo?maxwidth=200amp;photoreference= amp; CoQBcwAAAKoYnKhY40-G1p55pNqMnQrKGKpzD9_9abee8YUMO72VoWfl5CCAyI5iL3mU1BoUIXtlM1vOCar7ZpIRZAOjui5ByS70Ha7VN1z9Y8446xUxu_8PSgb5VaoxtlzXxTO63fC6dFZzEeX8R5Aos1ucVn0-yUbZxuLYgx6uLOopj1jWEhAZ9e6FBFOvWcXTQ51qp_LxGhRbJT1D6CCmaTIlpZvABh5QhXn8dQ . Длинная строка — это photo_reference, я проверил ее в браузере, и она возвращает https://lh3.googleusercontent.com/-es-54JIkYqQ/VvcJjK4fJbI/AAAAAAASeZE/T4whpXc9rDsjsk1tjOG3nmLqYATo2zcVw/s1600-w200/