yahoo 루트 랩에서 Strava로 자동 데이터 마이그레이션

yahoo 루트 랩에서 Strava로 자동 데이터 마이그레이션



Yahoo의 루트랩은, 2020년 3월로 종료해 버립니다.
서비스가 끝날 때까지 루트 랩에서 gpx 파일을 다운로드하여 Strava에 업로드하고 지금까지 실행 한 루트를 strava에 저장하십시오!
단, 수동으로 일일이 Strava에 업로드하는 것은 번거롭기 때문에, 이하의 방법을 사용해 자동으로 업로드합시다

2020/04.01 추가
루트 랩은 끝났으므로 단순히 .gpx 파일을 Strava에 업로드하고 싶다면 여기을 참조하십시오.

1. 내가 사용하는 Google 크롬 버전을 확인합니다.



chrome
이미지는 htps //w w. 좋은 j 미오. jp / te / / ょ r 시온

2. Google 크롬에 맞는 "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

    좋은 웹페이지 즐겨찾기