V tematu
Pomoc se skriptem v sedu jsem resil import a upravu dat z internetoveho zdroje. Vysledek vsak nebyl zcela uspokojivy.
Ten skript jsem tedy kompletne prekopal - presel jsem na Yahoo Finance, kteri kurzovni data normalne poskytuji (puvodne jsem ale nevedel, ze maji primo takovy "data feed" a skutecne vsechny meny). Ale nevyhoda je, ze jednotlive, ne davkove. Takze pro 20 men je to stazeni 20ti souboru wgetem, coz je docela pomale. To by ani tolik nevadilo (me ta pomalost vadila pri primem html importu do LibreOffice Calcu, protoze Calc je behem stahovani dat zasekly, ale nezobrazuje se prubeh a tak neni znat, ze/zda neco dela).
Dospel jsem tedy k nasledujicimu reseni:
1) Mam "ridici skript":
#!/bin/bash
# Skript, ktery vyvola stazeni aktualnich kurzu z internetu a jejich import do tabulky
folder=".YahooFinance"
subfolder="TemporaryData"
soubor="Yahoo.csv"
datum=`date +'%Y-%m-%d'`
path="/home/`whoami`/Dokumenty"
tabulka="Portfolio manager.ods"
mate-terminal -x "/home/`whoami`/"$folder"/SkriptYahoo"
# Spusti v terminalu uvedeny skript, terminal se potom zavre
libreoffice --calc "$path"/"$tabulka"
# v LibreOffice Calcu spusti pozadovanou tabulku
exit 0
Ten jsem vytvoril proto, aby se skript "
SkriptYahoo" viditelne spustil v terminalu a tim dal uzivateli najevo, ze se neco deje a je treba chvilku pockat.
Samotny skript "
SkriptYahoo" je nasledujiciho zneni:
#!/bin/bash
folder=".YahooFinance"
subfolder="TemporaryData"
soubor="Yahoo.csv"
datum=`date +'%Y-%m-%d'`
if [ -d /home/`whoami`/"$folder" ]
then echo "Folder $folder already exists"
else cd /home/`whoami`/ ; mkdir "$folder"; cd "$folder"/
fi
# Pokud slozka program juste neexistuje, je vytvorena
if [ -f /home/`whoami`/"$folder"/"$soubor" ]
then rm /home/`whoami`/"$folder"/"$soubor"
else echo "A new $soubor file will be created"
fi
# Pokud jiz existuje soubor s daty, je smazan
if [ -d /home/`whoami`/"$folder"/"$subfolder" ]
then echo "Folder $subfolder already exists"
else cd /home/`whoami`/"$folder"/ ; mkdir "$subfolder" ; cd "$subfolder"/
fi
# Pokud jeste neexistuje slozka na docasna data, je vytvorena
cd /home/`whoami`/"$folder"/"$subfolder"/
echo "Starting data download..."
wget -O 'AMD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKAMD=X'
wget -O 'AUD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKAUD=X'
wget -O 'AZN.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKAZN=X'
wget -O 'BGN.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKBGN=X'
wget -O 'CAD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKCAD=X'
wget -O 'CHF.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKCHF=X'
wget -O 'CLP.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKCLP=X'
wget -O 'CZK.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKCZK=X'
wget -O 'EUR.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKEUR=X'
wget -O 'GBP.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKGBP=X'
wget -O 'GEL.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKGEL=X'
wget -O 'HKD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKHKD=X'
wget -O 'HUF.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKHUF=X'
wget -O 'KGS.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKKGS=X'
wget -O 'KRW.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKKRW=X'
wget -O 'KZT.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKKZT=X'
wget -O 'LTL.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKLTL=X'
wget -O 'LVL.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKLVL=X'
wget -O 'MDL.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKMDL=X'
wget -O 'MKD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKMKD=X'
wget -O 'MNT.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKMNT=X'
wget -O 'MYR.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKMYR=X'
wget -O 'NZD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKNZD=X'
wget -O 'PHP.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKPHP=X'
wget -O 'PLN.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKPLN=X'
wget -O 'PYG.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKPYG=X'
wget -O 'RON.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKRON=X'
wget -O 'RSD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKRSD=X'
wget -O 'RUB.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKRUB=X'
wget -O 'SGD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKSGD=X'
wget -O 'THB.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKTHB=X'
wget -O 'TJS.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKTJS=X'
wget -O 'TMT.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKTMT=X'
wget -O 'TRY.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKTRY=X'
wget -O 'UAH.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKUAH=X'
wget -O 'USD.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKUSD=X'
wget -O 'UZS.csv' 'http://finance.yahoo.com/d/quotes.csv?f=l1&s=CZKUZS=X'
touch "$soubor"
cat AMD.csv >> $soubor
cat AUD.csv >> $soubor
cat AZN.csv >> $soubor
cat BGN.csv >> $soubor
cat CAD.csv >> $soubor
cat CHF.csv >> $soubor
cat CLP.csv >> $soubor
cat CZK.csv >> $soubor
cat EUR.csv >> $soubor
cat GBP.csv >> $soubor
cat GEL.csv >> $soubor
cat HKD.csv >> $soubor
cat HUF.csv >> $soubor
cat KGS.csv >> $soubor
cat KRW.csv >> $soubor
cat KZT.csv >> $soubor
cat LTL.csv >> $soubor
cat LVL.csv >> $soubor
cat MDL.csv >> $soubor
cat MKD.csv >> $soubor
cat MNT.csv >> $soubor
cat MYR.csv >> $soubor
cat NZD.csv >> $soubor
cat PHP.csv >> $soubor
cat PLN.csv >> $soubor
cat PYG.csv >> $soubor
cat RON.csv >> $soubor
cat RSD.csv >> $soubor
cat RUB.csv >> $soubor
cat SGD.csv >> $soubor
cat THB.csv >> $soubor
cat TJS.csv >> $soubor
cat TMT.csv >> $soubor
cat TRY.csv >> $soubor
cat UAH.csv >> $soubor
cat USD.csv >> $soubor
cat UZS.csv >> $soubor
mv /home/`whoami`/"$folder"/"$subfolder"/"$soubor" /home/`whoami`/"$folder"/
rm -rf /home/`whoami`/"$folder"/"$subfolder"
echo "Data successfully downloaded"
echo "Program will close in 3 seconds..."
sleep 2s
exit 0
Ten
wget by se dal asi zrychlit presunutim nekterych uloh na pozadi (
&), ale mohlo by to mit podle me za nasledek, ze ta tabulka se otevre driv, nez vubec bude vsechno stazeno, nebo zapis a smazani podslozky by mohlo probehnou predcasne.
Je evidentni, ze prinejmensim ta serie
cat by se dala nahradit necim jako
#!/bin/bash
folder=".YahooFinance"
subfolder="TemporaryData"
soubor="Yahoo.csv"
for i in *.csv; do
[ -e "$i" ] || continue
cat $i >> $soubor
done
Ale ma to par uskali, kvuli kterym jsem to zatim neaplikoval (razeni men v tabulce vs. abecedni razeni
catem - soubor z Yahoo Finance neobsahuje symbol meny, pouze kurz).
Hlavnim nametem k optimalizaci by tedy bylo:
1) Aby vsechny ulohy
wgetu probehly soucasne, ale skript nepokracoval dokud neprobehnou vsechny, NEBO aby se stahovali postupne, ale stazene soubory se zapsali jeden po druhem do jedinneho souboru (je jedno jestli do rady s nejakym oddelovacem, nebo nova hodnota na kazdy radek).
2) Integrovat do odkazu pro
wget jakousi "variabilni promennou", cimz myslim to, ze ten symbol druhe meny by se bral postupne z nejakeho seznamu (v jinem souboru), dokud by se nedoslo na konec.
3) Integrovat kod meny do stazeneho souboru (napr. pro CZKCLP se stahne soubor o obsahu
0.25 a treba
sedem bych na zacatek radky vlozil
CLP;.
Prinejmensim tu 3) bych asi zvladl sam, nicmene by to asi nebyl zrovna ortodoxni skript...
Predem dekuji za vsechny rady, navody a pripominky! Jinak jedna zvlastnost - pokud dam skript
PortfolioManager "
spustit", vse probehne naprosto v poradku. Pokud ale zvolim "
Spustit v terminalu", nepocka se na ukonceni
SkriptYahoo a okamzite se spousti i LibreOffice. V zasade mi to nevadi (spoustet v terminalu se nema), ale prekvapuje me to...