Vorlage Diskussion:Wechselkursdaten

Letzter Kommentar: vor 15 Jahren von Gorgo

Ich hab mal zwei perl-scripts geschrieben um die Wechselkursdaten automatisch zu erzeugen. Die Daten am besten in eine Datei ausgeben und dann in das Template kopieren. Bitte _unbedingt_ vorher mit "Änderungen zeigen" überprüfen ob ihr wirklich nur das ändert was ihr wollt und nix kaputt macht. Ich würde auch nicht empfehlen das Template täglich zu aktualisieren, Änderungen an solchen verschachtelten Templates wie dieses belasten die Server ziemlich und es braucht einige Zeit bis die Servercaches aktualisiert wurden (kann durchaus 1-2 Tage dauern).

Das erste Script liest die Daten der ecb, sollte so funktionieren wie es da ist.

Das zweite Script ist für die restlichen Währungen gedacht. Es funktioniert so wie es da steht nicht. Wenn ihr es bei xe einsetzt, muss die Url noch konfiguriert werden. Allerdings möchte ich darauf hinweisen, dass ihr in dem Fall gegen die Nutzungsrichtlinien von xe verstoßt.

Falls was nicht richtig funktioniert einfach hier ändern. -- Gorgo 22:31, 25. Jan. 2009 (CET)Beantworten

#! /usr/bin/perl
use LWP::Simple;

#use german for months
use POSIX;
setlocale( &POSIX::LC_ALL, "German" );
$date = "undefined";

#read data, xml-reader would be better, but let's keep it simple
$content = get("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
die "Couldn't read input data.\n" unless defined $content;

#read lines
foreach (split(/\n/, $content)) {
	#date should be above all currency-rates
	if(/time='([0-9]{4})-([0-9]{2})-([0-9]{2})'/) {
		$date = strftime( "%#d. %B %Y", 0, 0, 0, $3, $2 - 1, $1 - 1900 );
	}
	#read currency code and rate and print it
	if(/currency='([A-Z]{3})'.*rate='([0-9\.]+)'/) {
		print "|$1 = {{#if:{{{Datum|}}}| $date | $2 }}\n";
	}
}


#! /usr/bin/perl
#use german for months
use POSIX;
setlocale( &POSIX::LC_ALL, "German" );
$date = "undefined";

use LWP::UserAgent;
$ua = LWP::UserAgent->new;
#browser identifier we're going to use 
$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)");

#array with currency codes
@currencies = qw(ALL ISK MKD MDL PRB RSD UAH MNT TWD KPW BDT PKR LKR KHR LAK MMK VND AMD AZN GEL IQD IRR ILS YER KWD SYP AFN KZT KGS TJS TMT UZS EGP DZD AOA ETB BWP BIF GMD GHS GNF KES CDF LRD LYD MGA MWK MAD MRO MUR MZN NGN RWF ZMK STD SCR SLL ZWD SOS SDG TZS TND UGX SQS CRC GTQ HNL NIO DOP HTG JMD TTD ARS BOB CLP CLF GYD COP PYG PEN SRD UYU FJD PGK SBD WST TOP VUV);

foreach my $currency (@currencies) {
	#read page with currency-rate
	$response = $ua->get("http://");
	if($response->is_success) {
		#read date
		if($response->content =~ m/Live rates at ([0-9]{4})\.([0-9]{2})\.([0-9]{2}) [0-9\:]{8} UTC/) {
			$date = strftime( "%#d. %B %Y", 0, 0, 0, $3, $2 - 1, $1 - 1900 );
		}
		#read rate
		if($response->content =~ m/1 EUR = ([0-9\.,]+) [A-Z]{3}/) {
			$rate = $1;
			$rate =~ s/,//g; #remove thousands separators
			print "|$currency = {{#if:{{{Datum|}}}| $date | $rate }}\n";
		}
		else {
			print "$currency FAILED - not found\n";
		}
	}
	else {
		print "$currency FAILED - 404\n";
	}
}