시간에 가로장을 통해?

개인적으로 나는 열차의 팬입니다. 그들은 천천히 느리지 만, 나라를 돌아 다니는 방법입니다. 캐나다는 철도 운송을위한 최고의 후보자가 아니며, 해안 사이의 다소 큰 영역은 윈저와 퀘벡 시티뿐만 아니라 윈저 사이의 복도에서 일상적인 열차 서비스를 운영하고 있습니다.

불행히도, 여행자 레일은 일반적으로 지연되는 캐나다의 산업용 레일을 생산해야합니다. 일부 열차가 매우 정기적으로 지연되어 있음을 알게 된 후에는 기차로 각각의 전형적인 성능을 이해하는 것이 유익한 것처럼 보였습니다. 이 데이터는이 데이터를 공개적으로 제공하지 않습니다.

그러나 그들은 도착 시간뿐만 아니라 출발 시간뿐만 아니라 도착에 대한 몇 가지 데이터를 제공합니다. RAIL 사이트를 체크 아웃 한 유형의 브라우저에서 제공되는 데이터를 파고, 과거의 예정 / 실제 도착 데이터에 대한 문의가 가능했습니다. 그 결과 ratrstats.ca, 비아의시기 적절한 방식의 성능이 있습니다. 이 모든 것이 어떻게 작동하는지 정확하게 가입하면서, 다음 기차 티켓을 얻을 때 챔피언을 골라내는 방법을 정확하게 가라 앉은 후에 나에게 합류하십시오.

데이터 가져 오기

VIA는 이전, 전류 및 다음날의 조건 페이지에 대한 루틴 데이터를 제공합니다. 이렇게하면 한 번에 언젠가는 여행 데이터를 개발할 수 있습니다. 다행히도 Chrome의 검사관을 종료 하고이 Get 요청을 발견 할 수 있습니다.

http://reservia.viarain.ca/tsi/gettrainstatus.aspx?l=en&tsiccode=via&tsitrainnumber=87&deParturedate=2015-12-01&ArrivalDate=2015-12-01& 트레이닝 스테 워드 Sheak15-12-01&t=1449033500354.

여기에는 수분이 많은 매개 변수가 있습니다. TsitrainNumber는 의심 할 여지없이 우리가보고있는 열차 번호입니다. Departuredate는 기차가 남은 날짜뿐만 아니라 도착했을 때 arrivaldate가 있습니다. Traininstanctuctionate는 기차가 남은 날짜로 설정된 것으로 보입니다. 이것을 염두에두고, 파이썬으로 뛰어 들고 놀라운 요청 라이브러리를 활용하여 일부 요청을 만드는 데 시간입니다.

이 데이터는 아래에 나타나는 것과 다른 방식으로 해석되거나 컴파일 될 수있는 양방향 유니 코드 텍스트로 구성됩니다. 검토하려면 숨겨진 유니 코드 문자를 노출하는 편집기에서 데이터를여십시오.
양방향 유니 코드 문자에 대해 더 많이 발견하십시오

숨겨진 문자 표시

payload = { ‘l’: ‘en’,

‘Tsiccode’: ‘Via’,

‘Tsitrainnumber’: Train_Number,

‘Departuredate’: Trip_date,

‘Arrivaldate’: Trip_date,

‘traininstancedate’: trip_date}

r = requests.get ( ‘http://reservia.viarain.ca/tsi/gettrainstatus.aspx'

params = 페이로드)

Raw.

요청

github에 의해 개최됩니다

이 코드를 사용하면 모든 유형의 기차 번호의 유형에 대한 데이터를 가져올 수 있습니다. 일부 테스트 후, 우리는 VIA의 데이터가 2015 년 4 월에 다시 6 개월 동안 데이터를 제공한다는 것을 발견했습니다. 모든 여행을 위해 우리는 각 역에 대한 출발 시간뿐만 아니라 실제 도착뿐만 아니라 정리 된뿐만 아니라 준비뿐만 아니라 정리를 얻습니다. 그 정보를 유지하면서 열차가 얼마나 지연되는지 정확하게 결정할 수 있습니다.

HTML로 가져온 페이지 데이터를 사용하면 모든 값을 추출하기 위해 아름다운 작업을 사용하여 스크립트를 해킹했습니다. 이 스크립트는 여행 데이터의 객체와 SQLAlchemy를 사용하는 PostgreSQL 데이터베이스에 저장합니다. 이렇게하면 나중에 데이터에 액세스하는 것이 간단하고 간단하게 만듭니다.

마지막 단계는 데이터를 끌어 당기는 일뿐만 아니라 모든 기차 숫자를 반복하는 것이 었습니다. 이 스크립트는 일부 중첩 루프를 사용하여 데이터를 저장할뿐만 아니라 데이터를 보유하고 있습니다. 하나의 더 많은 스크립트는 전날의 데이터를 잡고 데이터베이스에 저장합니다. 이것은 CRON 작업에 설정되어 있으므로 데이터베이스가 신선하게 유지됩니다.

빌딩 (싼) 웹 사이트

Trainstats.ca 웹 사이트
이 시점에서 우리는 12,000 개가 넘는 여행에 도착한 데이터가 있습니다. 우리가 쿼리를 수동으로 실행하고 스크립트를 작성하여 플롯을 생성 할 수있는 동안 데이터를 온라인으로 배치하는 것이 훨씬 재미 있습니다. 이는 웹 사이트를 개발할 때입니다. 웹에서 멋지게 보이는 것들이 나의 Forte가 아니므로 [Phil Everson]은 일부 웹 개발을 위해 뛰어 올랐습니다.

제약 조건을 추가하려면 사이트를 가능한 한 저렴한 가격으로 만들려고했습니다. Heroku와 같은 서비스 오퍼링으로 한 달에 약 20 달러의 서비스 제공. Digitalocean의 온라인 개인 서버는 적어도 5 달러를 지출합니다. 가장 비싼 선택은 정적 사이트를 만드는 것이 었습니다.

정적 웹 페이지는 지오시 (Geocities)의 시대로 되돌아갑니다. 그러나 파일을 저장할 수 있지만 서버에서 모든 유형의 처리를 수행 할 수 없습니다. 다행히도, 우리가 제공 한 데이터 유형에 대해 잘 작동했습니다. 모든 집계 된 트립 데이터는 JSON 파일로 내보낼 수 있으며 클라이언트 측의 JavaScript는 데이터와 화면 플롯을 묶을 수 있습니다.

Trainstats 사이트는 일부 HTML, CSS, 브라우저에서 실행되는 JavaScript뿐만 아니라 데이터가있는 JSON 데이터 모음을 구성합니다. DataSet은 매일 생성됩니다하나의 더 많은 CRON 작업으로 모든 처리가 지역 컴퓨터에서 발생할 수 있습니다. 그런 다음 Amazon Web Services 명령 행 인터페이스는 사용자가 검색 할 수있는 데이터를 S3로 푸시하는 데 사용됩니다. 데이터 세트가 작기 때문에 S3뿐만 아니라 S3가 저렴하므로 보통 호스팅보다 비용이 절감됩니다.

결과

이 해킹은 주로 재미로 개발되었지만 매혹적인 발견이 몇 가지 있습니다. 토론토 루트로의 정상적인 오타와에서 나는 시간의 84 %의시기 적절한 방식으로 기차를 선택할 가능성이 더 큽니다. 다른 어떤 여행자들은 통계도 유익한 통계를 발견 할 수 있습니다. 어느 쪽이든, 그것은 데이터 집합을 긁어 모으고 저렴한 웹 서비스를 제공하는 데 매력적인 운동이었습니다.

소스에 대해 생각하고 있다면, 그것은 모든 것을 복용을위한 Github에 있습니다. 우리는 당신이 그것과 함께 철도로 ddos를하지 않는다는 것을 친절하게 요청합니다.

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *