Я работаю над личным проектом, который получает данные от пользователя, где он выбирает, где он начал поход и где закончил, и он автоматически загружает данные GPS этого похода в его учетную запись Strava. Эта часть проекта уже завершена и протестирована, я вручную загрузил файлы в Strava, и они заработали. Моя текущая проблема заключается в том, что когда я пытаюсь загрузить действие в Strava, используя их API загрузки, я получаю эту ошибку: "{"message":"Bad Request","errors":[{"resource":"Upload","field": "data","code":"пусто"}]}". У меня другие функции API Strava работают без проблем, но эта функция API зацикливает меня из-за передачи файла .gpx. Я пробовал онлайн-ресурсы, но не добился никакого прогресса. Если у кого-то есть опыт или он может направить меня в правильном направлении, я буду очень признателен. Вот мой код:
import json
import os
import boto3
import urllib3
from io import BytesIO
def lambda_handler(event, context):
http = urllib3.PoolManager()
client_id = 'XXXX'
client_secret = 'XXXXXXXXXXXX'
code = 'XXXXXXXXXXXXXXXXXX'
grant_type = 'authorization_code'
urlToken = 'https://www.strava.com/api/v3/oauth/token'
headers = {
'Content-Type': 'application/json'
}
body = {
'client_id': client_id,
'client_secret': client_secret,
'code': code,
'grant_type': grant_type
}
response = http.request('POST', urlToken, headers=headers, body=json.dumps(body).encode('utf-8'))
response_data = json.loads(response.data.decode('utf-8'))
strava_access_token = response_data['access_token']
print("access token is: "+strava_access_token)
# create an S3 client
s3 = boto3.client('s3')
# define the bucket and file name
bucket_name = 'XXXXXXXXX'
file_name = 'newFile1.gpx'
# download the file from S3 to a temporary file in the /tmp directory
with open('/tmp/' + file_name, 'wb') as f:
s3.download_fileobj(bucket_name, file_name, f)
# read the contents of the file
with open('/tmp/' + file_name, 'rb') as f:
gpx_data = f.read()
print(gpx_data)
# convert the bytes to a string
gpx_data_str = gpx_data.decode()
# Create the request headers
headers = {
'Authorization': f'Bearer {strava_access_token}',
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'multipart/form-data',
'Content-Disposition': 'attachment; filename="testRoute.gpx"'
}
# create the data payload
data = {
"data_type": "gpx",
'file': (file_name, gpx_data, 'application/gpx+xml')
}
# Send the request
response = http.request(
method='POST',
url='https://www.strava.com/api/v3/uploads',
headers=headers,
fields=data
)
# Print the response
print(response.data.decode())
message = "testing message"
return message
Я пробовал использовать другой файл, пробовал открыть файл по-другому, пробовал менять параметры, пробовал менять Content-Type и еще несколько вещей. Я думаю, что, возможно, я упускаю что-то очевидное, но на данный момент я думаю, что свежий взгляд поможет.
Я работаю над личным проектом, который получает данные от пользователя, где он выбирает, где он начал поход и где закончил, и он автоматически загружает данные GPS этого похода в его учетную запись Strava. Эта часть проекта уже завершена и протестирована, я вручную загрузил файлы в Strava, и они заработали. Моя текущая проблема заключается в том, что когда я пытаюсь загрузить действие в Strava, используя их API загрузки, я получаю эту ошибку: "{"message":"Bad Request","errors":[{"resource":"Upload","field": "data","code":"пусто"}]}". У меня другие функции API Strava работают без проблем, но эта функция API зацикливает меня из-за передачи файла .gpx. Я пробовал онлайн-ресурсы, но не добился никакого прогресса. Если у кого-то есть опыт или он может направить меня в правильном направлении, я буду очень признателен. Вот мой код: [code]import json import os import boto3 import urllib3 from io import BytesIO
# define the bucket and file name bucket_name = 'XXXXXXXXX' file_name = 'newFile1.gpx'
# download the file from S3 to a temporary file in the /tmp directory with open('/tmp/' + file_name, 'wb') as f: s3.download_fileobj(bucket_name, file_name, f)
# read the contents of the file with open('/tmp/' + file_name, 'rb') as f: gpx_data = f.read()
print(gpx_data)
# convert the bytes to a string gpx_data_str = gpx_data.decode()
# Print the response print(response.data.decode())
message = "testing message" return message
[/code] Я пробовал использовать другой файл, пробовал открыть файл по-другому, пробовал менять параметры, пробовал менять Content-Type и еще несколько вещей. Я думаю, что, возможно, я упускаю что-то очевидное, но на данный момент я думаю, что свежий взгляд поможет.
Я собрал пакет Python и подготовился к созданию распространяемого компонента с использованием шпагата с помощью python setup.py sdist bdist_wheel. Это создало два файла в каталоге dist:
PACKAGENAME-0.1.1-py3-none-any.whl
PACKAGENAME-0.1.1.tar.gz...
Я собрал пакет Python и подготовился к созданию распространяемого компонента с использованием шпагата с помощью python setup.py sdist bdist_wheel. Это создало два файла в каталоге dist:
PACKAGENAME-0.1.1-py3-none-any.whl
PACKAGENAME-0.1.1.tar.gz...