You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.2 KiB
95 lines
2.2 KiB
using System; |
|
using System.Linq; |
|
using System.Text.Json; |
|
using System.Threading.Tasks; |
|
using InfoferScraper; |
|
using InfoferScraper.Scrapers; |
|
|
|
while (true) { |
|
Console.WriteLine("1. Scrape Train"); |
|
Console.WriteLine("2. Scrape Station"); |
|
Console.WriteLine("3. Scrape Itineraries"); |
|
Console.WriteLine("0. Exit"); |
|
|
|
var input = Console.ReadLine()?.Trim(); |
|
switch (input) { |
|
case "1": |
|
await PrintTrain(); |
|
break; |
|
case "2": |
|
await PrintStation(); |
|
break; |
|
case "3": |
|
await ScrapeItineraries(); |
|
break; |
|
case null: |
|
case "0": |
|
goto INPUT_LOOP_BREAK; |
|
} |
|
Console.WriteLine(); |
|
} |
|
INPUT_LOOP_BREAK:; |
|
|
|
async Task PrintTrain() { |
|
Console.Write("Train number: "); |
|
var trainNumber = Console.ReadLine()?.Trim(); |
|
|
|
if (trainNumber == null) { |
|
return; |
|
} |
|
|
|
Console.WriteLine( |
|
JsonSerializer.Serialize( |
|
await new TrainScraper().Scrape(trainNumber), |
|
new JsonSerializerOptions { |
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, |
|
WriteIndented = true, |
|
} |
|
) |
|
); |
|
} |
|
async Task PrintStation() { |
|
Console.Write("Station name: "); |
|
var stationName = Console.ReadLine()?.Trim(); |
|
|
|
if (stationName == null) { |
|
return; |
|
} |
|
|
|
Console.WriteLine( |
|
JsonSerializer.Serialize( |
|
await new StationScraper().Scrape(stationName), |
|
new JsonSerializerOptions { |
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, |
|
WriteIndented = true, |
|
} |
|
) |
|
); |
|
} |
|
async Task ScrapeItineraries() { |
|
Console.Write("From station: "); |
|
var from = Console.ReadLine(); |
|
Console.Write("To station: "); |
|
var to = Console.ReadLine(); |
|
|
|
if (from == null || to == null) return; |
|
|
|
var data = await new RouteScraper().Scrape(from, to); |
|
|
|
Console.WriteLine($"{data.Count} itineraries:"); |
|
Console.WriteLine(); |
|
|
|
void PrintArrDepLine(DateTimeOffset date, string station) { |
|
Console.WriteLine($"{date:HH:mm} {station}"); |
|
} |
|
|
|
foreach (var itinerary in data) { |
|
foreach (var train in itinerary.Trains) { |
|
PrintArrDepLine(train.DepartureDate, train.From); |
|
Console.WriteLine($" {train.TrainRank,-4} {train.TrainNumber,-5} ({train.Operator}), {train.Km,3} km via {string.Join(", ", train.IntermediateStops)}"); |
|
PrintArrDepLine(train.ArrivalDate, train.To); |
|
} |
|
|
|
Console.WriteLine(); |
|
} |
|
}
|
|
|