Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 70136 Skopiuj do schowka API pobiera tylko jedną stronę
Autor Wiadomość
bastek1986
Forumowicz


Wersja: Win Office 365
Posty: 13
Wysłany: 13-02-2021, 11:42   API pobiera tylko jedną stronę

Witam

Mam problem z pobraniem danych. Kiedy jest więcej niż jedna strona pokazuje w tabeli sumę tych stron.
Więcej informacji w pliku.
Dziękuję z góry

Pozdrawiam
Sebastian

polska api.xlsx
Pobierz Plik ściągnięto 5 raz(y) 16.7 KB

ID posta: 400312 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2495 razy
Posty: 8288
Wysłany: 13-02-2021, 13:19   

bastek1986 napisał/a:
Mam problem z pobraniem danych. Kiedy jest więcej niż jedna strona pokazuje w tabeli sumę tych stron.
To prawda, ale tylko w Xml-u.

Zamień adres(y) Xml-owy na Json-a a otrzymasz dane.

Dodatkowo do każdego adresu możesz dodać parametr z jakiej strony chcesz pobrać dane dodając na końcu linku
Kod:
&page=x
gdzie x oznacza numer strony.
W załączniku masz podane adresy.

Przetestuj i sobie dopasuj takie zapytanie
Kod:
let
 Pages= Json.Document(Web.Contents("https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG"))[data][total_pages],   // Number of iterations
 URL =  "https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG",   // URL
 
 FnGetOnePage =
  (url) as record =>
   let
    Source = Json.Document(Web.Contents(url)),
    data = try Source[data][match] otherwise null,
    next = try Source[data][next_page] otherwise null,
    res = [Data=data, Next=next]
   in
    res,
 
 GeneratedList =
  List.Generate(
   ()=>[i=0, res = FnGetOnePage(URL)],
   each [i]<Pages and [res][Data]<>null,
   each [i=[i]+1, res = FnGetOnePage([res][Next])],
   each [res][Data]),
    Table_FromList = Table.FromList(GeneratedList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    ExpandListColumn = Table.ExpandListColumn(Table_FromList, "Column1"),
    ExpandRecordColumn = Table.ExpandRecordColumn(ExpandListColumn, "Column1", {"home_id", "added", "location", "outcomes", "away_name", "competition_name", "scheduled", "ft_score", "score", "home_name", "competition_id", "league_id", "id", "h2h", "away_id", "time", "events", "status", "et_score", "last_changed", "date", "fixture_id", "ht_score"}, {"Column1.home_id", "Column1.added", "Column1.location", "Column1.outcomes", "Column1.away_name", "Column1.competition_name", "Column1.scheduled", "Column1.ft_score", "Column1.score", "Column1.home_name", "Column1.competition_id", "Column1.league_id", "Column1.id", "Column1.h2h", "Column1.away_id", "Column1.time", "Column1.events", "Column1.status", "Column1.et_score", "Column1.last_changed", "Column1.date", "Column1.fixture_id", "Column1.ht_score"}),
    TransformColumnTypes = Table.TransformColumnTypes(ExpandRecordColumn,{{"Column1.home_id", Int64.Type}, {"Column1.added", type datetime}, {"Column1.away_name", type text}, {"Column1.location", type any}, {"Column1.outcomes", type any}, {"Column1.competition_name", type text}, {"Column1.scheduled", type any}, {"Column1.ft_score", type text}, {"Column1.score", type text}, {"Column1.home_name", type text}, {"Column1.competition_id", Int64.Type}, {"Column1.league_id", Int64.Type}, {"Column1.id", Int64.Type}, {"Column1.h2h", type text}, {"Column1.away_id", Int64.Type}, {"Column1.time", type text}, {"Column1.events", type text}, {"Column1.status", type text}, {"Column1.et_score", type text}, {"Column1.last_changed", type datetime}, {"Column1.date", type date}, {"Column1.fixture_id", Int64.Type}, {"Column1.ht_score", type text}})
in
    TransformColumnTypes


polska api.xlsx
Pobierz Plik ściągnięto 6 raz(y) 358.31 KB

_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
  
ID posta: 400315 Skopiuj do schowka
 
 
bastek1986
Forumowicz


Wersja: Win Office 365
Posty: 13
Wysłany: 13-02-2021, 20:38   

Super dziękuję bardzo. Będę testować na pewno dziś mam nadzieję że wszystko mi się uda.
ID posta: 400342 Skopiuj do schowka
 
 
bastek1986
Forumowicz


Wersja: Win Office 365
Posty: 13
Wysłany: 14-02-2021, 15:48   

Witam

Wie Pan co mam jednak dalej mały problem z pobieraniem tego co potrzebuje.
Faktycznie jak dopiszę jaki nr strony chcę pobrać to działa wszystko dobrze.
Gorzej sprawa wgląda kiedy potrzebuje np strony od - do, lub kiedy potrzebuje pobierać wszystkie dostępne strony z historii zdarzeń.

Prosiłbym jakby Pan mógł podpowiedzieć co ewentualnie wpisać po &page=x gdzie x będzie wszystkimi stronami lub stronami OD - DO.

Przyznaję się bez bicia że w tych kwestiach jestem kiepski.
A ten kod drugi który Pan napisał po kilku próbach stwierdzam że nie wiem gdzie go użyć.
Zawsze jak go wkleiłem pojawiało mi się info że brak jakiegoś tokenu.
Dziękuje z góry za pomoc

Pozdrawiam
Sebastian
ID posta: 400385 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2495 razy
Posty: 8288
Wysłany: 15-02-2021, 01:07   

Jeśli chcesz pobierać strony np. od 2ddo 5 to zamień w zapytaniu ten fragment
Kod:

let
 Pages= Json.Document(Web.Contents("https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG"))[data][total_pages],   // Number of iterations
 URL =  "https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG
 
na
Kod:
let
 Pages=5
 URL =  "https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG&page=2
a zapytanie musisz wkleić w zakładce Strona główna - Edytor zaawansowany.
Powyższego nie testowałem, bo nie mam teraz jak.
Może kolega DwaNiedźwiedzie podejmie temat, bo to jego klimaty. ;-)
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 400407 Skopiuj do schowka
 
 
bastek1986
Forumowicz


Wersja: Win Office 365
Posty: 13
Wysłany: 16-02-2021, 19:59   

Dzięki wielkie za pomoc.
ID posta: 400532 Skopiuj do schowka
 
 
DwaNiedźwiedzie 
Excel Expert



Wersja: Win Office 2016
Pomógł: 279 razy
Posty: 686
Wysłany: 16-02-2021, 20:07   

W pierwszym kroku możesz określić zakres generowanych danych:
Kod:
let
   // pusta lista {} (dla wszystkich), pojedyncza strona {3} lub zakres stron {3, 7}
   Pages_manual = {0, 3},
   URL = "https://livescore-api.com/api-client/scores/history.json?competition_id=60&key=Z4cR7Hn6CEOw9ieo&secret=NG0gFTSLSjqLPtVOy8GFQ4LsIAYRTdgG",
   Pages_total = {0, Json.Document(Web.Contents(URL))[data][total_pages]},
   Pages = if not List.IsEmpty(Pages_manual) then Pages_manual else Pages_total,

   FnGetOnePage = (pg as number) as any =>
     let
        pg = Text.From(pg),
        source = Json.Document(Web.Contents(URL & "&page=" & pg)),
        match = try source[data][match] otherwise {},
        result = if List.IsEmpty(match) then false else match
     in
        result,

   GeneratedList =
      List.Generate(() => [i = Pages{0} - 1, p = {}, next = true],
         each [i] <= Pages{1} and [next],
         each [i = [i] + 1, p = FnGetOnePage(i), next = p is list],
         each [p]),

   #"Przekonwertowane na tabelę" = Table.FromList(List.Skip(GeneratedList, 1), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
   #"Rozwinięta lista" = Table.ExpandListColumn(#"Przekonwertowane na tabelę", "Column1"),
   #"Rozwinięte rekordy" = Table.ExpandRecordColumn(#"Rozwinięta lista", "Column1", {"home_id", "added", "location", "outcomes", "away_name", "competition_name", "scheduled", "ft_score", "score", "home_name", "competition_id", "league_id", "id", "h2h", "away_id", "time", "events", "status", "et_score", "last_changed", "date", "fixture_id", "ht_score"}),
   #"Rozwinięty element outcomes" = Table.ExpandRecordColumn(#"Rozwinięte rekordy", "outcomes", {"extra_time", "half_time", "full_time"}, {"extra_time", "half_time", "full_time"}),
   #"Zmieniono typ" = Table.TransformColumnTypes(#"Rozwinięty element outcomes",{{"home_id", Int64.Type}, {"added", type datetime}, {"location", type any}, {"extra_time", type text}, {"half_time", type text}, {"full_time", type any}, {"away_name", type text}, {"competition_name", type text}, {"scheduled", type any}, {"ft_score", type any}, {"score", type text}, {"home_name", type text}, {"competition_id", Int64.Type}, {"league_id", Int64.Type}, {"id", Int64.Type}, {"h2h", type text}, {"away_id", Int64.Type}, {"time", type text}, {"events", type text}, {"status", type text}, {"et_score", type text}, {"last_changed", type datetime}, {"date", type date}, {"fixture_id", Int64.Type}, {"ht_score", type text}})
in
    #"Zmieniono typ"

Edit: Drobne poprawki, wydaje mi się też, że nie ma zbytnio sensu sięgać do elementu "next_page" na stronie i prościej będzie iterować po zwykłym "&page=" w adresie.
  
ID posta: 400533 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe