• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
weil das mit AppleScript nicht geht, oder....? o_O
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.
 

space

Neuer Berner Rosenapfel
Registriert
02.12.05
Beiträge
1.949
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
 
  • Like
Reaktionen: quarx

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
OK,

wie ist den der PERL Befehl, der den Seitenquelltext einliest?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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!
 

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
yo, hat geklappt...
jetzt such ich mir nur noch ordentliche Filterfunktionen.. ;)
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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;
 

messia04

Prinzenapfel
Registriert
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?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
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...
 

messia04

Prinzenapfel
Registriert
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...
 

messia04

Prinzenapfel
Registriert
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...
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
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.