Пример #1
0
        private async Task <BlaBlaCarResponseModel> SendRequest(BlaBlaCarRequestModel model, int page = 1)
        {
            try
            {
                var request = WebRequest.Create("https://public-api.blablacar.com/api/v2/trips?fn=" + model.PlaceFrom
                                                + "&tn=" + model.PlaceTo +
                                                "&locale=" + model.Locale + "&_format=json" + "&limit=100" +
                                                "&page=" + page +
                                                $"&db={DateTime.Today.Date:yyyy-MM-dd}");
                request.Headers["key"] = model.ApiKey != "" ? model.ApiKey : ApiKeyController.CurrentKey;
                request.Method         = "GET";
                var response = await request.GetResponseAsync();

                var data     = await new StreamReader(response.GetResponseStream() ?? throw new InvalidOperationException()).ReadToEndAsync();
                var jsonData = JObject.Parse(data);

                _tryNum = 0;

                return(jsonData.Root.ToObject <BlaBlaCarResponseModel>());
            }
            catch (Exception e)
            {
                _tryNum++;
                if (_tryNum == 5)
                {
                    throw new Exception("Fatal request error");
                }

                OnChangeOwnerState?.Invoke("Exception", null);
                OnMessage?.Invoke(e.Message, null);
                ApiKeyController.SkipKey();
                model.ApiKey = ApiKeyController.CurrentKey;
                return(await SendRequest(model, page));
            }
        }
Пример #2
0
        public async Task <List <TripModel> > Get(BlaBlaCarRequestModel model)
        {
            try
            {
                ApiKeyController.SkipKey();
                model.ApiKey = ApiKeyController.CurrentKey;
                OnChangeOwnerState?.Invoke("Getting page 1", null);
                var startPage = await SendRequest(model);

                var trips = startPage.Trips.ToList();

                if (startPage.Pager.Pages == 1)
                {
                    return(trips);
                }

                for (var i = 2; i <= startPage.Pager.Pages; i++)
                {
                    ApiKeyController.SkipKey();
                    model.ApiKey = ApiKeyController.CurrentKey;
                    OnChangeOwnerState?.Invoke($"Getting page {i}/{startPage.Pager.Pages}", null);
                    trips.AddRange((await SendRequest(model, i)).Trips.ToList());
                }

                return(trips);
            }
            catch (Exception e)
            {
                _tryNum = 0;
                ApiKeyController.SkipKey();
                OnChangeOwnerState?.Invoke(e.Message, null);
                OnMessage?.Invoke(e.Message, null);
                throw;
            }
        }
Пример #3
0
 public PathChecker(int id, BlaBlaCarRequestModel request)
 {
     Id                             = id;
     Request                        = request;
     _apiGetter                     = new ApiGetter();
     _apiGetter.OnMessage          += OnApiGetterMessage;
     _apiGetter.OnChangeOwnerState += OnApiGetterStateGet;
     _folderPath                    = Directory.GetCurrentDirectory() + "/" + "Trips" + "/" + Request;
     Directory.CreateDirectory(_folderPath);
 }