2017-05-03 4 views
0

실시간 데이터 액세스를 신청하려면이 웹 사이트 (http://www.calgarytransit.com/survey/real-time-data-access)로 이동하십시오. 성공적으로 적용된 후 다음과 같은 액세스 URL로 답장을 받았습니다.사용 방법 - 대중 교통 실시간 데이터 액세스

실시간 데이터에 액세스하기 위해 등록 해 주셔서 감사합니다. 당신은 다음 링크에서 실시간 데이터에 액세스 할 수 있습니다 :

http://transitdata.calgary.ca/ctransit/tripupdates.pb

http://transitdata.calgary.ca/ctransit/alerts.pb

http://transitdata.calgary.ca/ctransit/vehiclepositions.pb

내가 확장 .pb 또하지만이를 사용하는 방법을 잘와 URL을 참조하십시오. 그래서 난 그냥 브라우저에서 URL을 붙여이 오류 메시지가 있어요 :

서버 오류

404 - 파일 또는 디렉터리를 찾을 수 없음을. 을 찾고있는 리소스가 제거되었거나, 이름이 변경되었거나, 일시적으로 을 사용할 수 없습니다.

도와 주실 수 있습니까?

답변

0

나는 또한 같은 상황에 처해있었습니다. 일부 R & D 이후 프로토콜 버퍼에 대해 알아야합니다. 그런 다음 C#에서 이러한 API에 액세스하는 한 가지 방법을 만들었습니다. 나는 당신과 나의 해결책을 공유하고있다. 당신은 분명히 몇 가지 힌트를 얻을 것입니다.
string url = "<Your url>.pb"; HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(string.Format(url)); webReq.Method = "GET"; NetworkCredential networkCredential = new NetworkCredential("user_name", "password"); CredentialCache myCredentialCache = new CredentialCache { { new Uri(url), "Basic", networkCredential } }; webReq.PreAuthenticate = true; webReq.Credentials = myCredentialCache; HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse(); Stream answer = webResponse.GetResponseStream(); StreamReader _recivedAnswer = new StreamReader(answer); FeedMessage message = ProtoBuf.Serializer.Deserialize<FeedMessage>(_recivedAnswer.BaseStream);
코드는 C# 형식입니다. 여기, 응답을 얻으려면 ProtoBuff.Serializer을 사용하여 응답을 deserialize하고 싶습니다. 이것을 위해 2 개의 Nuget 패키지가 필요했습니다. 하나는 ProtoBuf의 경우 protobuf-net이고 FeedMessage의 경우 GtfsRealtimeBindings입니다.
자세한 내용은 다음 링크를 참조하십시오.

  1. http://www.c-sharpcorner.com/article/serialization-and-deserialization-ib-c-sharp-using-protobuf-dll/
  2. https://developers.google.com/transit/gtfs-realtime/examples/dotnet-sample
  3. https://developers.google.com/transit/gtfs-realtime/gtfs-realtime-proto
  4. http://www.codeguru.com/columns/dotnet/working-with-google-protocol-buffers-and-.net.html
관련 문제