Cá nhân, tôi là một fan hâm mộ của tàu hỏa. Chúng là một người đẹp, mặc dù chậm, phương pháp để đi khắp đất nước. Canada không phải là ứng cử viên rất tốt nhất cho quá cảnh đường sắt, với điều kiện khu vực khá lớn giữa các bờ biển, tuy nhiên bằng đường sắt vận hành dịch vụ tàu tập luyện thông thường trong hành lang giữa Windsor cũng như thành phố Quebec.
Thật không may, đường sắt du lịch phải sản xuất vào đường sắt công nghiệp ở Canada thường gây chậm trễ. Sau khi nhận thấy rằng một số chuyến tàu có sự chậm trễ cực kỳ thường xuyên, dường như nó sẽ có ích khi hiểu hiệu suất điển hình của từng phương tiện của tàu. bằng phương tiện không cung cấp dữ liệu này công khai.
Tuy nhiên, họ cung cấp một số dữ liệu về việc đến cũng như thời gian khởi hành. Đào dữ liệu vào dữ liệu được cung cấp với bất kỳ loại trình duyệt nào kiểm tra bằng phương tiện của trang web đường sắt, có thể yêu cầu trong dữ liệu đến lịch trình / thực tế trong quá khứ. Kết quả là Trainstats.ca, một màn hình của VIA một cách kịp thời. Tham gia với tôi sau giờ nghỉ khi tôi vượt qua chính xác cách tất cả hoạt động này, cũng như chính xác cách chọn một nhà vô địch khi nhận vé tàu tiếp theo của bạn.
Lấy dữ liệu
Thông qua việc cung cấp dữ liệu thông thường cho ngày trước, hiện tại, cũng như vào ngày hôm sau trên trang điều kiện của họ. Điều này sẽ cho phép chúng tôi phát triển một bộ dữ liệu chuyến đi, tuy nhiên chỉ một ngày nào đó tại một thời điểm. May mắn thay, chúng ta có thể chấm dứt thanh tra Chrome cũng như khám phá yêu cầu GET này:
http://reservia.viarail.ca/tsi/getTrainStatus.aspx?l=en&tsiccode=via&tsitrainnumber=87&departredate=2015-12-01&arriverdate=2015-12-01&traininstalling=2015-12-01&t=1449033500354.
Có một vài thông số ngon ngọt ở đây. Tsitrainnumber chắc chắn là số tàu chúng ta đang xem xét. Sẵn sàng là ngày tàu trái, cũng như sự ra vào là khi nó đến. TrainInstineate tương tự như vậy dường như được đặt thành ngày tàu còn lại. Với suy nghĩ này, đã đến lúc nhảy vào Python cũng như sử dụng thư viện yêu cầu tuyệt vời để tạo ra một số yêu cầu.
Dữ liệu này bao gồm văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch theo một cách khác so với những gì xuất hiện bên dưới. Để xem xét, hãy mở dữ liệu trong trình soạn thảo hiển thị các ký tự Unicode ẩn.
Khám phá nhiều hơn nữa về các ký tự Unicode hai chiều
Hiển thị các nhân vật ẩn
tải trọng = {‘l’: ‘en’,
‘Tsiccode’: ‘thông qua’,
‘Tsitrainnumber’: Train_number,
‘SỞ’: Trip_Date,
‘ARRIVALDATE’: Trip_Date,
‘TrainInstedate’: Trip_date}
r = yêu cầu.get (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx' ;,
params = tải trọng)
Xem RAW.
Yêu cầu.Py.
Được tổ chức bởi GitHub
Mã này cho phép chúng tôi tìm nạp dữ liệu cho bất kỳ loại số nào trên bất kỳ loại ngày nào. Sau một số thử nghiệm, chúng tôi đã phát hiện ra rằng dữ liệu của Via quay trở lại vào tháng 4 năm 2015, nơi cung cấp cho chúng tôi hơn 6 tháng dữ liệu. Đối với mỗi chuyến đi, chúng tôi sẽ được sắp xếp cũng như thực tế cũng như thời gian khởi hành cho mỗi trạm. Giữ thông tin đó, chúng ta có thể nhanh chóng xác định chính xác mức độ chậm trễ của các chuyến tàu.
Với dữ liệu trang được tìm kiếm dưới dạng HTML, một tập lệnh đã bị hack cùng nhau bằng cách sử dụng BeautifulSoup để trích xuất tất cả các giá trị. Kịch bản này sau đó tạo ra các đối tượng cho dữ liệu chuyến đi cũng như lưu trữ chúng trong cơ sở dữ liệu PostgreSQL sử dụng SQLALCHEMY. Điều này làm cho nó đơn giản cũng như hiệu quả để có quyền truy cập vào dữ liệu sau này.
Bước cuối cùng là lặp đi lặp lại trên tất cả các số tàu cũng như ngày để kéo dữ liệu. Kịch bản này chỉ sử dụng một số vòng lặp lồng nhau để có được dữ liệu cũng như lưu trữ nó. Một kịch bản nữa lấy dữ liệu của ngày hôm trước cũng như lưu trữ nó trong cơ sở dữ liệu. Điều này được thiết lập trên một công việc cron, vì vậy cơ sở dữ liệu vẫn còn tươi.
Xây dựng trang web (giá rẻ)
Trainstats.ca Website
Tại thời điểm này, chúng tôi có dữ liệu đến hơn 12.000 chuyến. Mặc dù chúng ta có thể chạy thủ công các truy vấn cũng như so sánh các tập lệnh để tạo ra các ô, nó thú vị hơn rất nhiều để đặt dữ liệu trực tuyến. Điều đó cho biết đã đến lúc phát triển một trang web. Làm cho mọi thứ trông tuyệt vời trên web không phải là sở trường của tôi, vì vậy [Phil Everson] đã nhảy vào để thực hiện một số phát triển web.
Để thêm một ràng buộc, chúng tôi muốn làm cho trang web là giá cả phải chăng nhất có thể để chạy. Nền tảng như một dịch vụ dịch vụ như Heroku Ran khoảng 20 đô la một tháng. Một máy chủ cá nhân trực tuyến từ DigitalOcean sẽ chi phí ít nhất 5 đô la. Sự lựa chọn ít tốn kém nhất là tạo một trang web tĩnh.
Một trang web tĩnh là một chuyến đi trở lại trong những ngày của Geocities. Bạn có thể giữ các tệp, tuy nhiên không thể thực hiện bất kỳ loại xử lý nào trên máy chủ. May mắn thay, điều này hoạt động tốt cho loại dữ liệu chúng tôi đang cung cấp. Tất cả các dữ liệu chuyến đi tổng hợp có thể được xuất sang các tệp JSON, cũng như JavaScript ở phía máy khách có thể tấn dữ liệu cũng như các ô màn hình.
Trang web của TrainStats bao gồm một số HTML, CSS, cũng như JavaScript chạy trong trình duyệt của bạn, cũng như một bộ sưu tập dữ liệu JSON với dữ liệu. Bộ dữ liệu được tạo hàng ngàybởi một công việc cron nữa, cho phép tất cả các xử lý xảy ra trong một lần trên một máy tính khu vực. Sau đó, giao diện dòng lệnh dịch vụ web Amazon được sử dụng để đẩy dữ liệu lên S3, nơi có thể được người dùng lấy lại. Vì các bộ dữ liệu nhỏ, cũng như S3 rẻ, điều này làm cho chi phí thấp hơn so với lưu trữ thông thường.
Kết quả
Bản hack này chủ yếu được phát triển để giải trí, tuy nhiên nó có một vài phát hiện hấp dẫn. Trên tuyến Ottawa bình thường đến Tuyến Toronto của tôi, tôi có nhiều khả năng chọn tàu một cách kịp thời 84% thời gian, so với cái mà chỉ cuộn vào trạm mà không chậm trễ trên 28% chuyến đi. Một số khách du lịch khác có thể khám phá các số liệu thống kê là tốt. Dù bằng cách nào, đó là một bài tập hấp dẫn trong việc cào một bộ dữ liệu cũng như cung cấp dịch vụ web trên giá rẻ.
Nếu bạn đang nghĩ về nguồn, tất cả là trên GitHub để lấy. Chúng tôi vui lòng yêu cầu bạn không ddos bằng đường sắt với nó.