Note, that this recipe is not updated long time and could be outdated!
Got it.

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
  2. ievieto tajā sekojošu saturu:

    #!/bin/bash
    list=`cat /home/bin/tenders.list` # Apmeklējamo lapu saraksts
    cd /home/www/misc/ # Failu mape
    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>)))</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

  3. Pievieno skriptam izpildes tiesības:

    chmod +x tenders.sh
  4. Izveido tīmekļa lapu sarakstu:

    gedit tenders.list

    failā ievieto, piemēram, sekojošu saturu un to saglabā:

    http://izm.izm.gov.lv/aktualitates/iepirkumi/B-dala.html
  5. Izpilda skriptu tenders.sh un pārliecinās, ka ir izveidoti faili Tenders....html.
  6. 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];-))

  
Tags Tīmeklis Rīki
Created by Valdis Vītoliņš on 2009-09-10 08:42
Last modified by Valdis Vītoliņš on 2021-04-13 14:30
 
Xwiki Powered
Creative Commons Attribution 3.0 Unported License