Wsw_CompareVersions

Top  Previous  Next

Sub Wsw_CompareVersions(ByRef $sMemWeb, ByRef $sMemLocal, ByRef $sStatusMessage, ByRef $iStatusCode)

 

Diese Funktion wird zum Vergleich der Web-Version einer Seite mit der lokal gespeicherten Version aufgerufen. Sie können den Seiteninhalt filtern und entscheiden, wann ein Bookmark ein Update melden soll. Zum Beispiel, wenn ein bestimmter Preis in der Web-Version kleiner als in der lokal gespeicherten Version ist.

 

Der Parameter $iStatusCode ist ein numerischer Wert und gibt an, ob die Seite geändert wurde oder ob ein Fehler aufgetreten ist.

 

Parameter

 

$sMemWeb ... String. Sourcecode der Online-Seite (Web-Version).
$sMemLocal ... String. Sourcecode der lokalen Seite (lokal gespeicherte Version).
$sStatusMessage ... String. Der zugewiesene Text wird in der Status-Spalte der Bookmarkliste angezeigt. Default-Wert ist ein leerer String.
$iStatusCode ... Integer. Gibt an, ob die Seite geändert wurde oder ob ein Fehler aufgetreten ist. Default-Wert ist 0.

 

Gültige Werte von $iStatusCode:

0 ...

OK, Seite ist nicht geändert.

Default-Wert, muss nicht explizit zugewiesen werden.

1 ...

OK, Seite wurde geändert.

Das Bookmark wird als geändert markiert.

2 ...

Fehler.

Wenn 2 zurückgegeben wird, dann wird die Prüfung dieses Bookmarks mit einem Fehler abgebrochen.

 

Beispiele:

 

Einfaches Beispiel, das den gefilterten Seiteninhalt vergleicht um ein Update festzustellen.

Sub Wsw_CompareVersions(ByRef $sMemWeb, ByRef $sMemLocal, ByRef $sStatusMessage, ByRef $iStatusCode)

   

   ' Apply the defined filter definitions

   $sMemWeb = Bookmark_ApplyFilter($sMemWeb)

   $sMemLocal = Bookmark_ApplyFilter($sMemLocal)

   

   ' Check if the page has been changed by comparing the filtered content

   If $sMemWeb <> $sMemLocal Then

      $iStatusCode = 1 ' updates detected

   Else

      $iStatusCode = 0 ' no updates available

   End If

   

End Sub

 

Nachfolgendes Beispiel extrahiert einen bestimmten Preis von der Seite und meldet nur dann ein Update, falls der Preis kleiner einem vorgegebenen Preis ist. Das Auslesen eines Preises ist von der jeweiligen Seite abhängig und muss individuell angepasst werden, der folgende Beispielcode kann dabei als Starthilfe dienen.

Sub ExtractPrice($sMem, ByRef $nPrice)

   

   Dim $p, $nLen

   

   $nPrice = -1

   $sMem = DeleteHtmlTags($sMem)

   ' Extract price without decimal places

   If FindRegex($sMem, "Price:\s*EUR\s*\d+,", $p, $nLen) Then

      $sMem = ExtractDigits(Copy($sMem, $p, $nLen))

      $nPrice = CInt($sMem)

   End If

End Sub

 

'*******************************************************************************

 

Sub Wsw_CompareVersions(ByRef $sMemWeb, ByRef $sMemLocal, ByRef $sStatusMessage, ByRef $iStatusCode)

   

   Dim $nPriceNew, $nPriceOld, $nPriceRef

   

   ' Define reference price (100 EUR)

   $nPriceRef = 100

   

   ' Extract price from new/local version

   ExtractPrice($sMemWeb, $nPriceNew)

   ExtractPrice($sMemLocal, $nPriceOld) ' only needed to speed up several WSW routines

   

   ' Return only price - speed up several WSW routines, eg. "Test filter" dialog or "Analyze" functionality

   $sMemWeb = CStr($nPriceNew)

   $sMemLocal = CStr($nPriceOld)

   

   If $nPriceNew = -Then

      $iStatusCode = 2

      $sStatusMessage = "Error extracting price"

   ElseIf ($nPriceNew <> $nPriceOld) And ($nPriceNew <= $nPriceRef) Then

      $iStatusCode = 1

      $sStatusMessage = "Price changed and lower than EUR " + CStr($nPriceNew)

   ElseIf ($nPriceNew <> $nPriceOld) And ($nPriceNew > $nPriceRef) Then

      $iStatusCode = 0

      $sStatusMessage = "Price too high"

   Else

      $iStatusCode = 0

      $sStatusMessage = "Price unchanged"

   End If

End Sub