commit 746c52b931e33da0fdbec3e1bcf95b91627b74bb
parent 80d5c77c1d29dc4c6e747edbbdd40d6917ab7da1
Author: Sergey Orlov <wladimirych@gmail.com>
Date: Wed, 26 Aug 2020 22:51:28 +0200
tracks: restore getting user and activity name for strava.
Fixes #189
Diffstat:
3 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/src/lib/leaflet.control.track-list/lib/services/strava.js b/src/lib/leaflet.control.track-list/lib/services/strava.js
@@ -1,6 +1,5 @@
import BaseService from './baseService';
import urlViaCorsProxy from '~/lib/CORSProxy';
-import {decode as utf8_decode} from 'utf8';
class Strava extends BaseService {
urlRe = /^https?:\/\/(?:.+\.)?strava\.com\/activities\/(\d+)/u;
@@ -19,7 +18,6 @@ class Strava extends BaseService {
{
url: urlViaCorsProxy(`https://www.strava.com/activities/${trackId}?hl=en-GB`),
options: {
- responseType: 'binarystring',
isResponseSuccess
}
},
@@ -53,25 +51,21 @@ class Strava extends BaseService {
return [{name, error: 'UNSUPPORTED'}];
}
const tracks = [data.latlng.map((p) => ({lat: p[0], lng: p[1]}))];
+ let dom;
try {
- let altName;
- const dom = (new DOMParser()).parseFromString(pageResponse.responseBinaryText, 'text/html');
- let title = dom.querySelector('meta[property=og\\:title]').content;
- title = utf8_decode(title);
- // name and description
- const m = title.match(/^(.+) - ([^-]+)/u);
- if (m) {
- // reverse name and description
- altName = `${m[2]} ${m[1]}`;
- title = dom.querySelector('title').text;
- let date = title.match(/ (on \d{1,2} \w+ \d{4}) /u)[1];
- if (date) {
- altName += ' ' + date;
- }
- }
- name = altName;
+ dom = (new DOMParser()).parseFromString(pageResponse.response, 'text/html');
} catch (e) {
- // use previously constructed name
+ // will use default name
+ }
+ if (dom) {
+ const userName = (dom.querySelector('span.athlete-name')?.textContent ?? '').trim();
+ const activityTitle = (dom.querySelector('h1.activity-name')?.textContent ?? '').trim();
+ let date = dom.querySelector('time')?.textContent ?? '';
+ date = date.split(',')[1] ?? '';
+ date = date.trim();
+ if (userName && activityTitle && date) {
+ name = `${userName} - ${activityTitle} ${date}`;
+ }
}
return [{
name,
diff --git a/test/track_load_data/testcases/strava_with_title.json b/test/track_load_data/testcases/strava_with_title.json
@@ -8,7 +8,7 @@
],
"geodata": [
{
- "name": "Strava 3873704997",
+ "name": "fsdfas sdafas - Test - Тест - Zkouška 9 May 2012",
"tracks": [
[
{"lat": 56.526946, "lng": 28.962483},
diff --git a/test/track_load_data/testcases/strava_without_title.json b/test/track_load_data/testcases/strava_without_title.json
@@ -2,7 +2,7 @@
"query": ["https://www.strava.com/activities/3873768093"],
"geodata": [
{
- "name": "Strava 3873768093",
+ "name": "fsdfas sdafas - Дневной забег 5 July 2014",
"tracks": [
[
{"lat": 39.148949, "lng": 68.298787},