Добавлена система выбора сервиса ip (пока что без теста)

This commit is contained in:
swayfarer 2025-05-28 20:15:10 +03:00
parent 75dce5f3c2
commit 3d24d54091
4 changed files with 79 additions and 3 deletions

View File

@ -1,12 +1,17 @@
package ru.dima.weather;
import ru.dima.weather.city.CityByIpResolver;
import ru.dima.weather.city.IpInfoService;
import ru.dima.weather.city.IpProvider;
import ru.dima.weather.city.IpProviderCLISelector;
import ru.dima.weather.city.IpProviderRegistry;
import ru.dima.weather.cli.CLIInputReader;
import ru.dima.weather.cli.WeatherProviderCLISelector;
import ru.dima.weather.http.HttpRequester;
import ru.dima.weather.provider.OpenWeatherMapWeatherProvider;
import ru.dima.weather.provider.WeatherProviderRegistry;
import java.util.ArrayList;
/*
1. Брать текущий IP
2. Определять город по текущему IP
@ -16,16 +21,20 @@ public class WeatherApp {
public static void main(String[] args) {
var httpRequester = new HttpRequester();
var cityByIpResolver = new CityByIpResolver(httpRequester);
var weatherProviderRegistry = new WeatherProviderRegistry();
IpProviderRegistry ipProviderRegistry = new IpProviderRegistry();
IpInfoService ipInfoService = new IpInfoService(httpRequester);
IpProviderCLISelector ipProviderCLISelector = new IpProviderCLISelector(new CLIInputReader(System.in), ipProviderRegistry.registerWeatherProvider(ipInfoService));
ipProviderCLISelector.selectIpProviderFromCLI();
var openWeatherMapProvider = new OpenWeatherMapWeatherProvider(httpRequester, "29ed5ca47c3d0c32385b18f1e82e522f");
weatherProviderRegistry.registerWeatherProvider(openWeatherMapProvider);
var weatherProviderCliSelector = new WeatherProviderCLISelector(new CLIInputReader(System.in), weatherProviderRegistry);
var weatherProviderSelectedByUser = weatherProviderCliSelector.selectWeatherProviderFromCLI();
System.out.println(weatherProviderSelectedByUser.getWeeklyWeatherInCity(cityByIpResolver.getCurrentCityViaIP()));
// System.out.println(openWeatherMapProvider.getWeeklyWeatherInCity(cityByIpResolver.getCurrentCityViaIP()));
}

View File

@ -0,0 +1,24 @@
package ru.dima.weather.city;
import ru.dima.weather.http.HttpRequester;
import static ru.dima.weather.city.IpInfoService.IP_INFO_URL;
public class IpInfoService implements IpProvider {
public static final String IP_INFO_URL = "https://ipinfo.io/city";
private HttpRequester httpRequester;
public IpInfoService (HttpRequester httpRequester) {
this.httpRequester = httpRequester;
}
@Override
public String getCurrentCityViaIP() {
return httpRequester.getString(IP_INFO_URL)
.replace("\n", "")
.replace("\r", "");
}
@Override
public String getName(){
return "ipinfo";
}
}

View File

@ -0,0 +1,28 @@
package ru.dima.weather.city;
import ru.dima.weather.cli.CLIInputReader;
import java.util.List;
public class IpProviderCLISelector {
private CLIInputReader cliInputReader;
private List<IpProvider> ipProviders;
public IpProviderCLISelector(CLIInputReader cliInputReader, List<IpProvider> ipProviders) {
this.cliInputReader = cliInputReader;
this.ipProviders = ipProviders;
}
public IpProvider selectIpProviderFromCLI() {
System.out.println("Выберите сервис для получения вашего города через ip:");
for(int i = 0; i < ipProviders.size(); i ++){
System.out.println((i + 1) + ". " + ipProviders.get(i).getName());
}
int sks = cliInputReader.readInteger();
while (sks < 1 || sks > ipProviders.size()) {
System.out.println("Такого варианта нет. Побробуйте еще раз");
sks = cliInputReader.readInteger();
}
return ipProviders.get(sks - 1);
}
}

View File

@ -0,0 +1,15 @@
package ru.dima.weather.city;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class IpProviderRegistry {
private List <IpProvider> registerIpProvider = new ArrayList<>();
public List<IpProvider> registerWeatherProvider(IpProvider ipProvider) {
registerIpProvider.add(ipProvider);
return Collections.unmodifiableList(registerIpProvider);
}
}