Ansage des Guthabens bei Sipgate

So sieht meine Lösung nun aus (besteht aus 2 scripten):

Das ist die ausführbare Datei "/usr/sbin/scripts/justvoip":
Code:
#! /usr/bin/perl -w

use WWW::Curl::Easy;

sub writeBMCallback {
        my ($data, $pointer) = @_;
        ${$pointer}=${$pointer}.$data;
        return length($data);
}

sub headerBMCallback {
  my($data, $pointer) = @_;

  return length($data);
}

sub betamax_curl () {
        my $body='';
        my $curl = new WWW::Curl::Easy;
        $curl->setopt(CURLOPT_HEADER, 1);
        $curl->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        $curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
        $curl->setopt(CURLOPT_FAILONERROR, 1);
        $curl->setopt(CURLOPT_COOKIEJAR, $sCookie_File);
        $curl->setopt(CURLOPT_COOKIEFILE, $sCookie_File);
        $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
        $curl->setopt(CURLOPT_WRITEFUNCTION, \&writeBMCallback );
        $curl->setopt(CURLOPT_HEADERFUNCTION, \&headerBMCallback );
        $curl->setopt(CURLOPT_FILE, \$body);
        if ($_[1] =~ 'POST') {
                $curl->setopt(CURLOPT_POST, 1);
                $curl->setopt(CURLOPT_POSTFIELDS,"username=$_[2]&password=$_[3]");
        }
        $curl->setopt(CURLOPT_URL,$_[0]);
        $curl->perform();
        my $err = $curl->errbuf;
        return $body;
}

$MYUSER="PsychoMantis";
$MYPASS="meinpwd";

$sCookie_File = "/tmp/bm.cookie";
$url='https://myaccount.justvoip.com/clx';
$url1='/index.php?part=menu&justloggedin=true';

&betamax_curl($url.'/','POST',$MYUSER,$MYPASS);
&betamax_curl($url.$url1,'GET');
my $content=&betamax_curl($url.$url1,'GET');
my $sHTML_File="/tmp/bm.html";
open(HTML, '>'.$sHTML_File);
print HTML $content;
close(HTML);
Und das ist der Script der immer aufgerufen werden kann, damit das aktuelle Guthaben abgefragt werden kann:
Code:
/usr/sbin/scripts/justvoip
guthaben=$(cat /tmp/bm.html | grep -i euro | egrep -o '[0-9]{1,3}\.[0-9]{1,2}')
rm /tmp/bm.html
rm /tmp/bm.cookie
asterisk -rx "database put justvoip guthaben $guthaben"
echo $guthaben

Für jeden Betamax-Ableger habe ich zwei solche Dateien und schon passt alles und ich bin glücklich :)

Jetzt brauche ich nur noch ein paar deutsche Prompts mit der Ansage "Ihr Guthaben beträgt", "Euro", "und", "Cent".
 
So gehts natürlich auch.
Das Problem bei lynx ist, dass die diversen Distris in ihren Paketen leider hoffnungslos veraltete Versionen drinhaben, die diverse Parameter noch nicht kennen, weshalb dann u.a. --nomargins nicht funktioniert, was zur Folge hat, dass links Leerzeichen verbleiben, das stört aber hier noch nicht mal (Option raus und es geht).

Der bei Dir aufgetretene Fehler geht darauf zurück, dass bei der Variable $BFILE

Code:
my $BFILE = '/var/lib/asterisk/data/betamax';

ein Pfad angegeben ist (/var/lib/asterisk/data), der zum Ausführungszeitpunkt existieren muss und in dem das Skript Schreibrechte hat. Wie gesagt, quick & dirty, ich fange einen fehlenden Pfad nicht ab, daher das

closed filehandle BF at ./test line 89, <TXT> line 18

BTW: Wenn Du das ganze mit Parametern machst, hats den Vorteil, dass Du - unabhängig vom BETAMAX-Ableger nur ein (oder bei Deiner Lösung zwei) Skripte brauchst, siehe meinen ursprünglichen Vorschlag.
 
Ja, mir ist bewusst, dass es auch mit einem einzigen Script geht, aber ich bin noch ein Linux-noob und weiß nicht mal wie man Parameter übergibt *schäm*

Nachtrag: Ja, stimmt, ich habe jetzt auch den Pfad für $BFILE angepasst und so funktioniert das.

So sind wir auf dem Weg zu einem script. Jetzt müsste man nur noch den Script dazu bringen, dass der das Ergebnis nicht ins $BFILE schreibt, sondern direkt in die Asteriskdatenbank.
Und wenn ich dann noch den Script mit Parametern starten könnte, wäre es perfekt.
In etwa so: ./test username pwd nonoh.net
 
Zuletzt bearbeitet:
ganz einfach:

/usr/bin/bmguthaben

Code:
#$1 = Service
#$2 = User
#$3 = Passwort
/usr/sbin/scripts/betamax $1 $2 $3
guthaben=$(cat /tmp/bm.html | grep -i euro | egrep -o '[0-9]{1,3}\.[0-9]{1,2}')
rm /tmp/bm.html
rm /tmp/bm.cookie
astvariable=`echo $1 | cut -d '.' -f 1`
asterisk -rx "database put $astvariable guthaben $guthaben"
echo $guthaben

und als /usr/sbin/scripts/betamax


Code:
#! /usr/bin/perl -w

use WWW::Curl::Easy;

sub writeBMCallback {
        my ($data, $pointer) = @_;
        ${$pointer}=${$pointer}.$data;
        return length($data);
}

sub headerBMCallback {
  my($data, $pointer) = @_;

  return length($data);
}

sub betamax_curl () {
        my $body='';
        my $curl = new WWW::Curl::Easy;
        $curl->setopt(CURLOPT_HEADER, 1);
        $curl->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        $curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
        $curl->setopt(CURLOPT_FAILONERROR, 1);
        $curl->setopt(CURLOPT_COOKIEJAR, $sCookie_File);
        $curl->setopt(CURLOPT_COOKIEFILE, $sCookie_File);
        $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
        $curl->setopt(CURLOPT_WRITEFUNCTION, \&writeBMCallback );
        $curl->setopt(CURLOPT_HEADERFUNCTION, \&headerBMCallback );
        $curl->setopt(CURLOPT_FILE, \$body);
        if ($_[1] =~ 'POST') {
                $curl->setopt(CURLOPT_POST, 1);
                $curl->setopt(CURLOPT_POSTFIELDS,"username=$_[2]&password=$_[3]");
        }
        $curl->setopt(CURLOPT_URL,$_[0]);
        $curl->perform();
        my $err = $curl->errbuf;
        return $body;
}

$MYSITE=$ARGV[0];
$MYUSER=$ARGV[1];
$MYPASS=$ARGV[2];

$sCookie_File = "/tmp/bm.cookie";
$url='https://myaccount.'.$MYSITE.'/clx';
$url1='/index.php?part=menu&justloggedin=true';

&betamax_curl($url.'/','POST',$MYUSER,$MYPASS);
&betamax_curl($url.$url1,'GET');
my $content=&betamax_curl($url.$url1,'GET');
my $sHTML_File="/tmp/bm.html";
open(HTML, '>'.$sHTML_File);
print HTML $content;
close(HTML);

Dein eigentliches Skript rufst Du dann auf (für Deine vorherigen Daten) mit

/usr/bin/bmguthaben justvoip.com PsychoMantis meinpw

Dann hat man den Vorteil, dass bei einer etwaigen Änderung der Logik nur einmal anzupassen ist ;)

Hinweis: Beachte bitte, dass NONOH.NET sich anders verhält (siehe unser anderes Thema). In meinem ersten Skript-Post hier findest Du die entsprechende Lösung für die anderen Webseiten bzw. die andere Darstellung des Guthabens.

edit:
Sorry, Du warst zu schnell für mich. Anbei die Einskriptlösung für BETAMAX mit Übertragung aan ast-db und Berücksichtigung von NONOH.NET:

/usr/bin/bmguthaben

Code:
#! /usr/bin/perl -w

use WWW::Curl::Easy;

sub writeBMCallback {
        my ($data, $pointer) = @_;
        ${$pointer}=${$pointer}.$data;
        return length($data);
}

sub headerBMCallback {
  my($data, $pointer) = @_;

  return length($data);
}

sub betamax_curl () {
        my $body='';
        my $curl = new WWW::Curl::Easy;
        $curl->setopt(CURLOPT_HEADER, 1);
        $curl->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        $curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
        $curl->setopt(CURLOPT_FAILONERROR, 1);
        $curl->setopt(CURLOPT_COOKIEJAR, $sCookie_File);
        $curl->setopt(CURLOPT_COOKIEFILE, $sCookie_File);
        $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
        $curl->setopt(CURLOPT_WRITEFUNCTION, \&writeBMCallback );
        $curl->setopt(CURLOPT_HEADERFUNCTION, \&headerBMCallback );
        $curl->setopt(CURLOPT_FILE, \$body);
        if ($_[1] =~ 'POST') {
                $curl->setopt(CURLOPT_POST, 1);
                $curl->setopt(CURLOPT_POSTFIELDS,"username=$_[2]&password=$_[3]");
        }
        $curl->setopt(CURLOPT_URL,$_[0]);
        $curl->perform();
        my $err = $curl->errbuf;
        return $body;
}



$MYSITE=$ARGV[0];   #Seite, z.B. voipcheap.com, nonoh.net etc.
$MYUSER=$ARGV[1];   #Username
$MYPASS=$ARGV[2];   #Passwort
@svars=split(/\./,$MYSITE);

# Check user data at Provider
$sCookie_File = "/tmp/bm.cookie";
$url='https://myaccount.'.$MYSITE.'/clx';
if ( $MYSITE eq 'nonoh.net' ) {
        $url1='/contacts.php';
} else {
        $url1='/index.php?part=menu&justloggedin=true';
}

&betamax_curl($url.'/','POST',$MYUSER,$MYPASS);
&betamax_curl($url.$url1,'GET');
my $content=&betamax_curl($url.$url1,'GET');
my $sHTML_File="/tmp/bm.html";
open(HTML, '>'.$sHTML_File);
print HTML $content;
close(HTML);

system("lynx /tmp/bm.html --dump --nolist > /tmp/bm.txt") == 0 or die "Keine Verarbeitung moeglich";
unlink($sHTML_File);
my $sTXT_File="/tmp/bm.txt";
open(TXT, '<'.$sTXT_File);
my $afree=0;
my $acredit=0;
while (<TXT>) {
        if (( $MYSITE ne 'nonoh.net' ) && ( $_ =~  m/Remaining credit/ )) {
                $acredit=1;
        } elsif (( $MYSITE eq 'nonoh.net' ) && ( $_ =~  m/You have/ ) && ( $_ =~  m/credit/ )) {
                $mymoney=$_;
                $mymoney=~ s/[^0-9\.]//g;
                $mymoney=~ s/\./\,/;
                $acredit=0;
                last;
        } elsif ($acredit eq 1) {
                $mymoney=$_;
                $mymoney=~ s/[^0-9\.]//g;
                $mymoney=~ s/\./\,/;
                $acredit=0;
                last;
        }
}
close(TXT);
unlink($sTXT_File);
system("asterisk -rx 'database put $svars[0] guthaben $mymoney'") == 0 or die "Kein Eintrag in Asterisk-DB moeglich";
&betamax_curl($url.'/index.php?part=logoff','GET');
unlink($sCookie_File);
exit 0;

Aufruf dann zum Beispiel mit

usr/bin/bmguthaben justvoip.com PsychoMantis meinpw

und zum Ende steht es in der AST-DB.

Die zweite Datei brauchts jetzt nicht mehr, da wir ja stattdessen direkt in die AST-DB schreiben.
 
Zuletzt bearbeitet:
Danke. So funktioniert es. Kann man das auch mit einem einzigen Script lösen?
In etwa so: ./test username pwd nonoh.net


Warum ist der script von dem Beitrag über diesem eigentlich nur halb so groß wie der ursprüngliche?
 
Warum ist der script von dem Beitrag über diesem eigentlich nur halb so groß

Weil die Ermittlung der Freedays fehlt und das zusätzliche Fileerzeugen.

Kann man das auch mit einem einzigen Script lösen?

Siehe Beitrag von mir, nur etwas andersrum (aber man kann ja die Parameterbedeutung im Skript gerne tauschen 0-> erster Parameter, 1-> zweiter Parameter etc)

/usr/bin/bmguthaben justvoip.com PsychoMantis meinpw

gilt natürlich allgemein als

Code:
/usr/bin/bmguthaben service user password
 
Danke für die Hilfe. Nun funktioniert das perfekt
Code:
exten => _00374.,1,Playback(nur3centprominute)
exten => _00374.,n,system(/usr/sbin/scripts/bmguthaben justvoip.com username passwd)
exten => _00374.,n,GotoIf($[${CUT(DB(justvoip/guthaben),.,1)} = 0]?:ok)
exten => _00374.,n,GotoIf($[${CUT(DB(justvoip/guthaben),.,2)} < 31]?:ok)
exten => _00374.,n,Playback(nulleuround)
exten => _00374.,n,SayNumber(${CUT(DB(justvoip/guthaben),.,2)})
exten => _00374.,n,Playback(centund)
exten => _00374.,n,Goto(call)
exten => _00374.,n(ok),Playback(aktuellesguthaben)
exten => _00374.,n,GotoIf($[${CUT(DB(justvoip/guthaben),.,1)} = 1]?ein:)
exten => _00374.,n,SayNumber(${CUT(DB(justvoip/guthaben),.,1)})
exten => _00374.,n(ein),ExecIf($[${CUT(DB(justvoip/guthaben),.,1)} = 1],Playback,ein)
exten => _00374.,n,Playback(euro)
exten => _00374.,n,Playback(and)
exten => _00374.,n,SayNumber(${CUT(DB(justvoip/guthaben),.,2)})
exten => _00374.,n,Playback(cent)
exten => _00374.,n(call),Dial,SIP/${EXTEN}@justvoip|45

Erklärung:
1. Zeile wird nur die Ansage "nur drei Cent pro Minute" abgespielt.
2. Zeile wird das aktuelle Guthaben geholt und in der Asterisk-Datenbank im Format 0.00 abgelegt.
3. und 4. Zeile prüfe ich ob das Guthaben 30 oder weniger Cent beträgt und falls ja kommt die bei Vodafone geklaute ansage "Lieber Kunde, ihr aktuelles Guthaben beträgt Null Euro und" in der Zeile danach wird gesagt wieviel Cent. Dann "Cent, damit sie weiterhin wie gewohn telefonieren können, empfehlen wir ihr konto bald wieder aufzuladen. Wir verbinden sie nun mit dem gewünschten gesprächspartner". Danach gehts zur letzten Zeile (dial).
9. Zeile - falls das Guthaben noch über 30 Cent beträgt, dann wird hierhier gesprungen und hier wird dann auch die von Vodafone geklaute Ansage abgespielt "Ihr aktuelles Guthaben beträgt"
10. Zeile - da wird geprüft, ob das Guthaben eineuronochwas ist oder nicht.
11. Zeile - sind es nicht ein Euro, wird gesagt wieviel es ist.
12. Zeile - falls es sich um einen Euro handelt, wird "ein" gesagt. Ohne der Zeilen 10-12 sagt die Tante dass das Guthaben EINS euro ... beträgt, ich will aber in dem fall "ein euro" hören.
13-16. Zeile - da wird gesagt euro und entsprechende zahl cent, bevor dann in der Zeile 17 verbunden wird.
 
Zuletzt bearbeitet:
Freut mich.

Zu Armenien: Auch da kostet der Mobilfunk deutlich mehr:

Im Prinzip ist die 9 Mobilfunk, aber Achtung: Die Region Nagorny Karabach ist eine Ausnahme!

003741 Yerevan
0037447 Nagorny Karabach
0037447885 Nagorny Karabach Mobilfunk
003749 Mobilfunk
003749[12] Mobilfunk ArmenTel
003749[34] Mobilfunk K-Telecom
0037497 Mobilfunk Nagorny Karabach


PS: Der mir als am günstigsten bekannte für 003749 ist NONOH
 
Ja, das ist zwar richtig, dass dort Mobilfunk deutlich mehr kostet, aber das berücksichtigen meine Wahlregeln nicht, weil zu Mobilfunk keiner anruft. Im Grunde genommen, ist es nur ein Haushalt, der an meinem Asterisk angeschlossen ist, der dorthin anruft. Sollte ich das mal benötigen, kann ich die Wahlregeln ja ergänzen.
Aber danke trotzdem für die Info. Wo hast du eigentlich diese ganzen Informationen her? Diese detaillierten Wahlregeln meine ich.
 
Im Grundatz hilft zum Einstieg ITU Nummernpläne

Daneben lohnt sich ein Blick auf numberingplans.com

Und für die Ex-Sowjetunion ist Yandex einfach die Anlaufstelle der Wahl (man kann da auch in englisch suchen)

Ansonsten ist hilfreich voipjet (Man ersetze 011 surch 00)

Und so findet man mit der Zeit viele viele Anlaufstellen und Vergleichsmöglichkeiten ...

Noch ein kleines Beispiel, da auch wegen der verschiedenen Zeitzonen interessant: NANP-Länder (USA+Kanada+Karibik) NANP Areacodes
 
Mir ist gerade, als ich versucht habe nach Kasachstan anzurufen, ein Problem aufgefallen. Hier ist der Auszug aus meiner extensions.conf:
Code:
exten => _0077[123].,1,GotoIf($[${CALLERID(name):0:8} = callback]?call:)
exten => _0077[123].,n,Playback(nur1centprominute)
exten => _0077[123].,n,system(/usr/sbin/scripts/bmguthaben 12voip.com 10)
exten => _0077[123].,n,GotoIf($[${CUT(DB(12voip/guthaben),.,1)} = 0]?:ok)
exten => _0077[123].,n,GotoIf($[${CUT(DB(12voip/guthaben),.,2)} < 31]?:ok)
exten => _0077[123].,n,ExecIf($[${CUT(DB(12voip/guthaben),.,2)} < 1],Playback,keinguthaben)	
exten => _0077[123].,n,GotoIf($[${CUT(DB(12voip/guthaben),.,2)} < 1]?call:)
exten => _0077[123].,n,Playback(nulleuround)
exten => _0077[123].,n,SayNumber(${CUT(DB(12voip/guthaben),.,2)})
exten => _0077[123].,n,Playback(centund)
exten => _0077[123].,n,Goto(call)
exten => _0077[123].,n(ok),Playback(aktuellesguthaben)
exten => _0077[123].,n,GotoIf($[${CUT(DB(12voip/guthaben),.,1)} = 1]?ein:)
exten => _0077[123].,n,SayNumber(${CUT(DB(12voip/guthaben),.,1)})
exten => _0077[123].,n(ein),ExecIf($[${CUT(DB(12voip/guthaben),.,1)} = 1],Playback,ein)
exten => _0077[123].,n,Playback(euro)
exten => _0077[123].,n,Playback(and)
exten => _0077[123].,n,SayNumber(${CUT(DB(12voip/guthaben),.,2)})
exten => _0077[123].,n,Playback(cent)
exten => _0077[123].,n(call),Dial,SIP/${EXTEN}@12voip|45

Das Problem ist, dass schon an der dritten Zeile (bei der Abfragen des Guthabens) abgebrochen wird. Und zwar mit der Meldung:
[Apr 17 17:09:09] WARNING[23980]: app_system.c:107 system_exec_helper: Unable to execute '/usr/sbin/scripts/bmguthaben 12voip.com 10

Also habe ich mal die Asterisk CLI verlassen und in der shell das selbe eingetippt: /usr/sbin/scripts/bmguthaben 12voip.com 10
9.05
12voip
Updated database successfully
Script funktioniert wunderbar, es scheint jedoch so, als könnte ihn asterisk nicht ausführen. Wie löse ich das Problem?
 
Mal abgesehen davon, dass das Skript eher nicht nach sbin gehört :mad:

sagt es eigentlich schon die Fehlermeldung:
[Apr 17 17:09:09] WARNING[23980]: app_system.c:107 system_exec_helper: Unable to execute '/usr/sbin/scripts/bmguthaben 12voip.com 10

Das meint hier mit an Sicherheit grenzender Wahrscheinlichkeit: keine Execute-Rechte für den Prozess, unter dem Dein Asterisk läuft.
Falls das Skript root gehört und Du Deinen Asterisk als non-root laufen lässt, mußt du entweder ein

Code:
chmod 755 /usr/sbin/scripts/bmguthaben
machen oder alternativ ein

Code:
chown asteriskuser:asteriskgroup /usr/sbin/scripts/bmguthaben

dann kann asterisk auch ausführen.

Natürlich muss auch /usr/sbin/scripts/ für den Asterisk erreichbar sein, also müssen die Verzeichnisrechte auch auf mindestens 755 stehen (hier sollte der owner root bleiben)
 
Warum gehört das nicht nach /usr/sbin/scripts?
Bei Windows können deine exe-Dateien oder die cmd-Dateien ja auch am beliebigem Ort liegen. Wo würdest du solche Scripte hin tun bzw. wo gehören die deiner Meinung nach hin?
 
/usr/sbin ist ansich für binary executables vorgesehen, also eher nicht für shell-Skripte. Die liegen typischerweise unter /usr/bin.

Ansonsten: Wegen des Asterisk-Bezuges würde es m.E. Sinn machen, das ganze auch in Richtung /var/lib/asterisk zu legen, entweder in agi-bin (da Du es ja quasi als agi nutzt) oder aber in ein eigeenes Verzeichnis.

Ansonsten hast Du natürlich grundsätzlich Recht, dass dem einzelnen File sein Ablageort erst mal egal sein kann :D

BTW: Hab' ich Dir bei Deinem eigentlichen Problem helfen können?
 
Ich weiß nicht. Jedenfalls ist das Problem gelöst. Ich habe einfach die Befehle ausgeführt:
Code:
cd /
chmod 755 usr
cd usr
chmod 755 sbin
cd sbin
chmod 755 scripts
cd scripts
chmod 755 bmguthaben
reboot -f

Seit dem gehts.


Habe hier ein anderes Problem. Der script
Code:
/usr/sbin/scripts/betamax nonoh.net Username pwd
guthaben=`cat /tmp/bm.html | grep -i euro | egrep -o '[0-9]{1,3}\.[0-9]{1,2}'`
freedays=`cat /tmp/bm.html | grep -i freedays | egrep -o '[0-9]{1,3}'`
astvariable=`echo $1 | cut -d '.' -f 1`
rm /tmp/bm.html
rm /tmp/bm.cookie
asterisk -rx "database put $astvariable guthaben $guthaben"
asterisk -rx "database put $astvariable freedays $freedays"
echo $guthaben
echo $astvariable
echo $freedays
funktionert ganz gut. Aber wenn ich das bei 12voip mache, dann gibt der mir als Freedays "xx 12" raus (wobei das xx wirklich die freedays sind). Wie kann ich das lösen?
 
Leider sind die BM-Seiten immer ein wenig verschieden :mad:. Demnach ist das mit dem grep auch so eine Sache. Wenn aber

freedays=`cat /tmp/bm.html | grep -i freedays | egrep -o '[0-9]{1,3}'`

ein Ergebnis liefert in der Form X[XX] 12 mit X[XX] gleich Anzahl Freedays, dann könntest Du für o.a. Command

Code:
freedays=`cat /tmp/bm.html | grep -i freedays | egrep -o '[0-9]{1,3}' | cut -d " " -f 1`

schreiben. Theoretisch sollte der cut auch bei einem egrep-Result von X[XX], also etwa bei nonoh, nichts kaputt machen, falls doch, musst du halt sowas machen:

Code:
freedays=`cat /tmp/bm.html | grep -i freedays | egrep -o '[0-9]{1,3}' | sed -e s/[\s\t].*//`

Das räumt alles hinter dem Leerzeichen/Tabulator weg. (Falls keins da ist, tut sed hier schlicht nichts)
 
Irgendwie scheint betamax da etwas geändert zu haben. Jedenfalls geht der Script so wie vor drei Jahren nicht mehr.
 
wenn ich mir das Guthaben bei sipgate ansagen lassen will (siehe Threadtitel) , waehle ich einfach:

20000 - Guthabenabfrage und Aufladung

- sparkie
 
@PsychoMantis:
Probier' mal die Fassung. Da gab es tatsächlich ein paar Änderungen und ich habe nur die berücksichtigt, bei denen ich selbst Accounts habe, insoweit also keine Garantie, dass es für alle Clone funktioniert:

/usr/bin/bmguthaben
Code:
#! /usr/bin/perl -w

use WWW::Curl::Easy;

sub writeBMCallback {
        my ($data, $pointer) = @_;
        ${$pointer}=${$pointer}.$data;
        return length($data);
}

sub headerBMCallback {
  my($data, $pointer) = @_;

  return length($data);
}

sub betamax_curl () {
        my $body='';
        my $curl = new WWW::Curl::Easy;
        $curl->setopt(CURLOPT_HEADER, 1);
        $curl->setopt(CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
        $curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
        $curl->setopt(CURLOPT_FAILONERROR, 1);
        $curl->setopt(CURLOPT_COOKIEJAR, $sCookie_File);
        $curl->setopt(CURLOPT_COOKIEFILE, $sCookie_File);
        $curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
        $curl->setopt(CURLOPT_WRITEFUNCTION, \&writeBMCallback );
        $curl->setopt(CURLOPT_HEADERFUNCTION, \&headerBMCallback );
        $curl->setopt(CURLOPT_FILE, \$body);
        if ($_[1] =~ 'POST') {
                $curl->setopt(CURLOPT_POST, 1);
                $curl->setopt(CURLOPT_POSTFIELDS,"username=$_[2]&password=$_[3]");
        }
        $curl->setopt(CURLOPT_URL,$_[0]);
		$curl->setopt(CURLOPT_TIMEOUT, 5);
        $curl->perform();
        my $err = $curl->errbuf;
        return $body;
}



$MYSITE=$ARGV[0];   #Seite, z.B. voipcheap.com, nonoh.net etc.
$MYUSER=$ARGV[1];   #Username
$MYPASS=$ARGV[2];   #Passwort
@svars=split(/\./,$MYSITE);

# Check user data at Provider
$sCookie_File = "/tmp/bm.cookie";
$url='https://www.'.$MYSITE.'/myaccount';
if ( $MYSITE eq 'nonoh.net' ) {
	$url1='/contacts.php';
} elsif ( $MYRNAME eq 'jumblo.com' ) {
	$url1='/notifications.php?fromlogin=true';
} elsif ( $MYRNAME eq 'rynga.com' ) {
	$url1='/notifications.php?fromlogin=true';
} elsif ( $MYRNAME eq 'dialnow.com' ) {
	$url1='/startusing_info.php';
} else {
	$url1='/index.php?part=menu&justloggedin=true';
}
$content=&betamax_curl($url."/",'POST',$MYUSER,$MYPASS);
if (( $MYRNAME eq 'nonoh.net' ) || ( $MYRNAME eq 'jumblo.com' ) || ( $MYRNAME eq 'rynga.com' )) {
	$content=&betamax_curl($url.$url1,'GET');
}
if ( $content =~ /meta http-equiv=\"Refresh\"/) {
	$content=&betamax_curl($url.$url1,'GET');
}

my $sHTML_File="/tmp/bm.html";
open(HTML, '>'.$sHTML_File);
print HTML $content;
close(HTML);

system("lynx /tmp/bm.html --dump --nolist --nomargins > /tmp/bm.txt") == 0 or die "Keine Verarbeitung moeglich";
unlink($sHTML_File);
my $sTXT_File="/tmp/bm.txt";
open(TXT, '<'.$sTXT_File);
my $acredit=0;
my $money='';
while (<TXT>) {
	if (( $MYRNAME ne 'nonoh.net' ) && ( $MYRNAME ne 'jumblo.com' ) && ( $_ =~  m/Remaining credit/ )) {
		$acredit=1;
	} elsif (( $MYRNAME eq 'nonoh.net' ) && ( $_ =~  m/You have/ ) && ( $_ =~  m/credit/ )) {
		$money=$_;
		$money=~ s/[^0-9\.]//g;
		$acredit=0;
		last;
	} elsif (( $MYRNAME eq 'jumblo.com' ) && ( $_ =~  m/You have/ )) {
		$money=$_;
		$money=~ s/[^0-9\.]//g;
		$acredit=0;
		last;
	} elsif ($acredit eq 1) {
		$money=$_;
		$money=~ s/[^0-9\.]//g;
		$acredit=0;
		last;
	}
}
close(TXT);
unlink($sTXT_File);
$money=$money*$myUMR*1.19;
system("asterisk -rx 'database put $svars[0] guthaben $mymoney'") == 0 or die "Kein Eintrag in Asterisk-DB moeglich";
&betamax_curl($url.'/index.php?part=logoff','GET');
unlink($sCookie_File);
exit 0;
 

Neueste Beiträge

Statistik des Forums

Themen
244,872
Beiträge
2,219,916
Mitglieder
371,594
Neuestes Mitglied
AA-Idealbau
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.