Szavazás

Milyen virtualizációt használsz?

Online felhasználók

Jelenleg 0 felhasználó van a webhelyen

Új felhasználók

  • Morello
  • gyo
  • jbaksa
  • tomassy
  • Kalacska13

Ajánlott böngészők

Google Chrome

Jelenlegi hely

Egy feladat és egy megoldás II.

Térjünk rá a részletekre. Az Egy feladat és egy megoldás I. cikk folytatása.

A részfolyamatok Azzal kezdtem, hogy lebontottam részfeladatokra a tevékenységet és megkerestem külön-külön ezekre a lehetőségeket. Megírtam a feladat végrehajtását ellátó szkriptet, leteszteltem, hogy az adott munkafolyamatot rendesen elvégzi-e. Amikor több ilyen részfeladat szkriptje működött, összerakosgattam azokat egy egésszé. Az első feladat az az volt, hogy a kiindulási html-ből kinyerjem a megfelelő linkeket. Ehhez megnéztem, hogy is épülnek fel a linkek, mi jellemző azokra, amelyek számomra fontosak és mi a többire. Azonban alapfeladat, hogyan szedjük ki a linkeket a htmlből. Ehhez ötletet adott, hogy a Midnight Commanderben, ha egy html fájlra F3-at nyomunk, akkor az oldal végére szépen sorba kilistázza a hivatkozásokat. A konzolon léteznek böngészők, mint a links és a lynx. Ez utóbbit a -dump kapcsolóval lehet úgy indítani, hogy a megnyitott html fájl linkjeit szépen kilistázza a lap aljára és ezt lehet aztán egy csövön keresztül továbbítani valamilyen kimenetre. Nos így már ki lehet szedni a linkeket mondjuk egy txt-be. Azért txt fájlba, mert a wget-et lehet úgy paraméterezni, hogy egy fájl tartalmát használja a letöltésekhez. Ez ám a download managger konzol alatt :) Tehát az első lépés így alakult:
lynx -dump kiindulasi.html | grep -i npicture | awk '{print $2}' > linkek.txt
Tehát a lynx -ből a kiindulasi.html-t egy csövön (pipe) átküldjük a grepnek, ami azokat a sorokat adja aztán tovább az az awk részére, amelyekben szerepel az 'npicture' karaktersor - ezekre a linkekre volt szükségem - és ezeket az awk úgy írja ki, hogy minden sor második "szavát" teszi csak bele a linkek.txt-be. Erre azért van szükség, mert a linkeket sorszámozással adja át a lynx a grepnek és enélkül ilyen sorokat kapnánk a linkek.txt-be:
23. http://www.akarmi.hu/barmi/celfajl
Így viszont a wget nem fogja tudni értelmezni a hivatkozásokat. Mivel a célfájlok nevét egy perl szkript produkálta és mindeneggyi ilyen ehhez hasonló furcsa elnevezéssel került volna a gépemre,
npicture.pl?cikk=ossffiwfirccoofawicf&belso=1
ezért ezeket a fájlokat az átláthatóság és kezelhetőség miatt már eleve átnevezve kellett lementenem. Ezt a letöltési és lementési folyamatot egy ciklussal oldottam meg:
n=1
for i in `cat linkek.txt`; do
wget $i -O "$n.tif"
n=`expr $n + 1`
done
Itt azt a két dolgot kell megjegyeznem, hogy a wget sorába természetesen lehet további wget kapcsolókat beletenni, illetőleg mivel eleve tudtam, hogy a célképek formátuma tif, ezért az fixen van a ciklusban. Az előtte lévő változó pedig az elnevezést adja. Tehát ilyen fájlokat kaptam:
kesigomu@nexus:~/sajtoszemle/pic$ ls -l
összesen 412
-rw-r--r--  1 kesigomu users  31899 2005-07-29 09:36 1.tif
-rw-r--r--  1 kesigomu users 159211 2005-07-29 09:36 2.tif
-rw-r--r--  1 kesigomu users  69443 2005-07-29 09:36 3.tif
-rw-r--r--  1 kesigomu users  70199 2005-07-29 09:36 4.tif
-rw-r--r--  1 kesigomu users  65723 2005-07-29 09:36 5.tif
Mivel intranetre kerülnek a képek és a tiff fájlok megjelenítése egyes más operációs rendszerek alatti böngészőben itt-ott problémás, valamint a méretük is általában nagyobb, a képeket egy általános képformátumba kellett átkonvertálnom. Erre a következő ciklust alkalmaztam:
for i in * 
do 
tmp=`echo $i | sed s/'\.[^.]*$'//` 
convert "$tmp.tif" "$tmp.gif"
done
Ez a ciklus az adott mappa tartalmát kilistázza úgy, hogy a $tmp változóba emeli a fájlneveket a kiterjesztésüket levágva, majd a convert utasításnál ezt a nevet megadva egyik formátumról a másikra konvertálja azokat. Arra ügyelni kell, hogy az adott könyvtárban más fájl ne legyen, csak amit konvertálni akarunk. Persze aztán lehet szépen ciffrázni, hogy a konvertálást követően a kiindulási fájlokat töröljük, a végtermékeket meg átpakoljuk máshová stb, stb. Eljutottunk odáig, hogy kiszedtük a linkeket a html fájlból, wget-el leszedtük a fájlokat, átneveztük azokat, majd hogy teljes legyen a mutatvány át is konvertáltuk a képeket. A következő feladat a kiindulási html saját célokra történő átalakítása volt. Ez számomra nehezebb dió volt, mert soha életemben nem használtam sed-et, ami nagyon jó konzol alatt az ilyen feladatokra. Az alap sed utasítás a következő:
 sed -e 's/mintasztring/amirecsereljuksztring/g' munkafajl > celfajl
persze az utasítás elején az "-e" és végén a "g" egy-egy kapcsoló, melyekből elég sok van. Ráadásul a mintasztring tartalmától függően sokfajta jelet lehet, vagy szükséges beletenni a mintasztringünkbe. Nem szándékozom a teljes html átalakítást itt lépésról lépésre leírni, csak pár példát mutatok, ami esetleg jól jöhet valamikor. A komplett szkriptet meg úgyis a cikk végén elérhetővé teszem, ha valaki tanulni szeretne, vagy csak részeit hasznosítani. Amit hasznosítható tanácsként kaptam, a sed utasításban nem csak / jelekkel lehet elválasztani egymástól a mintasztring-et az amirecsereljuksztring-tól és a különböző kapcsokat, hanem megadhatjuk így is:
 sed -e 's,mintasztring,amirecsereljuksztring,g' munkafajl > celfajl
  sed -e 's@mintasztring@amirecsereljuksztring@g' munkafajl > celfajl
Példák
sed -e 's,<td nowrap="nowrap" width="8%">2005.július 29.</td>,,g' $file > $tmp
mv $tmp $file
Eltávolítja a mintában található sztringsort
sed -e 's,</td><td>,</td><td width="10">\&nbsp;</td><td>,g' $file > $tmp
mv $tmp $file
a </td><td> sztringet cseréli ki Persze a kész szkript sem egy programozási csúcskód, - még fejlesztem tovább, mert egy-két kényelmi szolgáltatással kiegészítem - de legalább megmutatja, hogy konzolban is mennyi mindent meg lehet oldani, ráadásul gyorsan. Mellékesként megjegyzem, hogy nem szoktam bash szkripteket írni és nem vagyok programozó. 3 napig kísérletezgettem doksikat olvastam és kérdeztem meg másokat, akiknek nagyobb tapasztalata volt a bash terén. Ezúton is szeretném megköszönni önzetlen segítségét külön is gif-nek a #beos.hu IRC csatiról, valamint locsemege, NevemTeve, ex_lx és Kyjan nicknevű szaktársaknak, akik ötleteikkel, tanácsaikkal segítettek. A teljes szkript
Témakörök: 

Belépés

Friss hozzászólások