yahooルートラボからStravaへの自動データ移行
Yahooのルートラボは、2020年3月をもって終了してしまいます。
サービスが終了するまでにルートラボからgpxファイルをダウンロード、Stravaにアップロードし、今まで自分が走ったルートをstravaに保存しましょう!
ただ、手動でいちいちStravaにアップロードするのは面倒なので、以下の方法を用いて自動でアップロードしましょう
2020/04.01 追記
ルートラボは、終わってしまったので、ただ単純に.gpxファイルをStravaにアップロードしたい方は、こちらを参照ください。
1. 自分の使用しているGoogle Chromeのバージョンを調べる
画像はhttps://www.iijmio.jp/thissite/version より
2. Google Chromeに合った、"chromedriver"というソフトウェアをダウンロードする
-
ここからダウンロードしてください。
-
ダウンロードしたものは、.zip形式になっているので、展開したものの実行形式のものを自分のディレクトリに入れてください。
3. ターミナルを開いて、以下をターミナルで実行
pip install beautifulsoup4
pip install requests
pip install selenium
4. 以下のソースコードの"メールアドレス"と"パスワード"を自分のstravaアカウントに合わせて書き換える
gpx.py
import os
import re
import sys
import time
from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
driver = webdriver.Chrome(os.path.join(os.getcwd(), "chromedriver"))
def read_urls():
with open("./urls.txt", "r") as f:
for row in f:
yield row.replace("\n", "")
def download_gpx(urls):
for url in urls:
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, "html.parser")
gpx_tag = soup.find_all("a", href=re.compile("gpx"))
route_name = soup.find(id="subtitle").string
download_url = gpx_tag[0].get('href')
res = requests.get("https://latlonglab.yahoo.co.jp/route/" + download_url.lstrip("."))
save_name = route_name + ".gpx"
with open(save_name, "wb") as f:
f.write(res.content)
yield save_name
def upload_gpx_to_strava(gpx_names):
for i, gpx_name in enumerate(gpx_names):
driver.get('https://labs.strava.com/gpx-to-route/#12/-122.44503/37.73651')
driver.find_element_by_id("gpxFile").send_keys(os.path.join(os.getcwd(), gpx_name))
time.sleep(15)
if i == 0:
driver.find_element_by_id("oauthButton").click()
driver.switch_to.window(driver.window_handles[-1])
driver.find_element_by_id("email").send_keys("メールアドレス")
driver.find_element_by_id("password").send_keys("パスワード")
login_button = driver.find_element_by_id("login-button")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
login_button.click()
time.sleep(5)
driver.switch_to.window(driver.window_handles[-1])
driver.find_element_by_id("saveButton").click()
time.sleep(5)
driver.find_element_by_class_name("save-route").click()
driver.find_element_by_id("name").send_keys("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"+os.path.splitext(os.path.basename(gpx_name))[0])
driver.find_element_by_class_name("reverse").click()
time.sleep(5)
if __name__ == "__main__":
urls = list(read_urls())
gpx_names = download_gpx(urls)
upload_gpx_to_strava(gpx_names)
5. gpx.pyと同じディレクトリに以下のようなルートラボへのリンクがのったurls.txtを配置
urls.txt
https://latlonglab.yahoo.co.jp/route/hoge1
https://latlonglab.yahoo.co.jp/route/hoge2
https://latlonglab.yahoo.co.jp/route/hoge3
...
6. 以下を実行
python gpx.py