Rückwärtssuche bei dasoertliche.de neues Script

..und eine neue "function USA" ... lauffährig

und für unsere amerikanischen Freunde.... die US Invers Suche .... wobei nur der erste der vorhanden Namen hergenommen wird.
da meines Erachtens die Adresse unwichtig ist bei der Inverssuche, ignoriere ich diese jedes Mal.... aber wenn einer Freude daran hat, kann er's ja publizieren ;)

Code:
function USA {
echo "Funktion USA aufgerufen" >> $LOGFILE
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}//"`
NPA=${SNUM:0:3}
SN=${SNUM:3}
SN1=${SN:0:3}
SN2=${SN:3}
wget -q --tries=3 --timeout=15 -U 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7' -O $TMPFILE "http://www.whitepages.com/phone/1-$NPA-$SN1-$SN2"
NAME=`grep given-name $TMPFILE | head -1 | sed 's/<[^>]*>//g' | sed 's/^\ *//g'`
echo "NAME: "$NAME >> $LOGFILE
DETAILS="keine Adresse"
rm $TMPFILE
}
 
function Schweiz -- up-to-date

Hallo

die Version für die Schweiz vom 18.06.2013 hat bei mir nicht mehr funktioniert.
Hier eine Version wie es bei mir wieder geht:

Code:
function SCHWEIZ {
echo "Funktion SCHWEIZ aufgerufen" >> $LOGFILE
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE http://tel.search.ch/$SNUM 
NAME=`grep 'class=\"fn\"' $TMPFILE | sed 's/<[^>]*>//g' | sed 's/^\ //'`
rm $TMPFILE       
}

Gruss Macro
 
Aktuelles Script für Oertliches und Klicktel

Code:
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
$|=1; # do not buffer output

use HTML::TreeBuilder 5 -weak; # debian sid unstable: libhtml-tree-perl
use LWP::UserAgent;
use Encode;

my $ua = LWP::UserAgent->new();
my $linkoert;
my $linkklick;
sub oert;
sub klick;

my $number = $ARGV[0];

oert($number);

if (!defined $linkoert ) {
klick($number);
}


sub oert {
    my $urloert = "http://www1.dasoertliche.de/?form_name=search_inv&ph=".$number;
    my $responseoert = $ua->get($urloert);
    $responseoert->is_success or die "\nHTTP to Oertliches failed\n", $responseoert->status_line, "\n";
    my $htmloert = HTML::TreeBuilder->new_from_content( $responseoert->content );

    if ( defined $htmloert ) {
        $linkoert = $htmloert->look_down(
        _tag => 'a',
        class => 'preview iname');

        if (defined $linkoert ) {
            #print "Das Oertliche: [", $linkoert->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
            $linkoert = $linkoert->as_trimmed_text;
            chop($linkoert);
            print "SET VARIABLE RESULTOERT \"${linkoert}\"";
        } else {
        print "\nCan not find predefined html tags, das oertliche page has changed?\n";
        }
    } else {
    print "\nTreebuilder cannot read page!\n";
    }
}

sub klick {

    my $urlklick = "http://www.klicktel.de/inverssuche/index/search?_dvform_posted=1&phoneNumber=".$number;
    my $responseklick = $ua->get($urlklick);
    $responseklick->is_success or die "\nHTTP to Klicktel failed\n", $responseklick->status_line, "\n";
    my $htmlklick = HTML::TreeBuilder->new_from_content( encode_utf8 $responseklick->content );

    if (defined $htmlklick ) {
        $linkklick = $htmlklick->look_down(
        _tag => 'div',
        class => 'results direct');

        if (defined $linkklick ) {
            #print "Klicktel: [", $linkklick->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
            print "SET VARIABLE RESULTKLICK \"" . $linkklick->as_trimmed_text . "\"";
        } else {
        print "\nCan not find predefined html tags, klicktel page has changed?\n";
        }
    } else {
    print "\nTreebuilder cannot read page!\n";
    }
}
 
Sollte es jemand hier noch möglich machen können - das ganze ist mittlerweile etwas alt (2008,2009) und ich habe es als "Komplettpaket" nirgends mehr aktuell finden können.

Also auf Deutsch: Wenn jemand so ehrgeizig ist, ich würde mich über eine komplette Kopie des ast_revers - Skriptes sehr freuen und das Ganze auch gerne mit wieder für andere bereitstellen.

Liebe Grüße,

Stefan
 
Sieht nach einem Teil des "ast_revers.agi" aus. Jedoch ohne Zwischenspeicherung etc etc etc

diff liefert einen Teil des Originalskriptes....
 
Mein Script stammt von mir.

Wenn du mehr Länder brauchst musst du eben das originale Script entsprechend updaten wo der http Teil steht. Da die Anbieter ständig ihre Seiten ändern, wird das glaube ich niemand für soviele Länder aktualisieren weil man das ständig anpassen müsste.
 
Kein Streß - wie Du oben lesen kannst habe ich hier nicht nach einem "besseren" gefragt oder Deine Lösung kritisiert.

Ich habe noch das "alte" ast_revers.agi eingebunden und es wird bei jedem eingehenden Anruf aufgerufen.
Ob es noch einen Erfolg bringt müsste ich mir im Detail ansehen - ich hatte mich nur gewundert weil die oben von Dir veröffentlichen Updates ja nur einen Teil des Ganzen abbildeten.

Ich darf aber deutlich anmerken, das Originalskript ist 5 Jahre alt und ich weiß nun wirklich nicht mehr im Detail was da warum und wieso eingepflegt war. Mein letzter Kommentar im Skript ist aus 2009, März und zeigt mir nur das ich individuelle Datenbankpfade verwendet habe.. :)

Wenn du mehr Länder brauchst

Ne. Nicht mehr Länder - aber die Datenbank-Pufferung war gut.

Daher die öffentliche Bitte ob es noch jemand mit dem "Komplettding" in funktionell gibt....

Grüsse! Stefan
 
Zuletzt bearbeitet:
Datenbank wozu?

Hier das ganze noch mal für de,at,ch
Code:
#!/usr/bin/perl
# reverse lookup for de,at,ch numbers. 
# uk and ireland currently has no free reverse lookup serivces.
# found name is stored in asterisk variable ${RESULTREV}
use warnings;
use strict;
use utf8;
$|=1; # do not buffer output

use HTML::TreeBuilder 5 -weak; # debian sid unstable: libhtml-tree-perl
use LWP::UserAgent;
use Encode;

##########################
# user defined variables #
my $countryprefix = "00";
##########################

my $ua = LWP::UserAgent->new();
my ($linkoert, $linkklick, $linktelefonabc, $linktelsearch);
my $number = $ARGV[0];
my %countrylist = ('at' => 43, 'ch' => 41, 'de' => 49);
my $countlist = keys %countrylist;
my $i = 0;

if ( grep {/^$countryprefix/} $number ) { #if call from other country

    while ( (my $key, my $value) = each %countrylist ) { #iterate through hash
	if ( grep {/^$countryprefix$countrylist{$key}/} $number ) { #grep country prefix + country code in beginning of phone number
	    print "Call from country ",$key,"\n";
	    if ($key eq "at") {
		telefonabc($number);
	    } elsif ($key eq "ch") {
		telsearch($number);
	    } elsif ($key eq "de") {
		oert($number);
	    } 
	
	} else {
		$i = $i+1;
		#print "Count $i Countries in list $countlist\n";
		if ($i == $countlist) {
		    print "Country not defined";
		}
	}
    }

} else { #if landline number 
    oert($number);
    if (!defined $linkoert ) { #do klicktel if oertliches did not find
	klick($number);
    }
}

## german numbers (de) ##

sub oert {
    my $urloert = "http://www1.dasoertliche.de/?form_name=search_inv&ph=".$number;
    my $responseoert = $ua->get($urloert);
    $responseoert->is_success or die "\nHTTP to Oertliches failed\n", $responseoert->status_line, "\n";
    my $htmloert = HTML::TreeBuilder->new_from_content( $responseoert->content );

    if ( defined $htmloert ) {
	$linkoert = $htmloert->look_down(
	_tag => 'a',
	class => 'preview iname');

	if (defined $linkoert ) {
	    #print "Das Oertliche: [", $linkoert->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
	    $linkoert = $linkoert->as_trimmed_text;
	    chop($linkoert);
	    print "SET VARIABLE RESULTREV \"${linkoert}\"";
	} else {
	    print "\nCan not find predefined html tags, das oertliche page has changed?\n";
	}
    } else {
        print "\nTreebuilder cannot read page!\n";
    }
}

sub klick {

    my $urlklick = "http://www.klicktel.de/inverssuche/index/search?_dvform_posted=1&phoneNumber=".$number;
    my $responseklick = $ua->get($urlklick);
    $responseklick->is_success or die "\nHTTP to Klicktel failed\n", $responseklick->status_line, "\n";
    my $htmlklick = HTML::TreeBuilder->new_from_content( encode_utf8 $responseklick->content );

    if (defined $htmlklick ) {
	$linkklick = $htmlklick->look_down(
	_tag => 'div',
	class => 'results direct');

	if (defined $linkklick ) {
	    #print "Klicktel: [", $linkklick->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
	    print "SET VARIABLE RESULTREV \"" . $linkklick->as_trimmed_text . "\"";
	} else {
	print "\nCan not find predefined html tags, klicktel page has changed?\n";
	}
    } else {
    print "\nTreebuilder cannot read page!\n";
    }
}

## austria numbers (at) ##

sub telefonabc {
    my $urltelefonabc = "http://www.telefonabc.at/result.aspx?what=".$number;
    my $responsetelefonabc = $ua->get($urltelefonabc);
    $responsetelefonabc->is_success or die "\nHTTP to telefonabc.at failed\n", $responsetelefonabc->status_line, "\n";
    my $htmltelefonabc = HTML::TreeBuilder->new_from_content ( $responsetelefonabc->content );
    if ( defined $htmltelefonabc ) {
	$linktelefonabc = $htmltelefonabc->look_down(
	_tag => 'span',
	class => 'given-name');
	
	if (defined $linktelefonabc ) {
	    $linktelefonabc = $linktelefonabc->as_trimmed_text;
	    chop($linktelefonabc);
	    print "SET VARIABLE RESULTREV \"${linktelefonabc}\"";
	} else {
	    print "\nCan not find predefined html tags, telelefonabc.at has changed?\n";
	}
    } else {
	print "\nTreebuilder cannot read page!\n";
    }
}

## swiss numbers (ch) ##

sub telsearch {
    my $urltelsearch = "http://tel.search.ch/?was=".$number;
    my $responsetelsearch = $ua->get($urltelsearch);
    $responsetelsearch->is_success or die "\nHTTP to tel.search.ch failed\n", $responsetelsearch->status_line, "\n";
    my $htmltelsearch = HTML::TreeBuilder->new_from_content ( $responsetelsearch->content );
    if ( defined $htmltelsearch ) {
	$linktelsearch = $htmltelsearch->look_down(
	_tag => 'h4',
	class => 'category');
	
	if (defined $linktelsearch ) {
	    $linktelsearch = $linktelsearch->as_trimmed_text;
	    chop($linktelsearch);
	    print "SET VARIABLE RESULTREV \"${linktelsearch}\"";
	} else {
	    print "\nCan not find predefined html tags, tel.search.ch has changed?\n";
	}
    } else {
	print "\nTreebuilder cannot read page!\n";
    }
}

## other countries (uk,ireland have no free reverse lookup ##
 
Datenbank-Puffer und Speichern war damals ein Teil der "Telefon-Suite" hier im Unternehmen. Es wurde jeder Anrufer idealerweise aufgelöst und es wurde in MySQL ein entsprechender Teilnehmer angelegt.
Nach dem Anruf konnte und kann man Notizen zu dem Anruf hinterlegen "nicht vergessen, der Meier war sehr aufgebracht"
Das ast_revers hat diese Infos abgerufen (wenn vorhanden) und dann wieder in das Snom Startup-XML eingespielt - so zumindest habe ich mir meine Notizen hier durchgelesen.

Es ist nicht mehr sooo wichtig das das revers Skript funktioniert, da ja die meisten Anrufer und Unternehmen sowie Zweigstekllen mittlerweile indiziert sind - Handys gingen damals anscheinend nicht und mussten manuell zugefügt werden, selbiges galt und gilt für die anonymen Anrufer.

Defacto war das Ziel :

- Anrufer kommt und man sieht :

-- Namen, Vornamen, Wahrscheinlicher Grund des Anrufes, "Routine-Anruf?", Vorbemerkungen kommen mittlerweile durch die CTI Suite

Daher Datenbank. :)
 
Ja das ist schon sehr spezieller Bedarf. Der Name vom Reverselookupscript kommend wird ja sowieso über den Dialplan am Telefon angezeigt.

Ich habe eine eigene Web GUI für CDR und Telefonbuch. In der CDR wird ebenfalls Reverselookup gemacht und ich kann mit einen Klick den Eintrag samt Name ins Telefonbuch übernehmen und falls nötig noch Adresse.

Bin grad dabei bei dem Reversescript noch Caching über die AstDB hinzuzufügen damit nicht bei jedem Anruf ein http Aufruf gemacht wird.

Edit: Anbei das Script inkl. Caching für wahlweise AstDB (nicht getestet) sowie MySQL. Bei MySQL ist eine Cachingtable und eine Tabelle fürs normale Telefonbuch vorgesehen. In der Cachingtabelle landen alle Reverse Lookups und das Telefonbuch wird nur zur Abfrage genutzt. Bei Das Örtliche wird zusätzlich Strasse,PLZ,Ort separat in SQL Felder geschrieben.
Vielleicht weiß noch jemand wie man diese Broken Pipe Fehler in Asterisk wegbekommt während das AGI läuft.

Code:
#!/usr/bin/perl
# reverse lookup for de,at,ch numbers from Asterisk dialplan. 
# found name is stored in asterisk variable ${RESULTREV}
# usage: <script> number 1 (for cached lookups, works only in asterisk)
# 	 <script> number (for normal lookups)
# caching can be also enabled via variable
use warnings;
use strict;
use utf8; #disable if page doesnt use utf8
$|=1; # do not buffer output

#use Asterisk::AGI; # needed for caching in AstDB, install as root: cpan install "Asterisk::AGI"
#my $AGI = new Asterisk::AGI;
use HTML::TreeBuilder 5 -weak; # parses the html page, debian sid unstable: libhtml-tree-perl
use LWP::UserAgent;
use Encode;
use DBI;

###########################
# user defined variables  #
my $countryprefix = "00"; #usually 00 or +     
my $cache = 1; #can be enabled permanently, but also be controlled over 2nd start parameter
my $family = "cidcache"; # AstDB family used for caching name of reverse lookups (will be disabled if mysql is used)
my $mysql = 1; #mysql will be used for caching if opion is enabled (disables astdb)
my $mysql_phonebook = 1; #use mysql phonebook for additional searching of name and address
my $mysql_db = "asteriskpb";
my $mysql_table = "phonebook";
my $mysql_tablecache = "cdrcache";
my $mysql_host = "localhost";
my $mysql_user = "asterisk";
my $mysql_pwd = "password";
#############################

my $ua = LWP::UserAgent->new();
my ($reverseresult,$reversestreet,$reverseareacode,$reversecity) = "" ; #data for actual reverse lookup
my ($cachename,$cachestreet,$cacheareacode,$cachecity) = "" ; #data for mysql caching
my ($phonename,$phonestreet,$phoneareacode,$phonecity) = "" ; #data for mysql phonebook
my $number = $ARGV[0];
my $searchnotfound = "Can not find predefined html tag or number was not found!\n";

if (! $ARGV[0]) {
print "Missing argument: number!\n";
exit;
}

if (defined $ARGV[1]) { #use as 2nd parameter if found
    $cache = $ARGV[1];
} 

my %countrylist = ('at' => 43, 'ch' => 41, 'de' => 49); #sub reverselookup has to be changed if modified
my $countlist = keys %countrylist; #this is currently only used to display error if country was not defined
my $i = 0;

if ($cache == 1) {
    
    if ($mysql == 1) { # use MySQL

	my $dbh = DBI->connect("DBI:mysql:database=$mysql_db;host=$mysql_host",$mysql_user,$mysql_pwd,
	{ RaiseError => 1}
	);
    	
    	# get data from caching table
	my $sth = $dbh->prepare("SELECT name,street,areacode,city from $mysql_tablecache WHERE number = ?");
	$sth->execute($number);
	my $result = $sth->fetchrow_hashref();
	$cachename = $result->{name};
	$cachestreet = $result->{street};
	$cacheareacode = $result->{areacode};
    	$cachecity = $result->{city};
	$sth->finish();

	if ($mysql_phonebook == 1) {
	    #get data from phonebook
	    $sth = $dbh->prepare("SELECT name,street,areacode,city from $mysql_table WHERE number = ?");
	    $sth->execute($number);
	    $result = $sth->fetchrow_hashref();
	    $phonename = $result->{name};
	    $phonestreet = $result->{street};
	    $phoneareacode = $result->{areacode};
	    $phonecity = $result->{city};
	$sth->finish();
	}
	
	if ($phonename ne "") {
	
	    print "No reverse lookup to be done because name already in phone book\n";
	    if ((length($phonestreet) > 1) || ( length($phoneareacode) > 1 ) || ( length($phonecity) > 1 )) {
		print "SET VARIABLE RESULTREV \"${phonename} ${phonestreet} ${phoneareacode} ${phonecity}\"";
	    } else {
		print "SET VARIABLE RESULTREV \"${phonename}\"";
	    }
	    
	} elsif ($cachename ne ""){
	    
	    print "No reverse lookup to be done because name already cached\n";
	    if ((length($cachestreet) > 1) || ( length($cacheareacode) > 1 ) || ( length($cachecity) > 1 )) {
		print "SET VARIABLE RESULTREV \"${cachename} ${cachestreet} ${cacheareacode} ${cachecity}\"";
	    } else {
		print "SET VARIABLE RESULTREV \"${cachename}\"";
	    }
	    
	} else {
	    
	    print "Number not found in phone book or cache, do reverse lookup\n";
	    reverselookup();
	    #store result in mysql for caching
	    if ((length($reversestreet) > 1) || ( length($reverseareacode) > 1 ) || ( length($reversecity) > 1 )) {
		## store to mysql with address
		$sth = $dbh->prepare("INSERT INTO $mysql_tablecache (number, name, street, areacode, city) VALUES ('$number', '$reverseresult', '$reversestreet', '$reverseareacode', '$reversecity') ON DUPLICATE KEY UPDATE name=VALUES(name),street=VALUES(street),areacode=VALUES(areacode),city=VALUES(city)");
	    } else {
		## store to mysql w/o address
		$sth = $dbh->prepare("INSERT INTO $mysql_tablecache (number, name) VALUES ('$number', '$reverseresult') ON DUPLICATE KEY UPDATE name=VALUES(name)");
	    }
	    $sth->execute();
	    $sth->finish();
	    
	}
    
	$dbh->disconnect();
    
    } else { # use AstDB
    
	my $astdbget = $AGI->database_get($family,$number);
	if (! $astdbget) {
	    print "Number not found in cache, do reverse lookup\n";
	    reverselookup();
	    my $astdbstore = $AGI->database_put($family,$number,$reverseresult);
	} else {
	    print "No reverse lookup to be done because name already cached\n";
	    print "SET VARIABLE RESULTREV \"${astdbget}\"";
	}    
    }
	    
	

    
} else { # no caching
    print "\nDo uncached reverse lookup, use 1 as second option if you want cached lookups\n";
    reverselookup();
}


sub reverselookup {

if ( grep {/^$countryprefix/} $number ) { #if call from other country

    while ( (my $key, my $value) = each %countrylist ) { #iterate through hash
	if ( grep {/^$countryprefix$countrylist{$key}/} $number ) { #grep country prefix + country code in beginning of phone number
	    print "Call from country ",$key,"\n";
	    if ($key eq "at") {
		telefonabc($number);
	    } elsif ($key eq "ch") {
		telsearch($number);
	    } elsif ($key eq "de") {
		oert($number);
	    } 
	
	} else {
		$i = $i+1;
		if ($i == $countlist) {
		    print "Country not defined";
		}
	}
    }

} else { #if landline number 
    oert($number);
    if (!defined $reverseresult ) { #do klicktel if oertliches did not find
	klick($number);
    }
}

}

## german numbers (de) ##

sub oert {
    my $urloert = "http://www1.dasoertliche.de/?form_name=search_inv&ph=".$number;
    my $responseoert = $ua->get($urloert);
    $responseoert->is_success or die "\nHTTP to Oertliches failed\n", $responseoert->status_line, "\n";
    my $htmloert = HTML::TreeBuilder->new_from_content( $responseoert->content );

    if ( defined $htmloert ) {
	$reverseresult = $htmloert->look_down(
	_tag => 'a',
	class => 'preview iname');
	
	my $reverselocation = $htmloert->look_down(
	class => 'strasse');

	if (defined $reverseresult ) {
	    #print "Das Oertliche: [", $reverseresult->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
	    $reverseresult = $reverseresult->as_trimmed_text;
	    chop($reverseresult);
	    $reverselocation=$reverselocation->as_trimmed_text;
	    ($reversestreet, $reverseareacode, $reversecity) = $reverselocation =~ /([^,]+\d+),.(\d+).(\S+)/; #split address into 3 variables
	    
	    if ((length($reversestreet) > 1) || ( length($reverseareacode) > 1 ) || ( length($reversecity) > 1 )) {
		print "SET VARIABLE RESULTREV \"${reverseresult} ${reversestreet} ${reverseareacode} ${reversecity}\"";
	    } else {
		print "SET VARIABLE RESULTREV \"${reverseresult}\"";
	    }
	} else {
	    print "oert: $searchnotfound";
	}
    } else {
        print "\nTreebuilder cannot read page!\n";
    }
}

sub klick {

    my $urlklick = "http://www.klicktel.de/inverssuche/index/search?_dvform_posted=1&phoneNumber=".$number;
    my $responseklick = $ua->get($urlklick);
    $responseklick->is_success or die "\nHTTP to Klicktel failed\n", $responseklick->status_line, "\n";
    my $htmlklick = HTML::TreeBuilder->new_from_content( encode_utf8 $responseklick->content );

    if (defined $htmlklick ) {
	$reverseresult = $htmlklick->look_down(
	_tag => 'div',
	class => 'results direct');

	if (defined $reverseresult ) {
	    #print "Klicktel: [", $reverseresult->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
	    print "SET VARIABLE RESULTREV \"" . $reverseresult->as_trimmed_text . "\"";
	} else {
	print "klick: $searchnotfound";
	}
    } else {
    print "\nTreebuilder cannot read page!\n";
    }
}

## austria numbers (at) ##

sub telefonabc {
    my $urltelefonabc = "http://www.telefonabc.at/result.aspx?what=".$number;
    my $responsetelefonabc = $ua->get($urltelefonabc);
    $responsetelefonabc->is_success or die "\nHTTP to telefonabc.at failed\n", $responsetelefonabc->status_line, "\n";
    my $htmltelefonabc = HTML::TreeBuilder->new_from_content ( $responsetelefonabc->content );
    if ( defined $htmltelefonabc ) {
	$reverseresult = $htmltelefonabc->look_down(
	_tag => 'span',
	class => 'given-name');
	
	if (defined $reverseresult ) {
	    $reverseresult = $reverseresult->as_trimmed_text;
	    print "SET VARIABLE RESULTREV \"${reverseresult}\"";
	} else {
	    print "telefonabc: $searchnotfound";
	}
    } else {
	print "\nTreebuilder cannot read page!\n";
    }
}

## swiss numbers (ch) ##

sub telsearch {
    my $urltelsearch = "http://tel.search.ch/?was=".$number;
    my $responsetelsearch = $ua->get($urltelsearch);
    $responsetelsearch->is_success or die "\nHTTP to tel.search.ch failed\n", $responsetelsearch->status_line, "\n";
    my $htmltelsearch = HTML::TreeBuilder->new_from_content ( $responsetelsearch->content );
    if ( defined $htmltelsearch ) {
	$reverseresult = $htmltelsearch->look_down(
	_tag => 'h4',
	class => 'category');
	
	if (defined $reverseresult ) {
	    $reverseresult = $reverseresult->as_trimmed_text;
	    print "SET VARIABLE RESULTREV \"${reverseresult}\"";
	} else {
	    print "telsearch: $searchnotfound";
	}
    } else {
	print "\nTreebuilder cannot read page!\n";
    }
}
 
Zuletzt bearbeitet:
die Version für die Schweiz vom 18.06.2013 hat bei mir nicht mehr funktioniert.
Hier eine Version wie es bei mir wieder geht:

Hallo Marco,
habe ein lookup.agi datei erstellt und folgendes eingefügt:
Code:
#!/bin/sh
#
#read agi_request
#read agi_language
#read agi_channel
#read agi_type
#read agi_uniqueid
#read agi_callerid
#read agi_dnid
#read agi_rdnis
#read agi_context
#read agi_extension
#read agi_priority
#read agi_enhanced
#read agi_accountcode
#read emptyline

#pfad zum cachefile
CACHE="/var/spool/asterisk/invsuche_cache"

#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche.html"
TMPFILE2="/tmp/tmpclir"
LOG="/var/log/asterisk/anrufliste_log"

echo "$1-$2-$3" >/tmp/reverse.tmp

if [ "$1" = " " ] || [ -z "$1" ]; then
echo "Keine Nummer"
#echo | tail -n 10 /var/log/syslog | grep "RING (" >>$TMPFILE2
#if [ "`tail -c 10 $TMPFILE2`" = "z audio) " ]; then
NAME="analoger Anrufer"
DETAILS="Keine details"
#fi
#if [ "`tail -c 10 $TMPFILE2`" = "(Speech) " ]; then
# NAME="aktiv unterdrueckt"
# DETAILS="ISDN anrufer ohne Nummer"
#fi
else
##function SCHWEIZ 
{echo "Funktion SCHWEIZ aufgerufen" >> $LOGFILE
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE http://tel.search.ch/$SNUM 
NAME=`grep 'class=\"fn\"' $TMPFILE | sed 's/<[^>]*>//g' | sed 's/^\ //'`
rm $TMPFILE       
}
fi

fi

if [ -z "$NAME" ]; then
NAME="$NUMMER"
fi
fi

###
### Here you can add "additional alert code"
###

# directly source an external scriptlet, for better separation with this publicly updated script
#. /usr/local/asterisk/reverse.agi_notifier_sh

printf "`date +%Y-%m-%d\ %H:%M` $NAME\t$NUMMER\n" >>$LOG
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0

erhalte jedoch weiterhin ein returned 0.

Code:
Executing [test@from-trunk:2] AGI("SIP/test-00000055", "tel.agi, 0041315087030") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/tel.agi
    -- <SIP/test-00000055>AGI Script tel.agi completed, returning 0
    -- Executing [test@from-trunk:3] Set("SIP/test-00000055", "CALLERID(name)=") in new stack

extension conf folgendes drin

Code:
[ext-did-0002]
include => ext-did-0002-custom
exten => test,1,Set(CHANNEL(language)=de)
exten => test,2,AGI(tel.agi, ${CALLERID(num)})
exten => test,3,Set(CALLERID(name)=${LONGNAME})

was mache ich falsch, das ich den wert resp. den name nicht erhalte.
 
Zuletzt bearbeitet von einem Moderator:
dasoertliche.de hat seine Seite geändert und versucht wohl, das Fremdabfragen der Nummer durch javascript-layer zu verhindern. Das Skript funktioniert daher leider im Moment nicht mehr.

Update:

dreckiger, aber funktionierender neuer code:

Code:
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www3.dastelefonbuch.de/?kw=$SNUM&s=a20000&cmd=search&ort_ok=0&sp=3&vert_ok=0&aktion=23"
NAME=`grep name0 $TMPFILE | awk -F '"' '{print $8}' | recode html..ISO-8859-15`
DETAILS=`grep '</address>' $TMPFILE | head -1 | awk -F "<|>" '{print $1$3}' | sed -e 's|[\t]||g' -e 's|  ||g'`

Ggf (je nach Einstellung) muss in der Zeile "NAME" der Zeichensatz ISO-8859-15 durch UTF-8 getauscht werden.
 
Zuletzt bearbeitet:
Hi , gibt irgendwo die create statements für die mysql tabellen ?
 
Code:
CREATE TABLE `cdrcache` (
  `number` varchar(30) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `street` varchar(40) DEFAULT NULL,
  `areacode` int(11) DEFAULT NULL,
  `city` varchar(30) DEFAULT NULL,
  UNIQUE KEY `number` (`number`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;




CREATE TABLE `phonebook` (
  `number` varchar(30) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `contact` varchar(30) DEFAULT NULL,
  `street` varchar(40) DEFAULT NULL,
  `areacode` int(11) DEFAULT NULL,
  `city` varchar(30) DEFAULT NULL,
  `mobile` varchar(30) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `fax` varchar(30) DEFAULT NULL,
  `intern` tinyint(4) DEFAULT NULL,
  `homenumber` varchar(30) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
  UNIQUE KEY `number` (`number`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
Hi ,

danke

hab irgendwie noch ein Problem , sobald ein Eintrag in der DB ist gehts nicht mehr :-(

Code:
   -- Executing [xxx@t-online_in:1] ExecIf("SIP/DTAG-IP-0000000d", "0?SET(CALLERID(name)=):AGI(reversecheck.agi,+xxxx)") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/reversecheck.agi
[May  2 18:38:55] ERROR[30321]: utils.c:1164 ast_carefulwrite: write() returned error: Broken pipe
[May  2 18:38:55] ERROR[30321]: utils.c:1164 ast_carefulwrite: write() returned error: Broken pipe
    -- <SIP/DTAG-IP-0000000d>AGI Script reversecheck.agi completed, returning 0
    -- Executing [xxx@t-online_in:2] ExecIf("SIP/DTAG-IP-0000000d", "1=SET(CALLERID(name)=Fax)") in new stack
[May  2 18:38:55] WARNING[30321]: app_exec.c:231 execif_exec: Deprecated syntax found.  Please upgrade to using ExecIf(<expr>?(null)((null)))
[May  2 18:38:55] WARNING[30321]: app_exec.c:268 execif_exec: Could not find application! ((null))
  == Spawn extension (t-online_in, xxx, 2) exited non-zero on 'SIP/DTAG-IP-0000000d'

hab es so in der extension.conf

Code:
exten => _X.,1,ExecIf($[${LEN(${DB(cidname/${CALLERID(num)})})} > 0]?SET(CALLERID(name)=${DB(cidname/${CALLERID(num)})}):AGI(reversecheck.agi,${CALLERID(num)}))
same => n,ExecIf($[${LEN(${RESULTREV})} > 0]=SET(CALLERID(name)=${RESULTREV}))
same => n,GotoIf($[${REGEX("[7-9]" ${SPAMSCORE})}]?spamtrap,${EXTEN},1)
 
Zuletzt bearbeitet von einem Moderator:
Hi ,
ne hatte ich nicht :(

war aber auch nicht das Problem.

habs jetzt so

Code:
exten => _X.,1,ExecIf($[${LEN(${DB(cidname/${CALLERID(num)})})} > 0]?SET(CALLERID(name)=${DB(cidname/${CALLERID(num)})}):AGI(reversecheck.agi,${CALLERID(num)}))
exten => _X.,2,ExecIf($[${LEN(${RESULTREV})} > 0]=SET(CALLERID(name)=${RESULTREV}))

aber das gleiche Problem sobald er was findet und mit :

Code:
exten => _X.,2,ExecIf($[${LEN(${RESULTREV})} > 0]=SET(CALLERID(name)=${RESULTREV}))

setzen will :

Code:
[May  2 20:29:02] WARNING[9632]: app_exec.c:231 execif_exec: Deprecated syntax found.  Please upgrade to using ExecIf(<expr>?(null)((null)))
[May  2 20:29:02] WARNING[9632]: app_exec.c:268 execif_exec: Could not find application! ((null))
 
Zuletzt bearbeitet von einem Moderator:

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,195
Beiträge
2,247,819
Mitglieder
373,748
Neuestes Mitglied
fanti88
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.