Я продолжаю делать успехи на персональном веб-сайте данных о велосипеде. В настоящее время я работаю над попыткой взять функцию, которая в данный момент запускается сразу, и превратить ее в две отдельные части. Я извлекаю данные из Strava через их API, и я надеюсь сначала сделать это, нажав кнопку, вытащить и отобразить список последних поездок (эта часть выполнена), а затем, как только этот список отобразится, выбрать отдельную поездку для Импортировать. На данный момент это всего лишь сценарий «все или ничего», где я могу извлечь все файлы езды одновременно, но я хотел сделать это более «по требованию»
Так что я надеюсь сделать это получить часть, которая собирает потоки и превращает их в свою собственную функцию, которая может получать данные из этой первой функции рендеринга и вызывать отдельный поток проезда для добавления в модель / файл / что угодно. Просто любопытно посмотреть, есть ли у кого-нибудь понимание того, что исследовать
def stravadownload(request):
adict={}
actdict={}
activitydict={}
if "downstrav" in request.POST:
client = Client()
activity=Activity()
with open("stravtoken.json", "r") as stravtoken:
tokendict = json.load(stravtoken)
access_token = tokendict["access_token"]
refresh_token = tokendict["refresh_token"]
expires_at = tokendict['expires_at']
client.access_token=access_token
client.refresh_access_token= refresh_token
client.token_expires_at = expires_at
athlete = client.get_athlete()
actID=[]
dates=[]
activityname=[]
awatts=[]
actdur=[]
for activity in client.get_activities(after="2020-03-01T00:00:00Z"):
activityID = "{0.id}".format(activity)
ridedate = str(activity.start_date)
ridename=activity.name
actwatts=activity.average_watts
adur=activity.elapsed_time
actdict={activityID: ridedate}
actID.append(activityID)
dates.append(ridedate)
activityname.append(ridename)
awatts.append(actwatts)
actdur.append(adur)
actIDdf=pd.DataFrame(actID, columns=["actIDs"])
actIDdf['dates']= dates
actIDdf['name']=activityname
actIDdf['actwatts']=awatts
actIDdf['actdur']=actdur
#This is the step I want to have "on demand" where I'd get the individual ride streams when I select a ride.
types = ['watts', 'heartrate']
streams = client.get_activity_streams(activityID, types=types)
if 'watts' or 'heartrate' in streams.keys():
df = pd.DataFrame.from_dict(streams['watts'].data)
df.index.name='time'
df.columns=['watts']
for heartrate in streams.keys():
try:
moddf= pd.DataFrame.from_dict(streams['heartrate'].data)
except KeyError:
pass
moddf.index.name='time'
moddf.columns=['heartrate']
new_df=pd.merge(df,moddf, how='outer', on=['time'])
new_df['activityID']=activityID
new_df['dates']=ridedate
new_df['time']=new_df.index
activitydict=new_df.to_dict()
#this exports each activityID ride to its own json file
filePathNameWExt = 'activityout' + activityID + '.json'
with open(filePathNameWExt, "w+") as json_file:
json.dump(activitydict, json_file)
Export = df.to_json(json_file)
#the following puts the ride list into context and then renders it in my template
actIDdf['dates'] = pd.to_datetime(actIDdf['dates'])
actIDdf['actdur'] = pd.to_datetime(actIDdf['actdur'])
adict=actIDdf.to_dict('records')
context= {
'adict': adict,
'activitydict': activitydict
}
return render(request, 'PMC/stravadownload.html', context)