Development

Automatische Erstellung einer Sitemap für Google in xtc-modified ohne Cronjob

Veröffentlicht von Ben (Ben) am Dec 16 2010
Development >>

Die Erstellung der Sitemap für Google in einem xtc-modified Shop automatisch anstoßen ohne Cronjob.

Wenn man auf dem Webserver auf dem der Onlineshop läuft keine Cronjobs erstellen kann, muss man verschiedene wiederkehrende Aktionen und Abläufe entweder von Hand anstoßen (und möglichst nicht vergessen) oder man beschäftigt sich mit Script-Programmierung, die man dann z.B. von einem lokalen Rechner aus, zu bestimmten Zeiten automatisch laufen lassen kann.

Aktuell war die Situation gegeben, dass auf dem Server auf dem der Shop meiner Firma läuft, keine Cronjobs erstellt werden können.

Also was tun?

Die Lösung war nach mehreren Versuchen (u.a. mit iMacros) in Form eines PowerShell Scriptes gefunden.

Folgende Vorarbeiten sind dazu notwendig:

Im Quelltext des Shops muss der Loginbutton mit einer ID versehen werden, da das Script sonst nur schwer den Button trifft....

Im Root Verzeichnis einer xtc-modified Installation findet sich die Datei login.php

Dort muss ca. in Zeile 128 diese Zeile

$smarty->assign('BUTTON_LOGIN', xtc_image_submit('button_login.gif', IMAGE_BUTTON_LOGIN, 'name=loginbutton'));

um den Rot markierten Teil ergänzt werden.

Dann erstellt man mit Hilfe der PowerShell ISE (oder mit einem Texteditor) eine Datei mit der Endung  .ps1 die man am einfachsten in das Powershell Verzeichnis unter

C:\WINDOWS\system32\WindowsPowerShell\v1.0

speichert. Das erleichtert die spätere Ausführung.

 

Der Inhalt der Datei sieht wie folgt aus (die Kommentare erklären die einzelnen Vorgänge)
=========================================================

#IE öffnen
$ie=New-Object -comobject InternetExplorer.Application

#sichtbar
$ie.visible=$true

# zur Seite navigieren
$ie.Navigate("http://www.meinshop.de/login.php")

#warten
while($ie.busy){Start-Sleep 1}

#formular ausfüllen
$ie.Document.getElementById("email_address").value="email@shop.de"
$ie.Document.getElementById("password").value="meinpasswort"
$ie.Document.getElementById("loginbutton").click()

#warten
while($ie.busy){Start-Sleep 1}

# links ("a") durchsuchen nach logoff.php
$ie.Document.getElementsByTagName("a")|foreach{
    if($_.href -like "*/logoff.php"){
   
    #warten
    while($ie.busy){Start-Sleep 1}
       
        # links nach google sitemap durchsuchen und wenn gefunden dann klicken
        $ie.Document.getElementsByTagName("a")|foreach{
            if($_.href -like "*google_sitemap.php?auto=true&ping=true*"){
            $_.Click()
            }
            }
        }
        }

#warten
while($ie.busy){Start-Sleep 1}

#jetzt noch ausloggen
$ie.Document.getElementsByTagName("a")|foreach{
    if($_.href -like "*/logoff.php"){
    $_.Click()
    }
}       

#warten
while($ie.busy){Start-Sleep 1}

#ie beenden
$ie.quit()
=========================================================

Damit hat man schon mal den grössten Teil erledigt.

Jetzt muss man das ganze nur noch automatisch starten, dazu am sinnvollsten den Taskplaner nutzen.

Achtung: im ersten Schritt direkt die erstellte Datei  xyz.ps1 auswählen

Dadurch erhält man im TaskPlaner dann einen Eintrag, den man unter Eigenschaften des erstellten Tasks noch editieren muss.

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe xyz.ps1

Jetzt sind wir fast fertig.

Einen Stolperstein habe ich hier noch dokumentiert.

 

 


Zuletzt geändert am: Dec 16 2010 um 2:28 PM

Zurück

Kommentare

Keine gefunden

Kommentar hinzufügen