Variablen aus HTTP extrahieren (AppleScript, Shell)

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?
 
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:
Hallo,

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

Viele Grüße
 
Zurück
Oben Unten