strive: A client for the Strava V3 API.

[ api, library, mit ] [ Propose Tags ] [ Report a vulnerability ]
Versions [RSS] 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.7.0, 0.7.1, 0.8.0, 1.0.0, 1.0.1, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 2.2.2, 3.0.0, 3.0.1, 3.0.2, 3.0.3, 3.0.4, 4.0.0, 4.0.1, 4.0.2, 4.0.3, 4.1.0, 5.0.0, 5.0.1, 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.6, 5.0.7, 5.0.8, 5.0.9, 5.0.10, 5.0.11, 5.0.12, 5.0.13, 5.0.14, 5.0.15, 5.0.16, 6.0.0.1, 6.0.0.2, 6.0.0.3, 6.0.0.4, 6.0.0.5, 6.0.0.6, 6.0.0.7, 6.0.0.9, 6.0.0.10, 6.0.0.11, 6.0.0.12, 6.0.0.13
Change log CHANGELOG.md
Dependencies aeson (>=2.1.2.1 && <2.2 || >=2.2.2.0 && <2.3), base (>=4.18.0.0 && <4.19 || >=4.19.0.0 && <4.20 || >=4.20.0.0 && <4.21), bytestring (>=0.11.4.0 && <0.12 || >=0.12.0.2 && <0.13), data-default (>=0.8.0.0 && <0.9), gpolyline (>=0.1.0.1 && <0.2), http-client (>=0.7.17 && <0.8), http-client-tls (>=0.3.6.3 && <0.4), http-types (>=0.12.4 && <0.13), template-haskell (>=2.20.0.0 && <2.21 || >=2.21.0.0 && <2.22 || >=2.22.0.0 && <2.23), text (>=2.0.2 && <2.2), time (>=1.12.2 && <1.13 || >=1.14 && <1.15), transformers (>=0.6.1.0 && <0.7) [details]
License MIT
Author
Maintainer Taylor Fausak
Category API
Source repo head: git clone https://github.com/tfausak/strive
Uploaded by fozworth at 2024-11-15T17:17:08Z
Distributions LTSHaskell:6.0.0.12, NixOS:6.0.0.12, Stackage:6.0.0.13
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 25433 total (77 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2024-11-15 [all 1 reports]

Readme for strive-6.0.0.13

[back to package description]

Strive

CI Hackage

Strive is a Haskell client for the Strava V3 API.


Installation

Add it to your Cabal file:

build-depends:
  strive

Or install it manually:

$ cabal update
$ cabal install strive

Usage

To use the API, you'll need an access token. Once you have that, create a new client using the default HTTP manager.

{-# LANGUAGE OverloadedStrings #-}
import Strive
let token = "..."
client <- buildClient (Just token)

Most types implement lenses for their fields. Lenses are preferred over directly accessing the fields. For instance, instead of doing this:

client_accessToken (client { client_accessToken = "record token" })
-- "record token"

Do this:

get accessToken (set accessToken "lens token" client)
-- "lens token"

Authentication

Request access

  let authorizeUrl = buildAuthorizeUrl 1790 "http://localhost" $ with
        [ set approvalPrompt False
        , set privateScope True
        , set writeScope True
        , set state "..."
        ]
  print (authorizeUrl :: String)

Token exchange

  tokenExchangeResponse <- exchangeToken 1790 "secret" "code"
  print (tokenExchangeResponse :: Result TokenExchangeResponse)

Deauthorization

  deauthorizationResponse <- deauthorize client
  print (deauthorizationResponse :: Result DeauthorizationResponse)

Athletes

Retrieve current athlete

  currentAthlete <- getCurrentAthlete client
  print (currentAthlete :: Result AthleteDetailed)

Retrieve another athlete

  anotherAthlete <- getAthlete client 65516
  print (anotherAthlete :: Result AthleteSummary)

Update current athlete

  updatedAthlete <- updateCurrentAthlete client $ with
    [ set city (Just "Dallas")
    , set state (Just "Texas")
    , set country (Just "United States")
    , set sex (Just Male)
    , set weight (Just 72.57)
    ]
  print (updatedAthlete :: Result AthleteDetailed)

Totals and stats

  athleteStats <- getAthleteStats client 65516
  print (athleteStats :: Result AthleteStats)

List athlete K/QOMs/CRs

  athleteCrs <- getAthleteCrs client 65516 $ with
    [ set page 1
    , set perPage 2
    ]
  print (athleteCrs :: Result [EffortDetailed])

Friends and followers

List athlete friends

  currentFriends <- getCurrentFriends client $ with
    [ set page 1
    , set perPage 2
    ]
  print (currentFriends :: Result [AthleteSummary])
  friends <- getFriends client 65516 $ with
    [ set page 1
    , set perPage 2
    ]
  print (friends :: Result [AthleteSummary])

List athlete followers

  currentFollowers <- getCurrentFollowers client $ with
    [ set page 1
    , set perPage 2
    ]
  print (currentFollowers :: Result [AthleteSummary])
  followers <- getFollowers client 65516 $ with
    [ set page 1
    , set perPage 2
    ]
  print (followers :: Result [AthleteSummary])

List both following

  commonFriends <- getCommonFriends client 65516 $ with
    [ set page 1
    , set perPage 2
    ]
  print (commonFriends :: Result [AthleteSummary])

Activities

Create an activity

  createdActivity <- createActivity client "An Example" Run (UTCTime (fromGregorian 1970 0 0) 0) 10 $ with
    [ set description (Just "...")
    , set distance (Just 100.0)
    ]
  print (createdActivity :: Result ActivityDetailed)

Retrieve an activity

  activity <- getActivity client 141273622 $ with
    [ set allEfforts True
    ]
  print (activity :: Result ActivitySummary)

Update an activity

  updatedActivity <- updateActivity client 141273622 $ with
    [ set name (Just "WedEx Pit Stop")
    , set type_ (Just Ride)
    , set private (Just False)
    , set commute (Just True)
    , set trainer (Just False)
    , set gearId (Just "b387882")
    , set description Nothing
    ]
  print (updatedActivity :: Result ActivityDetailed)

Delete an activity

  deletedActivity <- deleteActivity client 162674281
  print (deletedActivity :: Result ())

List athlete activities

  currentActivities <- getCurrentActivities client $ with
    [ set before (Just (UTCTime (fromGregorian 1970 0 0) 0))
    , set after (Just (UTCTime (fromGregorian 1970 0 0) 0))
    , set page 1
    , set perPage 2
    ]
  print (currentActivities :: Result [ActivitySummary])
  relatedActivities <- getRelatedActivities client 141273622 $ with
    [ set page 1
    , set perPage 2
    ]
  print (relatedActivities :: Result [ActivitySummary])

List friends' activities

  feed <- getFeed client $ with
    [ set page 1
    , set perPage 2
    ]
  print (feed :: Result [ActivitySummary])

List activity zones

  activityZones <- getActivityZones client 141273622
  print (activityZones :: Result [ActivityZoneDetailed])

List activity laps

  activityLaps <- getActivityLaps client 141273622
  print (activityLaps :: Result [ActivityLapSummary])

Comments

List activity comments

  activityComments <- getActivityComments client 90112360 $ with
    [ set markdown True
    , set page 1
    , set perPage 2
    ]
  print (activityComments :: Result [CommentSummary])

Kudos

List activity kudoers

  activityKudoers <- getActivityKudoers client 141273622 $ with
    [ set page 1
    , set perPage 2
    ]
  print (activityKudoers :: Result [AthleteSummary])

Photos

List activity photos

  activityPhotos <- getActivityPhotos client 141273622
  print (activityPhotos :: Result [PhotoSummary])

Clubs

Retrieve a club

  club <- getClub client 11193
  print (club :: Result ClubDetailed)

List athlete clubs

  currentClubs <- getCurrentClubs client
  print (currentClubs :: Result [ClubSummary])

List club members

  clubMembers <- getClubMembers client 11193 $ with
    [ set page 1
    , set perPage 2
    ]
  print (clubMembers :: Result [AthleteSummary])

List club activities

  clubActivities <- getClubActivities client 11193 $ with
    [ set page 1
    , set perPage 2
    ]
  print (clubActivities :: Result [ActivitySummary])

Join a club

  joinedClub <- joinClub client 165
  print (joinedClub :: Result ())

Leave a club

  leftClub <- leaveClub client 165
  print (leftClub :: Result ())

Gear

Retrieve gear

  theGear <- getGear client "b387855"
  print (theGear :: Result GearDetailed)

Segments

Retrieve a segment

  theSegment <- getSegment client 4773104
  print (theSegment :: Result SegmentDetailed)

List starred segments

  starredSegments <- getStarredSegments client $ with
    [ set page 1
    , set perPage 2
    ]
  print (starredSegments :: Result [SegmentSummary])

List efforts

  theSegmentEfforts <- getSegmentEfforts client 4773104 $ with
    [ set athleteId (Just 65516)
    , set range (Just ((UTCTime (fromGregorian 1970 0 0) 0), (UTCTime (fromGregorian 1970 0 0) 0)))
    , set page 1
    , set perPage 2
    ]
  print (theSegmentEfforts :: Result [EffortDetailed])

Segment leaderboard

  segmentLeaderboardResponse <- getSegmentLeaderboard client 4773104 $ with
    [ set gender (Just Male)
    , set ageGroup (Just Ages0To24)
    , set weightClass (Just Kilograms65To74)
    , set following (Just True)
    , set clubId (Just 11193)
    , set dateRange (Just "this_year")
    , set contextEntries (Just 15)
    , set page 1
    , set perPage 2
    ]
  print (segmentLeaderboardResponse :: Result SegmentLeaderboardResponse)

Segment explorer

  segmentExplorerResponse <- exploreSegments client (32.0, -96.0, 33.0, -95.0) $ with
    [ set activityType Riding
    , set minCat 0
    , set maxCat 5
    ]
  print (segmentExplorerResponse :: Result SegmentExplorerResponse)

Segment efforts

Retrieve a segment effort

  segmentEffort <- getSegmentEffort client 1595370098
  print (segmentEffort :: Result EffortDetailed)

Streams

Retrieve activity streams

  activityStreams <- getActivityStreams client 141273622 [LatlngStream, WattsStream] $ with
    [ set resolution (Just Low)
    , set seriesType Time
    ]
  print (activityStreams :: Result [StreamDetailed])

Retrieve effort streams

  effortStreams <- getEffortStreams client 1595370098 [LatlngStream, WattsStream] $ with
    [ set resolution (Just Low)
    , set seriesType Time
    ]
  print (effortStreams :: Result [StreamDetailed])

Retrieve segment streams

  segmentStreams <- getSegmentStreams client 4773104 [LatlngStream, WattsStream] $ with
    [ set resolution (Just Low)
    , set seriesType Time
    ]
  print (segmentStreams :: Result [StreamDetailed])

Uploads

Upload an activity

  uploadedActivity <- uploadActivity client (pack "...") "gpx.gz" $ with
    [ set activityType (Just Ride)
    , set name (Just "An Example")
    , set description (Just "...")
    , set private True
    , set trainer False
    , set externalId (Just "...")
    ]
  print (uploadedActivity :: Result UploadStatus)

Check upload status

  upload <- getUpload client 16486788
  print (upload :: Result UploadStatus)