1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Seitenquelltext einlesen filtern, in pdf drucken

Dieses Thema im Forum "AppleScript" wurde erstellt von messia04, 05.11.07.

  1. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Hi,

    meine morgendliche Routine ist folgende...

    Ich gehe auf die Webseite einer türkischen Zeitung (//www.radikal.com.tr),
    rufe die aktuelle Schlagzeile und verschiedene Kolumen auf
    und drucke diese...

    Da es immer die gleiche Seite, die gleichen Kolumnen der gleichen Journalisten ist, dachte
    ich mir, dass ich das vielleicht automatiesieren kann.

    Mit Automator konnte ich es nicht einrichten...

    Geht das mit einem Script?


    mfg
    mess
     
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Ganz bestimmt. Allerdings würde ich nicht AppleScript sondern Perl (eventuell eingebettet in AppleScript) empfehlen.
     
  3. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    weil das mit AppleScript nicht geht, oder....? o_O
     
  4. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Es mag sein, daß es geht, allerdings denke ich, daß
    1. das eine Qual ist
    2. man sich dabei unter Garantie einen abbricht
    3. die Geschwindigkeit nicht berauschend sein wird
    4. ich das nur in Erwägung zöge, wen mir ganz schrecklich langweilig ist oder
    5. mir jemand eine Mörderkohle dafür zahlt
    Außerdem weiß ich, daß Perl prädestiniert ist, solche Aufgaben zu erledigen.
     
  5. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Mit Perl kann ich leider nicht dienen.
    Dabei wäre das mit Abstand die eleganteste Methode…

    Aber als Hinweis: Mit dem Automator geht das schon, mit dem neuen Automator 2.0 dank (endlich) integrierter RSS-Fähigkeit sogar noch besser :)
    Ich nutze den Automator schon länger als automatisierter "Downloadmanager" , da man mit ihm sehr gezielt Webseiten abfragen kann.

    Falls Du auf das Konvertieren in PDF bestehst (es ist ja nicht unbedingt nötig):
    NIn PDF konvertieren kann der Automator von Haus aus nicht :mad: (Wohl aber Text aus PDFs extrahieren). Ich benutze dafür Text to PDF
    Im Paketinhalt dieses Programmes findet sich auch eine Automator-Aktion…
    Falls diese nicht geladen werden kann, so ersetze sie durch
    • Finder Objekte öffnen (Mit: Text to PDF)


    Bastel doch erst mal etwas rum:
    Schau dir die URLs der gewünschten Seiten an, filter sie unter Zuhilfenahme der unveränderlichen Bereiche und extrahiere den Text in ein TextEdit Dokument
    Oder (10.5) steuere direkt die Feeds an und lasse sie dir schön formatiert als Text ausgeben…

    Wie ich sehe, gibt es auf der Seite "druckerfreundliche" Versionen der Artikel…
    Der unveränderliche Teil zu dieser Version lautet z.B. immer:
    <http://www.radikal.com.tr/yazici>

    Gruss
     
    quarx gefällt das.
  6. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    OK,

    wie ist den der PERL Befehl, der den Seitenquelltext einliest?
     
  7. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Den gibt es nicht ;) Wenn Du kein Modul verwendest, kann man das z.B. erledigen mit:
    Code:
    #!/usr/bin/perl
    # perl Vorgeplänkel
    use strict;
    use warnings;
    
    # die URL die geladen werden soll
    my $url='http://www.radikal.com.tr';
    
    # Hier landet das Ergebnis
    my $seitentext='';
    
    # Seite über curl laden
    open (my $curl, "curl -s '$url' |") or die "can't curl '$url': $!\n";
    
    # jede Zeile einlesen
    while (<$curl>) {
      # Hier könnte man schon filtern.
      # Da Du aber erstmal nur einlesen willst
      $seitentext.= $_;
      # hänge ich jede Zeile an den Seitentext an
    }
    # fertig
    close $curl;
    print $seitentext;
    
    P.S.: Ungeprüft!
     
  8. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Danke, werde ich mal später ausprobieren
     
  9. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Ein leidiges Thema. Kann man da nicht etwas in AS zusammenstricken, so wie hier? o_O
     
  10. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Wie teste ich das eigentlich?
    Terminal?
     
  11. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Du erzeugst eine Textdatei mit dem Quelltext. Speicherst die als reine Textdatei (also nicht rtf oder sowas) ab. Nehmen wir an, die Datei liegt in /Users/jesus und heißt radikarl.

    Dann gibst Du im Termnal ein:
    Code:
    cd
    chmod +x radikarl
    ./radikarl
    Das chmod wird nur einmal gebraucht, um die Datei ausführbar zu machen.
     
  12. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    yo, hat geklappt...
    jetzt such ich mir nur noch ordentliche Filterfunktionen.. ;)
     
  13. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Naja... Kommt halt darauf an, was Du machen willst. Beispiel (ohne Bezug zur Realität)

    Code:
    #!/usr/bin/perl
    # perl Vorgeplänkel
    use strict;
    use warnings;
    
    # die URL die geladen werden soll
    my $url='http://www.radikal.com.tr';
    
    # Hier landet das Ergebnis
    my $seitentext='';
    
    # Seite über curl laden
    open (my $curl, "curl -s '$url' |") or die "can't curl '$url': $!\n";
    
    # jede Zeile einlesen
    while (<$curl>) {
      if ( m#<div\b[^>]*># .. m#</div# ) {
        # alles was in <div> ... </div> steht ignorieren
        next;
      }
      $seitentext.= $_;
    }
    # fertig
    close $curl;
    print $seitentext;
     
  14. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    OK, ich habe jetzt eine Stringvariable in der der Link für die URL steht, welche ich ausdrucken will.

    Wie kann ich jetzt dem Drucker(!) sagen das er diesen String als URl für Firefox benutzen und es ausdrucken soll?
     
  15. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Hier mußt Du dann entweder über den system Befehl "osascript" aufrufen oder (das würde ich vorziehen) das Perl Kommando über do shell script aufrufen. Perl muß dann die URL ausgeben und die wird von AppleScript an Safari übergeben, was dann das Drucken aufruft.
     
  16. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Und ich dachte das komplizierteste wäre die URL rauszufiltern...
     
  17. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Ich bekomme Safari nicht dazu das aktuelle Fenster (welches jetzt genau das zeigt, was ich haben will) zu drucken...
    Der print-Befehl funktioniert irgendwie nicht...
     
  18. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Voila!

    Es ist fertig... :-D
    Danke an alle die geholfen haben...
    Insbesondere natürlich Skeeve... ;)

    Anbei meine beiden Quellcodes:

    PERL:
    Code:
    #!/usr/bin/perl
    # perl Vorgeplänkel
    use strict;
    use warnings;
    
    # die URL die geladen werden soll
    my $url='http://www.radikal.com.tr/kose_yazarlari.php';
    
    # Hier landet das Ergebnis
    my $seitentext='';
    
    # Seite über curl laden
    open (my $curl, "curl -s '$url' |") or die "can't curl '$url': $!\n";
    
    # jede Zeile einlesen
    while (<$curl>) {
     $seitentext.= $_;
    }
    close $curl;
    #aufsplitten bei Berkan
    my @berkan1= split(/Berkan/,$seitentext,2);
    #print $berkan1[1];
    my @berkanURL= split(/haberno=/,$berkan1[1],2);
    #print $berkanURL[1];
    my $berkan=substr($berkanURL[1],0,6);
    #print $berkan;
    my $haber='http://www.radikal.com.tr/yazici.php?haberno='.$berkan.'&tarih=10/11/2007&yollayan_sayfa=http%3A%2F%2Fwww.radikal.com.tr%2Fhaber.php%3Fhaberno%3D'.$berkan."\n";
    print $haber;
    
    # fertig
    #print $berkan;
    #print $seitentext;
    AppleScript:
    Code:
    property target_URL : do shell script "cd ~/Desktop; perl radikal.pl"
    open location target_URL
    PrintFireFox()
    delay 3
    property target_URL2 : do shell script "cd ~/Desktop; perl radikal2.pl"
    open location target_URL2
    PrintFireFox()
    
    on PrintFireFox()
    	tell application "System Events"
    		tell process "Firefox"
    			delay 3
    			click menu item "Drucken..." of menu "Datei" of menu bar 1
    			delay 1
    			key down return
    			delay 1
    			key up return
    		end tell
    	end tell
    	delay 1
    	quit application "Firefox"
    end PrintFireFox
    

    wahrscheinlich nicht gerade der effizienteste Weg...
    Aber es tut...
     
  19. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Ersetze "property target_URL :" durch "set target_URL to". Analog für die 2te. Wenn Du das nicht machst, wirst Du morgen wahrscheinlich dieselbe Seite erhalten, wie heute, da das Script nicht wieder aufgerufen wird. Das ist halt das Besondere an einer Proerty. Sie wird nur einmal initialisiert.
     
    messia04 gefällt das.
  20. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    Ja, danke.
    Habe es geändert und schon getestet. Es läuft ohne Probleme.
     

Diese Seite empfehlen