Pobieranie danych z Web API

0

Cześć, musze napisać w c# prosta usługe webowa, ktora bedzie pobierała dane z Web API NBP (kursy walut) w XML. Ma to sie odbywać na zasadzie takiej, że jest w tej usłudze podany URL ale nie taki jak gotowy podany na NBP czyli http://api.nbp.pl/api/exchangerates/rates/a/gbp/2012-01-01/2012-01-31/ tylko ten fragment a/gbp/2012-01-01/2012-01-31 ma byc jako parametry i potem ma to byc zapisane do pliku .xml. Ktoś mógłby mi pomóc, naprowadzić mnie jak to zrobic?

0

A z czym dokładnie masz problem? Do pobrania tego xml'a, który daje ci api możesz użyć klasy HttpClient.

0

Największy chyba w tym ze jestem lekko zielona w C#, ale dzieki za podpowiedz! Poczytam o tym

0

Ten fragment ma być podany w konsoli czy jako argument przy uruchamianiu?

0

jako argument cos w stylu odpowiednia wbudowana funkcja("URL") ale fragment ze zmiennymi czyli cos w stylu tabela=A, waluta=[gbp euro usd] itd

0

podawanie parametrów typu a/gbp/2012-01-01/2012-01-31 w url może być problematyczne. Można by to wysłać poprzez POST w body requescie.

0

a cos w stylu "/"+tabela+"/"? kiepski pomysł?

0

Myślę, że tak będzie najprościej:

Uri url = new Uri("http://api.nbp.pl/api/exchangerates/rates/a/gbp/2012-01-01/2012-01-31/");
WebClient webClient = new WebClient();
webClient.Headers["Accept"] = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webClient.DownloadFile(url, "mojplik.xml");

Trzeba ustawić nagłówek bo w innym wypadku dostajemy odpowiedź w json.
Oczywiście url musisz sobie poskładać gdzieś wcześniej.
Powinno się użyć DownloadFileAsync żeby nie blokować głównego wątku, ale zakładam, że wolisz najprostsze rozwiązania.

#Edit:
Jako, że WebClient jest przestarzały to można to samo wykonać w ten sposób:

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(@"application/xml"));
var result = client.GetStringAsync(url).Result;
File.WriteAllText("mojplik2.xml", result);
0

a wystarczy ze napisze to jako nowa klasa i wywołam?

0

Ten kawałek kodu realizuje pobieranie i zapis do xml z podanej przez ciebie strony. Możesz to wsadzić gdzie chcesz.

0

okej, czyli najszybciej bedzie przez apk konsolową?

0

Tak.

0

okej, dzięki wielkie!

0
Redivius napisał(a):

Myślę, że tak będzie najprościej:

Uri url = new Uri("http://api.nbp.pl/api/exchangerates/rates/a/gbp/2012-01-01/2012-01-31/");
WebClient webClient = new WebClient();
webClient.Headers["Accept"] = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webClient.DownloadFile(url, "mojplik.xml");

Trzeba ustawić nagłówek bo w innym wypadku dostajemy odpowiedź w json.
Oczywiście url musisz sobie poskładać gdzieś wcześniej.
Powinno się użyć DownloadFileAsync żeby nie blokować głównego wątku, ale zakładam, że wolisz najprostsze rozwiązania.

#Edit:
Jako, że WebClient jest przestarzały to można to samo wykonać w ten sposób:

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(@"application/xml"));
var result = client.GetStringAsync(url).Result;
File.WriteAllText("mojplik2.xml", result);

A Jak będzie pobranie pliku zip który otworzę po zalogowaniu się na strone, korzystając z HttpClient?

1 użytkowników online, w tym zalogowanych: 0, gości: 1