Help us understand the problem. What is going on with this article?

yahooルートラボからStravaへの自動データ移行

yahooルートラボからStravaへの自動データ移行

Yahooのルートラボは、2020年3月をもって終了してしまいます。
サービスが終了するまでにルートラボからgpxファイルをダウンロード、Stravaにアップロードし、今まで自分が走ったルートをstravaに保存しましょう!
ただ、手動でいちいちStravaにアップロードするのは面倒なので、以下の方法を用いて自動でアップロードしましょう

2020/04.01 追記
ルートラボは、終わってしまったので、ただ単純に.gpxファイルをStravaにアップロードしたい方は、こちらを参照ください。

1. 自分の使用しているGoogle Chromeのバージョンを調べる

chrome
画像はhttps://www.iijmio.jp/thissite/version より

2. Google Chromeに合った、"chromedriver"というソフトウェアをダウンロードする

  • ここからダウンロードしてください。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした