Pobieranie danych z Web API

Pobieranie danych z Web API
TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
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?

RE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:36
0

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

edytowany 1x, ostatnio: Redivius
TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
0

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

RE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:36
0

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

TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
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

E9
  • Rejestracja:ponad 13 lat
  • Ostatnio:12 miesięcy
  • Postów:395
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.

edytowany 1x, ostatnio: error91
n0name_l
A co jest takiego problematycznego w dacie? :|
E9
a/gbp/2012-01-01/2012-01-31 to jest data ?
n0name_l
Z tego co OP pisze to są parametry, więc "a", "gbp" i obie daty trzeba traktować oddzielnie. Anyway, problemu ze "ścieżkami" jako parametry URLi też nie ma. + nie stawia się spacji przed znakiem zapytania..
E9
Czyli Twoim zdaniem lepiej zmapować całe zewnętrzne api na swoją usługę? Poza tym czemu zwracasz mi uwagę na interpunkcję skoro zaczynasz zdanie od znaku plusa?
TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
0

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

RE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:36
0

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

Kopiuj
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:

Kopiuj
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);
edytowany 1x, ostatnio: Redivius
TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
0

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

RE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:36
0

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

TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
0

okej, czyli najszybciej bedzie przez apk konsolową?

RE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:36
0

Tak.

TA
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:12
0

okej, dzięki wielkie!

DM
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:1
0
Redivius napisał(a):

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

Kopiuj
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:

Kopiuj
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?

edytowany 1x, ostatnio: daro M.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.