Jump to content

Recommended Posts

Posted

how to follow XML size change?

my example

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <Inet.au3>
#include <String.au3>
$aTime = 5
$Form1 = GUICreate("Form1", 615, 322, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 393, 225)
GUICtrlSetData(-1, FileRead(@ScriptDir & "\sitelist.txt"))
$afirstdown = GUICtrlCreateButton("First down", 128, 280, 75, 25)
$aStart = GUICtrlCreateButton("Xml Test", 216, 282, 75, 25)
GUISetState(@SW_SHOW)
FileInstall("alarm.mp3", @TempDir & "\alarm.mp3")
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $afirstdown
            _firstdownloaded()
        Case $aStart
            _xmlread()

    EndSwitch
WEnd

Func _xmlread()
    Local $sitelisturl = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF)
    While 1
        For $i = 1 To UBound($sitelisturl) - 1
            $sitenamestr = StringRegExp($sitelisturl[$i], 'https?://(?:www.)?([^.]+)', 3)
            $sitenames = $sitenamestr[0]
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitenames = ' & $sitenames & @CRLF & '>Error code: ' & @error & @CRLF)
            $firstdown = @ScriptDir & '\firstdownloaded\' & $sitenames & '.xml'
            $downloadtemp = @ScriptDir & '\sitefiles\' & $sitenames & '.xml'
            If FileExists(@ScriptDir & "\sitefiles" & $downloadtemp) Then
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
            Else
                DirCreate(@ScriptDir & "\" & "sitefiles")
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
                ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitelisturl[$i] = ' & $sitelisturl[$i] & @CRLF & '>Error code: ' & @error & @CRLF)
            EndIf
            Sleep($aTime * 1000)
            $old = FileGetSize($firstdown)
            $anew = FileGetSize($downloadtemp)
            If $anew <> $old Then
                $aUrlread = BinaryToString(InetRead($sitelisturl[$i], 0), 4)
                $aUrlextract = _StringBetween($aUrlread, '<loc>', '</loc>')
                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aUrlextract[0] = ' & $aUrlextract[0] & @CRLF & '>Error code: ' & @error & @CRLF)
                FileOpen(@ScriptDir & '\URLs.txt', 1)
                FileWrite(@ScriptDir & '\URLs.txt', $aUrlextract[0] & @CRLF)
                FileClose(@ScriptDir & '\URLs.txt')
                SoundPlay(@TempDir & "\alarm.mp3", 10)
                ClipPut($aUrlextract[0])
                TrayTip($sitenames, " An article published URL Copied " & @CRLF & $aUrlextract[0], 30, 4)
                Sleep(3000)
                If MsgBox(36, "Did you get to go to a new article? " & $sitenames, $aUrlextract[0], 10) = 6 Then ShellExecute($aUrlextract[0])
            EndIf
        Next
    WEnd
EndFunc

Func _firstdownloaded()
    Local $sitelisturl = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF)
        For $i = 1 To UBound($sitelisturl) - 1
            $sitenamestr = StringRegExp($sitelisturl[$i], 'https?://(?:www.)?([^.]+)', 3)
            $sitenames = $sitenamestr[0]
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitenames = ' & $sitenames & @CRLF & '>Error code: ' & @error & @CRLF)
            $downloadtemp = @ScriptDir & '\firstdownloaded\' & $sitenames & '.xml'
            If FileExists(@ScriptDir & "\firstdownloaded" & $downloadtemp) Then
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
            Else
                DirCreate(@ScriptDir & "\" & "firstdownloaded")
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
            EndIf

        Next
EndFunc

 

Posted

His question is how to detect changes in the XML files when the file size doesn't change.

This is not easy to solve because you want only changes detected on some URLs not the full content.

 

I would suggest to read out the text between <loc>' * '</loc>' and compare it with previous versions. I showed you how to save filesizes in an array. You can extend it by the content and compare it instead.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

1. Tidy both XML (old and new)
2. split lines to Arrays
3. check Arrays OLD<> NEW

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

@mLipok @mikell @UEZ

sometimes OK

sometimes confuses the difference

sitelist.txt

https://wmtrseo.wordpress.com/sitemap.xml
https://autoitscriptblog.wordpress.com/sitemap.xml
http://autoitscripttr.blogspot.com.tr/sitemap.xml
http://youtubertr.com/sitemap.xml
https://autoittr.wordpress.com/sitemap.xml

 

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <Inet.au3>
#include <String.au3>
$aTime = 5
$Form1 = GUICreate("Form1", 615, 322, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 393, 225)
GUICtrlSetData(-1, FileRead(@ScriptDir & "\sitelist.txt"))
$afirstdown = GUICtrlCreateButton("First down", 128, 280, 75, 25)
$aStart = GUICtrlCreateButton("Xml Test", 216, 282, 75, 25)
GUISetState(@SW_SHOW)
FileInstall("alarm.mp3", @TempDir & "\alarm.mp3")
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
         Case $afirstdown
            _firstdownloaded()
        Case $aStart
            _xmlread()
    EndSwitch
WEnd

Func _xmlread()

    Local $sitelisturl = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF)
    Local $aFileInfo[UBound($sitelisturl) + 1][2]
    While 1
        For $i = 1 To UBound($sitelisturl) - 1
            $sitenamestr = StringRegExp($sitelisturl[$i], 'https?://(?:www.)?([^.]+)', 3)
            $sitenames = $sitenamestr[0]
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitenames = ' & $sitenames & @CRLF & '>Error code: ' & @error & @CRLF)

            $downloadtemp = @ScriptDir & '\sitefiles\' & $sitenames & '.xml'
            $aFileInfo[$i][1] = StringRegExp(FileRead($downloadtemp), "\<loc\>(.+?)<\/loc\>", 3)

            If FileExists(@ScriptDir & "\sitefiles" & $downloadtemp) Then
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)

            Else
                DirCreate(@ScriptDir & "\" & "sitefiles")
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
                ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitelisturl[$i] = ' & $sitelisturl[$i] & @CRLF & '>Error code: ' & @error & @CRLF)
            EndIf

            Sleep($aTime * 1000)
            $anew = FileGetSize($downloadtemp)
            ;ConsoleWrite("Chk: " & Chk($aFileInfo[$i][1], $downloadtemp) & @CRLF)
            If $anew <> $aFileInfo[$i][0] Or Not Chk($aFileInfo[$i][1], $downloadtemp) Then
                $aFileInfo[$i][0] = $anew
                $aUrlread = BinaryToString(InetRead($sitelisturl[$i], 0), 4)
                $aUrlextract = _StringBetween($aUrlread, '<loc>','</loc>')
                ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aUrlextract[0] = ' & $aUrlextract[0] & @CRLF & '>Error code: ' & @error & @CRLF)
                FileOpen(@ScriptDir & '\URLs.txt', 1)
                FileWrite(@ScriptDir & '\URLs.txt', $aUrlextract[0] & @CRLF)
                FileClose(@ScriptDir & '\URLs.txt')
                SoundPlay(@TempDir & "\alarm.mp3", 10)
                ClipPut($aUrlextract[0])
                TrayTip($sitenames, " An article published URL Copied " & @CRLF & $aUrlextract[0], 30, 4)
                Sleep(3000)
                If MsgBox(36, "Did you get to go to a new article? " & $sitenames, $aUrlextract[0], 10) = 6 Then ShellExecute($aUrlextract[0])
            EndIf
        Next
    WEnd
EndFunc

Func Chk($array, $path)
    Local $aFile = StringRegExp(FileRead($path), "\<loc\>(.+?)<\/loc\>", 3), $i
    If UBound($array) <> UBound($aFile) Then Return 0
    For $i = 0 To UBound($array) - 1
        If $array[$i] <> $aFile[$i] Then Return 0
    Next
    Return 1
EndFunc

Func _firstdownloaded()
    Local $sitelisturl = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF)
        For $i = 1 To UBound($sitelisturl) - 1
            $sitenamestr = StringRegExp($sitelisturl[$i], 'https?://(?:www.)?([^.]+)', 3)
            $sitenames = $sitenamestr[0]
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sitenames = ' & $sitenames & @CRLF & '>Error code: ' & @error & @CRLF)
            $downloadtemp = @ScriptDir & '\sitefiles\' & $sitenames & '.xml'
            If FileExists(@ScriptDir & "\sitefiles" & $downloadtemp) Then
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
            Else
                DirCreate(@ScriptDir & "\" & "sitefiles")
                $inetgetsites = InetGet($sitelisturl[$i], $downloadtemp, 1, 1)
            EndIf

        Next
EndFunc

 

Edited by youtuber

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...