Wsw_CompareVersions

Top  Previous  Next

Sub Wsw_CompareVersions(Handle, 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

 

Handle ... Bookmark-Handle.
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(Handle, ByRef sMemWeb, ByRef sMemLocal, ByRef sStatusMessage, ByRef iStatusCode)

   

   ' Apply the defined filter definitions

   sMemWeb = Bookmark_ApplyFilter(Handle, sMemWeb)

   sMemLocal = Bookmark_ApplyFilter(Handle, 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 = StrToIntDef(sMem, -1)

   End If

End Sub

 

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

 

Sub Wsw_CompareVersions(Handle, 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 = IntToStr(nPriceNew)

   sMemLocal = IntToStr(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 " + IntToStr(nPriceNew)

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

      iStatusCode = 0

      sStatusMessage = "Price too high"

   Else

      iStatusCode = 0

      sStatusMessage = "Price unchanged"

   End If

End Sub