Variablen aus HTTP extrahieren (AppleScript, Shell)

D

dawiinci

unregistriert
Thread Starter
Dabei seit
04.03.2010
Beiträge
95
Reaktionspunkte
2
Ich möchte folgendes Resultat eines http Aufrufes mit AppleScript verarbeiten.

Code:
WertID1: 16
WertID2: 34

Dazu muss ich eine Webseite öffnen und Wert1 als Name und die "1" als Wert abspeichern. Getrennt wird immer durch ":". Die Anzahl Zeilen kann grösser sein und es sollen alle als Variablen gespeichert werden. Das Format "Wert:x" ist immer gleich.

Wie kann ich das erreichen?
 
Hallo,

AppleScript's text item delimiters

Viele Grüße
 
Code:
set someText to do shell script "curl http://adresse | textutil -stdin -stdout -format html -convert txt -encoding UTF-8"

set AppleScript's text item delimiters to {":"}
set delimitedList to every text item of someText

Danke!
So in der Richtung also. Nur wie kann ich die einzelnen Variablen setzen? Wert1 = 16
 
Zuletzt bearbeitet:
Siehe Beispiel unten…

Viele Grüße

Code:
--

set someText to "WertID1: 16
WertID2: 34"

if (length of someText < 1) then
	
	return false
	
end if

--

set allLines to paragraphs in someText

if ((count of allLines) < 1) then
	
	return false
	
end if

--

set AppleScript's text item delimiters to ": "

--

repeat with nLine in allLines
	
	--
	
	set lineComponents to every text item of nLine
	
	if ((count of lineComponents) is 2) then
		
		--
		
		set nKey to first item of lineComponents
		
		set nValue to last item of lineComponents
		
		--
		
		display alert nKey message nValue
		
		--
		
	end if
	
	--
	
end repeat

--

return true

--
 
Wenn Du 15 Minuten Perl lernen würdest, bräuchtest Du kein

AppleScript
curl
Shell

Und Du könntest Dank RegExp und allem anderen mit dem Ergebnis machen was immer Du vorhast.

Code:
#!/usr/bin/env perl

use strict;
use warnings;

use LWP;
use Data::Dumper;

sub make_http_req {
	my $url = shift;
	my $ua = LWP::UserAgent->new;
	my $res = $ua->get($url);

	return ($res->is_success(), $res->status_line(), $res->content());
}

sub parse_content {
	my $content = shift;
	my @lines = split(/\n/, $content);
	my %res;

	foreach my $line (@lines) {
		my ($key, $val) = $line =~ /\s*(.*):\s*(.*)\s*/;
		$res{$key} = $val if (defined($key) && defined($val));
	}

	return %res;
}

###

my ($ok, $status, $content) =
	make_http_req('http://meine.domain.de/test.txt');

if ($ok) {
	my %res = parse_content($content);
	print "HTTP request, keys and values:\n";
	print Dumper(\%res);
}
else {
	print "HTTP request failed\n";
	print "Status: $status\n" if (defined($status));
	print "Content:\n$content\n" if (defined($content));
}

exit(0);
 
Zuletzt bearbeitet:
Danke, das ist genau das richtige.

Ok ein kleines Problem habe ich noch. Ich habe bei einer Seite nach dem Einlesen keine neue Zeile sondern alles auf einer Zeile. Wie kann ich damit umgehen?
 
Hallo,

auch das kannst Du problemlos mit den "delimiters" lösen.
Einfach mal selbst rumspielen… ;-)

Viele Grüße
 
Zurück
Oben Unten