• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Seitenquelltext einlesen filtern, in pdf drucken

messia04

Prinzenapfel
Registriert
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
 
weil das mit AppleScript nicht geht, oder....? :-/
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.
 
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 :angry: (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
 
  • Like
Reaktionen: quarx
OK,

wie ist den der PERL Befehl, der den Seitenquelltext einliest?
 
wie ist den der PERL Befehl, der den Seitenquelltext einliest?
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!
 
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!
Danke, werde ich mal später ausprobieren
 
Wie teste ich das eigentlich?
Terminal?
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.
 
yo, hat geklappt...
jetzt such ich mir nur noch ordentliche Filterfunktionen.. ;)
 
yo, hat geklappt...
jetzt such ich mir nur noch ordentliche Filterfunktionen.. ;)
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;
 
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?
 
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.
 
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.
Und ich dachte das komplizierteste wäre die URL rauszufiltern...
 
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...
 
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...
 
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.
 
  • Like
Reaktionen: messia04
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.
Ja, danke.
Habe es geändert und schon getestet. Es läuft ohne Probleme.