Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Diskuze: Nejlepší způsob zpracování dat z webu

Aktivity (3)
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20. ledna 15:30

Ahoj, začínám programovat v Kotlinu pro Android. Jsem spíš webař a tak se do problematiky zatím dostávám.
Mám v plánu vytvořit několik aplikací, které budou zpracovávat data buď v JSON a nebo v CSV.
Jedna aplikace bude mít méně proměnlivá data, takže si je budu tahat v JSON a ukládat do databáze a při aktualizaci přemazávat.
Co ale s daty, které se budou měnit častěji? Jaký je nejlepší způsob?

  • uložit JSON v zařízení a zobrazovat je takto lokálně a při aktualizaci jen znovu stáhnout JSON?
  • tahat je do zařízení a uložit do DB a přemazávat?
  • tahat data přímo bez meziuložení?

Jde mi o to, aby nějak byla data zobrazitelná i mimo netové připojení.
DB volím jen z toho důvodu, že se dá dobře na data dotazovat. Jde to i elegantněji? Díky za nakopnutí.

 
Odpovědět  +1 20. ledna 15:30
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Samuel Kodytek:20. ledna 16:09

Ahoj,

Já osobně bych volil 3. způsob, kde si vždy stáhneš data ze serveru a uložíš si je do nějakého místního uložiště (doporučuji se kouknout realm).

Při dotazování serveru, bych si vždy vyclearoval "db", vytvořil nové objekty (podle toho jsonu) a následně je uložil do "db" pomocí realmu. Kdyby náhodou, se zařízení nedokázalo dotázat na server tak v catchi nebo v nějakém callbacku (zaleží co používáš za knihovnu na http requesty) jen vyplníš tvoji activitu pomocí těch objektů, které sis v minulosti uložil do realmu.

Přesto že mi příjde ten to postup nehlehčí má 2 problemy...

  • 1. - Co se má stát když klient nebude připojený k internetu a nebude mít nic uložené v db?
  • 2. - Kdyby jsi měl víc aktivních uživatelů tak ti můžou zahltit server...

Na práci s realmem, mám už připravených pár članků, které momentálně dopisuji.

Pokud jsi píšeš i backend sám, doporučuji se kouknout na Firebase.

Nahoru Odpovědět 20. ledna 16:09
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20. ledna 16:33

Díky. Tvoje řešení je teda spíš ta moje druhá odrážka. Uvažoval jsem o SQLite, ale Realm by asi neměl být problém.
K tomu zahlcení, backend mám na webhostingu. Těch dotazů budou max vyšší stovky, to by nemuselo hosting zahltit.
Na Firebase se podívám.

 
Nahoru Odpovědět 20. ledna 16:33
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 16:36

Pokud máš webhosting, tak tě zahlcení asi v takovém množství uživatelů nemusí zajímat :)

Nahoru Odpovědět 20. ledna 16:36
There is more than one way to screw it
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 16:39

Co jsem zapomněl napsat je, že Firebase umí pracovat i offline: https://firebase.google.com/…able-offline

To je proč jsem ti ho vůbec doporučil.

Nahoru Odpovědět 20. ledna 16:39
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20. ledna 16:40

Zrovna se na to dívám. Offline? Takže se to kompiluje přímo s apk?

 
Nahoru Odpovědět 20. ledna 16:40
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 16:48

Teď nevím přesně jak to myslíš, ale ukládá si to si to výsledky dotazů/dotazy někam do mezipaměti a když se zařízení nemůže připojit k serveru, tak pouze vezme ty poslední stažené data a zobrazí je. Další věc co to umí je, že když by uživatel například z telefonu, který není připojený k internetu, poslal například nějaký komentář (nějakou update/write akci) tak si to uloží ten dotaz a pošle ho až bude zase připojený k internetu.

Furt to funguje podobně jak nějakej webhosting s db a apičkem, jen na to máš knihovnu a asi to bude lépe optimalizovaný než klasický webhosting.

Editováno 20. ledna 16:50
Nahoru Odpovědět 20. ledna 16:48
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Odpovídá na Samuel Kodytek
Jan Balák:20. ledna 16:55

OK, no ty aplikace budou především data tahat, ne ukládat. Takže asi půjdu tím prvním řešením bez Firebase.
Zatím to mám namyšlené tak, že minimálně 2 z aplikací budou využívat na webhostingu parser, který zpracovává webstránku a připravuje JSON. Tam by se to dalo optimalizovat pravidelným spouštěním a ukládáním na hosting a taháním těchto uložených dat.
Druhou možností je parsovat data přímo v aplikaci, ale do toho se mi moc nechce. V PHP jsem totiž mnohem jistější než řešit toto přímo v aplikaci.
Kdybych to zas řešil v aplikaci, nemusím řešit ukládání. Ale ten mezikrok si raději udělám.

 
Nahoru Odpovědět 20. ledna 16:55
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 17:02

JSON se velmi lehce parsuje zrovna v Kotlinu/Javě pomocí knihovny Gson. Kód vypadá nějak tak to:

Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);

Zdroj: http://www.javacreed.com/…son-example/

Editováno 20. ledna 17:03
Nahoru Odpovědět 20. ledna 17:02
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20. ledna 17:21

O parsování JSONu vím, teď jsem myslel parsovat data z webu. Tím bych se vyhnul tomu JSONu, ukládání dat atd.

 
Nahoru Odpovědět 20. ledna 17:21
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 17:27

Jak to myslíš "parsovat data z webu"? Že by jsi načetl html a projel to nějakým html selectorem?

Nahoru Odpovědět 20. ledna 17:27
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20. ledna 17:33

Ano, přesně tak. Teď to stejné dělám na hostingu a výsledkem je JSON. A ten právě chci v aplikaci zpracovávat.
Pokud bych se tomu chtěl vyhnout, asi by to šlo parsovat v Kotlinu přímo v aplikaci. Ale na to si netroufám, aspoň zatím ne.
A od toho vznikl původní dotaz - jak tohle efektivně dělat :-).

 
Nahoru Odpovědět 20. ledna 17:33
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Odpovídá na Jan Balák
Samuel Kodytek:20. ledna 17:42

Určitě to půjde přes: https://jsoup.org/

Ale příjde mi to jako velmi špatný nápad a zvyk, protože:

  • Velikost dotazu, který klient bude muset stahovat, bude velký (s porovnáním jsonu)
  • Nedá se vyloučit, že někdy v budoucnu budeš chtít změnit i html strukturu aplikace, co budeš dělat pak?
  • V php máš docela lehký způsob jak parsovat objekty do jsonu, bez nějaké externí knihovny.

Konec konců, myslím, že bude určitě i víc důvodů proč většina aplikací pracuje s jsonem a ne s html.

Nahoru Odpovědět 20. ledna 17:42
There is more than one way to screw it
Avatar
Jan Balák
Člen
Avatar
Jan Balák:20. ledna 18:02

Jo, já to nerozporuju. Jen jsem chtěl nastínit, proč a co vlastně řeším. A protože začínám, tak neznám optimální řešení :-).

 
Nahoru Odpovědět  +1 20. ledna 18:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.