diff --git a/bridges/StravaBridge.php b/bridges/StravaBridge.php new file mode 100644 index 00000000..da1739cb --- /dev/null +++ b/bridges/StravaBridge.php @@ -0,0 +1,81 @@ + [ + 'name' => 'athleteID', + 'required' => true + ] + ], + ]; + + public function detectParameters($url) + { + if (preg_match('/strava\.com\/athletes\/([\d]+)/', $url, $matches) > 0) { + return [ + 'athleteID' => $matches[1] + ]; + } + return null; + } + + public function collectData() + { + $athleteID = $this->getInput('athleteID'); + + $dom = getSimpleHTMLDOM(self::URI . '/athletes/' . $athleteID); + $scriptRegex = "/data-react-props='(.*?)'/"; + preg_match($scriptRegex, $dom, $matches) or returnServerError('Could not find json'); + $jsonData = json_decode(html_entity_decode($matches[1])); + $this->feedName = $jsonData->athlete->name . "'s Recent Activities"; + $this->iconURL = $jsonData->athlete->avatarUrl; + foreach ($jsonData->recentActivities as $activity) { + $item = []; + + $item['title'] = $activity->name . ' (' . $activity->detailedType . ')'; + $item['author'] = $jsonData->athlete->name; + $item['uri'] = self::URI . '/activities/' . $activity->id; + $item['timestamp'] = $activity->startDateLocal; + + $content = 'Distance: ' . $activity->distance . + '
Elev Gain: ' . $activity->elevation . + '
Time: ' . $activity->movingTime . '

'; + + foreach ($activity->images as $image) { + $src = $image->squareSrc; + if (empty($src)) { + $src = $image->defaultSrc; + } + $content .= ''; + } + $item['content'] = $content; + + $item['enclosures'][] = $item['uri'] . '/export_gpx'; + + $this->items[] = $item; + } + } + + public function getName() + { + if (empty($this->feedName)) { + return parent::getName(); + } else { + return $this->feedName; + } + } + + public function getIcon() + { + if (empty($this->iconURL)) { + return parent::getIcon(); + } else { + return $this->iconURL; + } + } +}