#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(..)
thenreturn 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/