Odo.lv » Recipes » Tīmekļa satura lasītājs ar izmaiņu kontroli

Warning: Šis apraksts jau vairāk ka gadu nav mainīts. Iespējams, ka tas ir novecojis!

Tīmekļa satura lasītājs ar izmaiņu kontroli

Šeit ir aprakstīts, kā izveidot vienkāršu tīmekļa satura savākšanas bash skriptu Linux operētājsistēmā. Skripts savāc sarakstā norādītu tīmekļa lapu saturu, apkopo tās un nosaka izmaiņas no iepriekšējās satura savākšanas reizes.

Windows lietotāji var izmantot Cygwin.

  1. Izveido skriptu:
    gedit tenders.sh
    ievieto tajā sekojošu saturu un failu saglabā:
    #!/bin/bash
    list=`cat /home/bin/tenders.list`	# Apmeklējamo lapu saraksts
    cd /home/www/misc/			# Failu katalogs
    prevfile="Tenders_old.html"		# Vecais fails, pēc kura skatās izmaiņas
    thisfile="Tenders.html"			# Tekošais pilnais fails
    newfile="Tenders_new.html"		# Pēdējo izmaiņu fails

    # Izveido veco failu, ja tāda nav, lai ir ar ko salīdzināt if [ ! -f $prevfile ]; then if [ -f $thisfile ]; then mv $thisfile $prevfile else touch $prevfile fi touch $thisfile fi

    # Nosaka vecā faila modificēšanas laiku week=`date +'%Y%W'` filedate=`date -r $prevfile +'%F %R'` fileweek=`date -r $prevfile +'%Y%W'` let "weekdiff=$week-$fileweek"

    # Ja tekošais fails vecāks par 1 nedēļu, pārsauc to par veco failu if [ $weekdiff -gt 1 ]; then mv $thisfile $prevfile fi

    ################################# ## Izveido tekošā faila saturu ## #################################

    echo "<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/> \ <link rel='stylesheet' type='text/css' href='tenders.css' /> </head>" > $thisfile

    for i in $list; do base="
    http:\/\/`echo $i|awk -F '/' '{print $3}'`\/" # aizver tegus, ja salauzta HTMLa dēļ kāds nav aizvērts echo '</span></div></td></tr></table>' >> $thisfile echo "<h2><a class='Heading' href='$i'>$i</a></h2> <!--`date +'%F %T'` -->" >> $thisfile # echo $i wget -t1 --connect-timeout=30 $i -O Tenders.tmp >/dev/null 2>&1 charset=`grep -i windows-1257 Tenders.tmp` if [ "$charset" != "" ]; then iconv -f windows-1257 -t utf8 Tenders.tmp > Tenders.new.tmp 2>/dev/null mv Tenders.new.tmp Tenders.tmp fi

    # ---- Satura tīrīšana ---- # ideālu rezultātu ar straumētu satura apstrādi iegut nav ismējams, jo praktiski visām lapām HTMLs ir nepareizs # līdz ar to, mēģinām panākt daudzmaz baudāmu satura vienkāršošanu ar pieteikami vienkāršiem līdzekļiem

    # novāc HTML hederus sed -ie '/<head/,/<\/head>/d' Tenders.tmp sed -ie '/<HEAD/,/<\/HEAD>/d' Tenders.tmp

    # izmet skriptus sed -ie '/<script /,/<\/script>/d' Tenders.tmp sed -ie '/<SCRIPT /,/<\/SCRIPT>/d' Tenders.tmp

    # izmet komentārus, jo tie traucē pareizi izmest liekos HTML tagus sed -ie '/<!--/,/-->/d' Tenders.tmp

    # Izmaina vajadzigos HTML tagus, lai tos neietekmē globālā izmešana # 1. hipersaites sed -ie 's/<\([/]\?\(a\)[^>]*\)>/={={={\1}=}=}=/g' Tenders.tmp # 2. noslēdzošos tagus, kurus aizstās ar <br/> sed -ie 's/<\/\(tr\|th\|p\|div\|table\|span\|h1\|h2\h3\)[^>]*>/===={0}====/gI' Tenders.tmp sed -ie 's/<br\/[ ]*>/===={0}====/gI' Tenders.tmp

    # izmet visus tagus, izņemot hipersates sed -e :a -e 's/<[^>]*>//g;/</N;//ba' Tenders.tmp > Tenders1.tmp mv Tenders1.tmp Tenders.tmp

    # atjauno hipersaišu atverošās un aizverošās iekavas sed -ie 's/={={={/</g' Tenders.tmp sed -ie 's/}=}=}=/>/g' Tenders.tmp

    # izmet no hipersaitēm sesijas numurus sed -ie 's/\(\(php\|j\)ses\(s\)*\(ion\)*id\)=[A-Z0-9]*//gI' Tenders.tmp

    # aizstāj relativās saites ar absolūtajām sed -ie "s/href=\"[^http]/href=\"$base/g" Tenders.tmp sed -ie "s/href='[^http]/href=\'$base/g" Tenders.tmp

    # Aizvieto mainītos noslēdzošos tegus ar <br/>, izmet atkārtojošos sed -n '1h;1!H;${;g;s/===={[0= \t\f\v\n]*}====/<br\/>/g;p;}' Tenders.tmp > Tenders1.tmp mv Tenders1.tmp Tenders.tmp

    cat Tenders.tmp >> $thisfile done # salīdzina iepriekšējā faila versiju ar tekošo un parāda izmaiņas echo "<html><head><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/> \ <link rel='stylesheet' type='text/css' href='tenders.css' /> </head>" > $newfile echo "<h1>Pasūtījumu izmaiņas no $filedate uz " `date +'%F %R'` " </h1>" >> $newfile diff --old-line-format='' --new-line-format='%L' --unchanged-group-format='' $prevfile $thisfile >> $newfile
    nomaina /home/bin/tenders.list un cd /home/www/misc/ atbilstoši savai videi
  2. Pievieno skriptam izpildes tiesības:
    chmod +x tenders.sh
  3. Izveido tīmekļa lapu sarakstu:
    gedit tenders.list
    failā ievieto, piemēram, sekojošu saturu un to saglabā:
  4. Izpilda skriptu tenders.sh un pārliecinās, ka ir izveidoti faili Tenders....html.
  5. Ja vēlas, ievieto skripta izsaukumu datora plānotājā:
    crontab -e
    atvērtajā failā pievieno, piemēram, sekojošu rindu:
    0 8-18/2 * * 1-5 /home/bin/tenders.sh
    kas atjaunos saturu katru 2. stundu no 8:00 līdz 18:00 darba dienās.

Zināmās kļūdas un vēlamie uzlabojumi

  1. Relatīvo hipersaiti vajadzētu noteikt un aizstāt norādot, ka nesākas ar http/https
  2. Izmaiņās būtu jārāda tikai tie virsraksti (saites), kurās lapās ir kādas izmaiņas
  3. sed izteiksmēs vajadzētu iemācīties norādīt nešķirot lielos un mazos burtus elegantā veidā (ne ar [A-Za-z];-))


Saites Rezultātu var aplūkot:

Created by Valdis Vītoliņš on 2009/09/10 14:42
Last modified by Valdis Vītoliņš on 2010/07/02 19:50

Xwiki Powered
Creative Commons Attribution 3.0 Unported License