Rückwärtssuche bei dasoertliche.de neues Script

Die "utils.c:1126 ast_carefulwrite: write() returned error: Broken pipe" treten nicht mehr auf, wenn man VDR=0 setzt. Anscheinend empfängt der Asterisk noch den Output vom vdr-skript

Das hatte ich nicht getestet, da ich her auch keinen VDR betreibe.

Kann sich das mal jemand mit VDR anschauen - entsprechend der Vermutung von Jansen_ muss man da die Ausgabe an VDR mal anpassen, damit Asterisk nicht durcheinanderkommt.
 
Leider ist die Quelle tel.search.ch nicht immer sehr aktuell. In der Schweiz ist eigentlich tel.local.ch massgebend. Ich hatte mal für die Fritzbox einen Skript gebastelt (nicht sehr professionell und ohne Fehlererkennung). Vielleicht könnte man von da etwas in diesen Asterisk-Skript übernehmen.
Auch würde ich diesen Agi-Skript auch gerne in meine Trixbox einbauen. Wer weiss wie? Funktioniert das auch analog dieser Anleitung?
 
Kann sich das mal jemand mit VDR anschauen - entsprechend der Vermutung von Jansen_ muss man da die Ausgabe an VDR mal anpassen, damit Asterisk nicht durcheinanderkommt.

Man muss sich halt entscheiden, wo die Ausgabe vom VDR-Skript landen soll.
Ich lasse es bei mir jetzt mit in die Logdatei schreiben:
Code:
    715 ## OSD Mitteilung an den VDR per "svdrpsend.pl"
    716 ## im svdrpsend.pl script wirde "localhost" durch die VDR-IP ersetzt
    717 function osdvdr {
    718 svdrpsend.pl "mesg ANRUF: $NAME $NUM fuer $DEST" >> $LOGFILE
    719 svdrpsend.pl "mesg $DETAILS" >> $LOGFILE
    720 }
Zusätzlich habe ich noch eingefügt, dass man sieht, welcher Teilnehmer angerufen wird.

Dann gibts bei mir noch das Problem, dass die Anruf.log nicht gefunden wird.
Wenn man ein pwd an die entsprechende Zeile einfügt (~690) sieht man in der asterisk-Konsole, dass er sich im Ordner seines Quellcodes befindet :confused: und nicht im agi-bin Verzeichnis.
 
Hi ihrs,

erst mal vielen Dank für eure Arbeit! Das Skript ist wirklich erste Sahne und hat auf meinem alten Asterisk 1.4.* gute Dienste geleistet. Aktuell bin ich nun dabei, einen neuen Server mit dem aktuelleren Asterisk 1.6 aufzusetzen, stosse dabei aber auf nicht mehr so recht nachvollziehbare Probleme:

Code:
    -- Executing [0043720345830@ankommend:2] AGI("SIP/213.208.5.25-7c009960", "ast_revers.agi, Unknown") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/ast_revers.agi
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
  == ast_revers.agi, Unknown: Failed to execute '/var/lib/asterisk/agi-bin/ast_revers.agi': Permission denied
[Apr 11 18:40:07] ERROR[3233]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 18:40:07] WARNING[3233]: res_agi.c:2788 run_agi: unable to send SIGHUP to AGI process 3234: No such process
VDR ist in der Config auf 0 gesetzt, SELinux ist deaktiviert, das Betriebssystem ist Fedora 11 Beta.

Ein ls -l auf das agi-bin-Verzeichnis sieht wie folgt aus:
Code:
-rwxr-xr-x 1 root     root       1742 11. Apr 01:42 agi-test.agi
drwxrwxr-x 2 asterisk asterisk   4096 11. Apr 17:28 AL
-rwxrwxr-x 1 asterisk asterisk  31655 11. Apr 18:39 ast_revers.agi
-rwxr-xr-x 1 root     root      94842 11. Apr 01:42 eagi-sphinx-test
-rwxr-xr-x 1 root     root     157194 11. Apr 01:42 eagi-test
-rwxr-xr-x 1 root     root      14530 11. Apr 01:42 jukebox.agi
-rwxrwxr-x 1 asterisk asterisk  41961 11. Apr 17:28 mysql2pgsql.perl
drwxrwxr-x 3 asterisk asterisk   4096 11. Apr 17:28 scripts
drwxrwxr-x 3 asterisk asterisk   4096 11. Apr 17:28 search_engine
Die Zugriffsrechte an sich dürften daher ausreichen. Geringere Dateirechte brachten natürlich nichts, wenn root:root der Besitzer der Reverse-Dateien war sah es auch nicht besser aus. Die ast_reverse.conf in /etc/asterisk hat die Rechte 644, Besitzer ist wie bei allen anderen conf-Files root:root.

Der Aufruf aus der extensions.conf geschieht folgendermaßen:
Code:
exten => _0043720xxxxxx,n,AGI(ast_revers.agi, ${CALLERID(num)})
exten => _0043720xxxxxx,n,Set(CALLERID(name)=${LONGNAME})

Führe ich ast_reverse.age auf der Konsole aus, erhalte ich folgende Ausgabe:
Code:
./ast_revers.agi 00435905910
ERROR 1146 (42S02) at line 1: Table 'asteriskreverse.pbook' doesn't exist
ERROR 1146 (42S02) at line 1: Table 'asteriskreverse.pbook' doesn't exist
SET VARIABLE LONGNAME "Telekom Austria AG Hotlines von Telekom Austria AG"
Dort scheint das Script dann übrigens hängen zu bleiben, danach passiert zumindest eine halbe Minute lang nichts mehr (länger hats mich noch nicht warten gefreut...).

Was habe ich falsch gemacht und was benötigt ihr, um mir weiterhelfen zu können?
 
Hallo Vulkanus,
um das Skript auf der Konsole testen zu können musst du folgendes beachten:
Damit das jetzt auf der Kommandozeile noch funktioniert, muss man als dritten Parameter test angeben, sonst bekommt man nichts zu sehen (der Aufruf aus dem Asterisk bleibt der gleiche)
Der zweite Parameter ist das angerufene Gerät.

Kannst du nochmal die Ausgaben posten mit "agi set debug on"?
 
Danke für die schnelle Antwort! So sieht der Konsolenaufruf gleich deutlich besser aus und läuft auch komplett durch.

Ausgabe mit agi setup debug on und core set debug 1 ist:
Code:
    -- Executing [0043720xxxxxx@ankommend:1] NoOp("SIP/213.208.5.25-7c0078a0", "Externer Ruf von "Unknown" <Unknown> an 0043720xxxxxx") in new stack
    -- Executing [0043720xxxxxx@ankommend:2] AGI("SIP/213.208.5.25-7c0078a0", "ast_revers.agi, Unknown") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/ast_revers.agi
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_request: ast_revers.agi
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_channel: SIP/213.208.5.25-7c0078a0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_language: de
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_type: SIP
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_uniqueid: 1239472047.6
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_version: 1.6.0.9
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_callerid: Unknown
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_calleridname: Unknown
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_callingpres: 0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_callingani2: 0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_callington: 0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_callingtns: 0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_dnid: 0043720345830
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_rdnis: unknown
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_context: ankommend
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_extension: 0043720xxxxxx
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_priority: 2
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_enhanced: 0.0
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_accountcode: 
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_threadid: 140004441721104
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> agi_arg_1:  Unknown
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Tx >> 
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
<SIP/213.208.5.25-7c0078a0>AGI Rx << verbose "Failed to execute '/var/lib/asterisk/agi-bin/ast_revers.agi': Permission denied" 2
  == ast_revers.agi, Unknown: Failed to execute '/var/lib/asterisk/agi-bin/ast_revers.agi': Permission denied
<SIP/213.208.5.25-7c0078a0>AGI Tx >> 200 result=1
[Apr 11 19:47:27] ERROR[3894]: utils.c:1019 ast_carefulwrite: write() returned error: Broken pipe
[Apr 11 19:47:27] WARNING[3894]: res_agi.c:2788 run_agi: unable to send SIGHUP to AGI process 3895: No such process
    -- Executing [0043720xxxxxx@ankommend:3] Set("SIP/213.208.5.25-7c0078a0", "CALLERID(name)=") in new stack
 
Da bin ich nun auch überfragt. Ich weiß nicht warum der asterisk das agi-script nicht starten darf. Was du noch testen kannst:
asterisk testweise als root starten.
agi-script als asterisk user starten.
 
Änderung dasörtliche??

Hallo,
hat sich die Seite von DasÖrtliche schon wieder geändert?
Hab die Abfrage mal geändert. Bin aber nicht so fit mit dem Stream Editor, vielleicht könnte das mal einer prüfen und verbessern.
Code:
wget -q -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$NUMMER"
NAME=`grep 'onMouseOut=""  >' $TMPFILE | sed -e :a -e 's/<[^>]*>//g;/</N;//ba'`

:rolleyes:
 
Das Örtliche hat sich geändert...

Hallo,
das script liefert bei mir über das Örtliche keine ergebnisse mehr...
ich mir das TEMP file angeschaut und fest gestellt das es keine Daten mehr von der Suche enthält.....:confused:
Kenn mich leider nicht soweitaus das ich da einen lösungsansatz bei steuern könnte.:noidea:

Würde mich sehr freuen wenn jemand das Problem beheben könnte.

Mfg Nikon
 
@Nikon1982

hast Du das script mal nach meinen Angaben geändert?

damit läufts.
 
Danke für die schnelle antwort.
Ja ich habe das Script nach deinen angaben geändert nur leider ohne erfolg...

function oertliches {
wget -q -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$NUMMER"
NAME=`grep 'onMouseOut="" >' $TMPFILE | sed -e :a -e 's/<[^>]*>//g;/</N;//ba'`
DETAILS=`grep ';.*<br\/>' -m1 $TMPFILE | sed -e s/' '//g -e s/\&nbsp\;/\ /g -e s/'\n'//g -e s/'\t'//g -e s/'<br\/>'// `
if [ "$BLACKLIST" == "YES" ]; then
if [ "$AUTOBLACKLIST" != "" ]; then
BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
if [ "$BLACK" != "" ]; then
ISBLACK=Ja
fi
fi
fi
rm $TMPFILE
}


Wenn ich es auf der Konsole teste bekomme ich keinen Eintrag siehe log. Über das Örtliche....

/var/lib/asterisk/agi-bin# ./ast_revers.agi 033203581..
SET VARIABLE LONGNAME "kein Eintrag"
SET VARIABLE LONGDETAILS "Deutschland Kleinmachnow"

Wenn ich es über die webseite direkt suche bekomm ic die eingekürzte nummer angezeit. Aber nicht mehr über das Script

Hab ich beim ändern was übersehen?

Mfg Nikon
 
Tausch am besten mal die ganze Funktion aus:

Code:
function oertliches  {
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$SNUM"
NAME=`grep 'class=\"counter.*' -m1 -A1 /tmp/ast_revers.agi_html_tmp | sed -e s/^.*\"counter\"//g -e s/\<'\/'a\>.*//g -e s/^.*\>//g -e s/\<.*//`
DETAILS=`grep 'class=\"counter.*' -m1 -A5 $TMPFILE | sed '/\"counter/,+4d;s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//'`
if [ "$BLACKLIST" == "YES" ]; then
        if [ "$AUTOBLACKLIST" != "" ]; then
                BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
                if [ "$BLACK" != "" ]; then
                        ISBLACK=Ja
                fi
        fi
fi
rm $TMPFILE
}

Damit funktioniert es hier (Rufnummer und Adressdaten).
Leider werden wir den Änderungen diverser Webseitenbetreiber wohl immer hinterherrennen :mad:
 
Ich glaub ich bin langsam zu blöde dafür des geht noch immer net....

ich hab mal die ganze ast_revers.agi mit rein gestellt....

Code:
#!/bin/bash
#set -x
##################################################
# Namensänderung.
# Durch die Erweiterungen des Scriptes hab ich mich dazu entschlossen das Script in
# >> ast_revers.agi << umzubenennen.
##################################################
#
# Version: ast_revers.agi-1.0_2009.03.26
#
##################################################
# Ich bedanke mich auch bei abw1oim aus dem ip-phone-forum.de (http://www.ip-phone-forum.de)
# ohne seine Hilfe würde das Script nur bei "dasoertliche.de" suchen.
# 
# Folgende Funktionen bietet das Script
# - Internationale Suche bei:
#  * Deutschland (dasoertliche.de)
#  * Schweiz	(http://tel.search.ch)
#  * Ã?sterreich (http://www.tb-online.at)
#  * Luxemburg  (http://www.editustel.lu)
#  * USA        (http://www.anywho.com)
#  * Kanada     (http://411ca.whitepages.com bzw. http://www.411.ca)
#  * Frankreich (http://www.pagesjaunes.fr)
#  * Spanien    (http://www.infobel.com)  -> Nur Business-Einträge, Achtung: Eigentliche Routine ist php
#  * weitere in Vorbereitung
# - Lesen von Parametern
#	* aus dem Skript selbst
#	* aus MYSQL (von abw1oim implementiert)
#	* aus PGSQL-DB (Danke an DirkWolf)
# - Lesen/Speichern vom Cache in:
#	* Cache-File
#  	* SQLite 2 und SQLite 3 Datenbank 
#	* MYSQL-DB (von abw1oim implementiert)
#	* PGSQL-DB (Danke an DirkWolf)
#  	* weitere in Vorbereitung
# - OSD anzeige in:
#	* VDR mit svdrpsend.pl
#	* weiter in Vorbereitung
#
##################################################


######################################################################################################
# Defaultvariablen
######################################################################################################

# Hier bestimmt man, ob die Werte in einer SQL-, MYSQL- DB oder in einem Cache-File gespeichert werden
SPEICHERORT=CACHE

#Zweiten - manuellen CACHE benutzen (YES|NO) - Achtung: Falls YES, muss der Speicherort über CACHE2 definiert werden!
USE_CACHE2=NO

# Hier kann man definieren, woher das Skript die Daten für die Rufnummernidentifizierung/formatierung
# bezieht
PARAMS=SCRIPT

#Nutzung von Blacklisting (YES|NO)
BLACKLIST=NO

#Automatisiertes Blacklisting über Textbegriffe
AUTOBLACKLIST="Personal\|Arbeitsvermittlung\|Zeit\|Vermögens\|Wirtschafts"

#Bevorzugter Anbieter fuer Deutschland (OERTLICHE|KLICKTEL)
DE_PREFERED=KLICKTEL

#Fuer Deutschland: Kaskadierend beide Anbieter nutzen (YES|NO), für den Fall, dass der erste keinen Treffer liefert
DE_CASCADE=YES

#Hier stehen die Einstellungen für den eigenen Anschluss
OIAC="00"	# Vorwahlziffern für internationalen Anruf
ONAC="0"	# Vorwahlziffern für nationalen Anruf long Distance
OCC=49		# eigener Ländercode (49 => Deutschland)
ONDC=30		# eigene Vorwahl ohne 0 ( 30 => Berlin)


AFELD=leer
VBOX=leer

# Umlaute umsetzen ?
RESET_UML=0

#Anruf_log
ALYES=0 
LOGDB=0
ALPFAD=./AL
ALFILE=Anruf.log

#VDR-Anzeige
VDR=0                       #Anzeige VDR 0=Nicht 1=Ja

#CACHE-File Varabeln setzen
CACHE=/tmp/cache.txt
CACHE2=/tmp/cache2.txt

#LOG und TMP Files setzen
TMPFILE=/tmp/ast_revers.agi_html_tmp
LOGFILE=/tmp/ast_revers.agi_log

#User-Config
UCONFIG=/etc/asterisk/ast_revers.conf

######################################################################################################
# Interne Variablen
######################################################################################################

NUMMER=$1
DEST=$2

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/lib/asterisk/agi-bin"

# Nutzerdefinierte Einstellungen
if [ -e $UCONFIG ]; then 
	. $UCONFIG
fi


#Pfad zu den externen Such-Scripte (SE=search engine)
SE=./search_engine

#Pfad zu anderen Skripten (Jabber&Co)
SP=./scripts


ALDATE=`date +%Y.%m.%d`
ALTIME=`date +%H:%M:%S`
FELD=leer
VBOX=leer
CACHETRUE=0
DATE=`date`

CN=""
CP=""
PL=""
STATE=""
NAME=""
PRIVATE="TRUE"
NENTRY="FALSE"
FOUND="FALSE"
DETAILS=""
COUNTRY=""
CINDEX=-1

# Unterstütze Länder
LAND=("DEUTSCHLAND" "SCHWEIZ" "OESTERREICH" "LUXEMBURG" "USA" "KANADA" "FRANKREICH" "SPANIEN")
ISO=(DE CH AT LU US CA FR ES)
CC=(49 41 43 352 1 1 33 34)
NAC=(0 0 0 "" 1 1 0 0)
NPA=(0 0 0 0 NPA_US NPA_CA 0 0)
CLAND=${#LAND[@]}


#Area_Codes (optionaler Parameter 4 der unterstützten Länder)

NPA_US=( 
	201 202 203 205 206 207 208 209 210 212 213 214 215 216 217 218 219 224 225 228 229 231 234 239 240 248 251 252 253 254 256 260 262 267 269 270 276 281 301 302 303 304 305 307 308 309 310 312 313 314 315 316 317 318 319 320 321 323 325 330 331 334 336 337 339 347 351 352 360 361 386 401 402 404 405 406 407 408 409 410 412 413 414 415 417 419 423 424 425 430 432 434 435 440 443 464 469 470 475 478 479 480 484 501 502 503 504 505 507 508 509 510 512 513 515 516 517 518 520 530 540 541 551 557 559 561 562 563 564 567 570 571 573 574 575 580 585 586 601 602 603 605 606 607 608 609 610 612 614 615 616 617 618 619 620 623 626 630 631 636 641 646 650 651 660 661 662 678 682 701 702 703 704 706 707 708 712 713 714 715 716 717 718 719 720 724 727 731 732 734 737 740 754 757 760 762 763 765 769 770 772 773 774 775 779 781 785 786 800 801 802 803 804 805 806 808 810 812 813 814 815 816 817 818 828 830 831 832 835 843 845 847 848 850 856 857 858 859 860 862 863 864 865 866 870 872 877 878 888 901 903 904 906 907 908 909 910 912 913 914 915 916 917 918 919 920 925 928 931 936 937 940 941 947 949 951 952 954 956 959 970 971 972 973 975 978 979 980 984 985 989 
       )
NPA_CA=(
	204 250 289 306 403 416 418 438 450 506 514 519 600 604 613 647 705 709 778 780 807 819 867 902 905
	)

######################
#####################
####################
#
#  Funktionen beginn
#
###################
####################
#####################

## Parameter aus MYSQL lesen
function MYSQL_params {

	TEMP=`mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB --execute="select concat(cc,'|',ndc,'|',iac,'|',nac) from $PTABLE" | \
                tail -n +2 | tr '\t' '|'`
	CC=`echo $TEMP | cut -d '|' -f 1`
	NDC=`echo $TEMP | cut -d '|' -f 2`
	IAC=`echo $TEMP | cut -d '|' -f 3`
	NAC=`echo $TEMP | cut -d '|' -f 4`
}

## Parameter aus PGSQL lesen
function PGSQL_params {
 TEMP=`psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "select cc,ndc,iac,nac from $PTABLE"`
        CC=`echo $TEMP | cut -d '|' -f 1|sed 's/\s//g'`
        NDC=`echo $TEMP | cut -d '|' -f 2|sed 's/\s//g'`
        IAC=`echo $TEMP | cut -d '|' -f 3|sed 's/\s//g'`
        NAC=`echo $TEMP | cut -d '|' -f 4|sed 's/\s//g'`
}

## Nummer Normalisierung auf internationales Formaat mit +<CC><NDC><SN>
function normalisierung {
        # Leerzeichen raus
        NUMMER=`echo $NUMMER | sed -e "s/\ //g"`
        # Pruefen auf +
        TMP=`echo $NUMMER | sed -e s/^\+//`
        TMP2=`echo $NUMMER | sed -e s/^$OIAC//`
        TMP3=`echo $NUMMER | sed -e s/^$ONAC//`
        if [ "$NUMMER" != "$TMP" ]; then
                # eigener IAC und eigener CC und eigener NDC
                TMP=`echo $NUMMER | sed -e s/^\+$OCC$ONDC//`
                TMP2=`echo $NUMMER | sed -e s/^\+$OCC//`
                if [ "$NUMMER" != "$TMP" ]; then
                        NUM=`echo $NUMMER | sed -e "s/^\+$OCC$ONDC//"`
                 # eigener IAC und eigener CC
                elif [ "$NUM" != "$TMP2" ]; then
                        NUM=`echo $NUMMER | sed -e "s/^\+$CC$NDC/$NAC/"`
                else
                        NUM=`echo $NUMMER | sed -e "s/^\+/$IAC/"`
                fi
        # Pruefen auf eigenen IAC
        elif [ "$NUMMER" != "$TMP2" ]; then
                # eigener IAC und eigener CC und eigener NDC
                TMP=`echo $NUMMER | sed -e s/^$OIAC$OCC$ONDC//`
                TMP2=`echo $NUMMER | sed -e s/^$OIAC$OCC//`
                if [ "$NUMMER" != "$TMP" ]; then
                        NUM=`echo $NUMMER | sed -e "s/^$OIAC$OCC$ONDC//"`
                # eigener IAC und eigener CC
                elif [ "$NUMMER" != "$TMP2" ]; then
                        NUM=`echo $NUMMER | sed -e "s/^$OIAC$OCC/$ONAC/"`
                else
                        NUM=$NUMMER
                fi
                NUMMER=`echo $NUMMER | sed -e "s/^$OIAC/+/"`
        # Pruefen auf long distance domestic
        elif [ "$NUMMER" !=  "$TMP3" ]; then
                TMP=`echo $NUMMER | sed -e s/^$ONAC$ONDC//`
                if [ "$NUMMER" != "$TMP" ]; then
                        NUM=`echo $NUMMER | sed -e "s/^$ONAC$ONDC//"`
                else
                        NUM=$NUMMER
                fi
                NUMMER=`echo $NUMMER | sed -e "s/^$ONAC/+$OCC/"`
        # Local Call
        else
                NUM=$NUMMER
                NUMMER=+$OCC$ONDC$NUMMER
        fi
        echo "Normalisierung der Rufnummer: " >> $LOGFILE
        echo "Rueckwahlform der Nummer (NUM) : $NUM (gueltig fuer Land $OCC und Ortsnetz $ONDC)"  >> $LOGFILE
        echo "Internationale Form der Nummer : $NUMMER" >> $LOGFILE
}
## Pruefen, ob eine Ermittlungsroutine fuer die Rufnummer vorhanden ist (mit Daten aus Skript)
function check_land {
	index=0
	COUNTRY=""
	while [ "$index" -lt "$CLAND" ]; do
		TEST=`echo $NUMMER | sed -e "s/^\+${CC[$index]}//"`
		 if [ "$TEST"  != "$NUMMER" ]; then 
			if [ "${NPA[$index]}" != "0" ]; then
				if [ "${NPA[$index]}" == "NPA_US" ]; then
					for i in "${NPA_US[@]}"; do
						TEST=`echo $NUMMER | sed -e "s/^\+${CC[$index]}$i//"`
						if [ "$TEST"  != "$NUMMER" ]; then
							COUNTRY=${LAND[$index]}
							CINDEX=$index
							break
						fi
					done
				else
					for i in "${NPA_CA[@]}"; do
						TEST=`echo $NUMMER | sed -e "s/^\+${CC[$index]}$i//"`
						if [ "$TEST"  != "$NUMMER" ]; then
							COUNTRY=${LAND[$index]}
							CINDEX=$index
							break
						fi
					done
				fi
			else
				COUNTRY=${LAND[$index]}
				CINDEX=$index
			fi
		fi
		if [ "$CINDEX" -ne "-1" ]; then
			break
		fi
		let "index = $index + 1"
	done
	if [ $CINDEX -ne -1 ]; then
		echo "Ländererkennung" >> $LOGFILE
		echo "Erkanntes Land: " $COUNTRY >> $LOGFILE
	else
		echo "keine Reverssuche für Land des Anrufers" >> $LOGFILE
	fi
}

## Pruefen, ob eine Ermittlungsroutine fuer die Rufnummer vorhanden ist (mit Daten aus MYSQL)
function check_land_mysql {
        COUNTRY=""
	index=15
	TEST=`echo $NUMMER | sed -e "s/^\+/00/"`
	while [ $index -gt 3 ]; do
		skey=${TEST:0:$index}
		TEMP=`mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB --execute="select concat(a.iso3166,'|',a.deutsch,'|',b.name) from $ETABLE a,$CTABLE b where a.exten='$skey' and a.iso3166=b.iso3166" | \
                tail -n +2 | tr '\t' '|'`
		if [ "$TEMP" != "" ]; then
			iso=`echo $TEMP | cut -d '|' -f 1`
			EXTDESC=`echo $TEMP | cut -d '|' -f 2`
			COUNTRY=`echo $TEMP | cut -d '|' -f 3`
			index=3
		fi
		let "index = $index - 1"	 
	done
	if [ "$COUNTRY" != "" ]; then
		index=0
		while [ "$index" -lt "$CLAND" ]; do
			if [ "${ISO[$index]}" == "$iso" ]; then
				CINDEX=$index
				break
			fi
			let "index = $index + 1"
		done
	fi
        if [ $CINDEX -ne -1 ]; then
                echo "Ländererkennung" >> $LOGFILE
                echo "Erkanntes Land: " $COUNTRY >> $LOGFILE
        else
                echo "keine Reverssuche für Land des Anrufers" >> $LOGFILE
        fi
	
}

## Pruefen, ob eine Ermittlungsroutine fuer die Rufnummer vorhanden ist (mit Daten aus PGSQL)
function check_land_pgsql {
        COUNTRY=""
	index=15
	TEST=`echo $NUMMER | sed -e "s/^\+/00/"`
	while [ $index -gt 3 ]; do
		skey=${TEST:0:$index}
		TEMP=`psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "select a.iso3166,a.deutsch,b.name from $ETABLE a,$CTABLE b where a.exten='$skey' and a.iso3166=b.iso3166"`
    if [ "$TEMP" != "" ]; then
		   iso=`echo $TEMP |cut -d '|' -f 1| sed 's/\s//g'`
       EXTDESC=`echo $TEMP | cut -d '|' -f 2 | sed 's/\s//g'`
       COUNTRY=`echo $TEMP | cut -d '|' -f 3  | sed 's/\s//g'`
       index=3
		fi
		let "index = $index - 1"	 
	done

	if [ "$COUNTRY" != "" ]; then
                index=0
		while [ "$index" -lt "$CLAND" ]; do
			if [ "${ISO[$index]}" == "$iso" ]; then
				CINDEX=$index
				break
			fi
			let "index = $index + 1"
		done
	fi
        if [ $CINDEX -ne -1 ]; then
                echo "Laendererkennung" >> $LOGFILE
                echo "Erkanntes Land: " $COUNTRY >> $LOGFILE
        else
                echo "keine Reverssuche-Fund des Anrufers wg. LAND" >> $LOGFILE
        fi
	
}


function DEUTSCHLAND {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
if [ "$DE_PREFERED" == "OERTLICHE" ]; then
	oertliches
	if [ "$NAME" == "" ]; then
		if [ "$DE_CASCADE" == "YES" ]; then
			klicktel
		fi
	fi
else 
	klicktel
	if [ "$NAME" == "" ]; then
		if [ "$DE_CASCADE" == "YES" ]; then
			oertliches
		fi
	fi
fi
}

function oertliches  {
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$SNUM"
NAME=`grep 'class=\"counter.*' -m1 -A1 /tmp/ast_revers.agi_html_tmp | sed -e s/^.*\"counter\"//g -e s/\<'\/'a\>.*//g -e s/^.*\>//g -e s/\<.*//`
DETAILS=`grep 'class=\"counter.*' -m1 -A5 $TMPFILE | sed '/\"counter/,+4d;s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//'`
if [ "$BLACKLIST" == "YES" ]; then
        if [ "$AUTOBLACKLIST" != "" ]; then
                BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
                if [ "$BLACK" != "" ]; then
                        ISBLACK=Ja
                fi
        fi
fi
rm $TMPFILE
}

function klicktel {
if echo $SNUM | grep '^01';then
	echo "Das ist ein Handy"
else
	wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.klicktel.de/inverssuche/backwardssearch.html?newSearch=1&boxtype=backwards&sid=270asss9s9u1m4l7bfvhc3tbb6&vollstaendig=$SNUM"
	if grep -i "1 Treffer" $TMPFILE > /dev/null;then
		echo "EIN TREFFER!"	
		NAME=`grep 'class=\"namelink\".*' -m1 $TMPFILE | sed -e 's/<[^>]*>//g'`
		NAME=`echo $NAME | sed 's/\&ouml\;/ö/g;s/\&auml\;/ä/g;s/\&uuml\;/ü/g;s/\&Ouml\;/Ö/g;s/\&Auml\;/Ä/g;s/\&Uuml\;/Ü/g;s/\&szuml\;/ß/g'`
		DETAILS=`grep 'class=\"data\ track".*' -m1 -A4 $TMPFILE | sed -e 's/<[^>]*>//g' -e s/\&nbsp\;/\ /g `
		if [ "$BLACKLIST" == "YES" ]; then
			if [ "$AUTOBLACKLIST" != "" ]; then
				BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
				if [ "$BLACK" != "" ]; then
					ISBLACK=Ja
				fi
			fi
		fi		
	fi;	
	rm $TMPFILE
fi;
}

function SCHWEIZ {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://tel.search.ch/result.html?name=&misc=&strasse=&ort=&kanton=&tel=$SNUM"
NAME=`grep 'class=\"rname\".*' -m1 $TMPFILE | sed -e s/^.*\"rname\"\>//g -e s/\<'\/'a\>.*//g -e s/^.*\>//`
if [ "$NAME" != "" ]; then
	DETAILS=`grep 'class=\"raddr\".*' -m1 $TMPFILE | sed -e s/^.*\"raddr\"\>//g -e s/\<'\/'div\>.*//g -e s/\<span.*addrpart\"\>//g -e s/\<'\/'span\>//g`	
	STRA=`echo $DETAILS | cut -d "," -f 1`
	ORT=`echo $DETAILS | cut -d "," -f 2`
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
fi
rm $TMPFILE
}

function OESTERREICH {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`

#Variante für Lynx, nicht weiter verfolgt (Dunp-Datei ist nicht zum HTML von wget/curl) kompatibel)
#echo "pc=in&suchmaske=_einfach&aktion=suchein&loga=&selsort=&AktuelleSeite=0&blaettern=_einfach$SNUM&wen=&was=&wo=&karte=nichtanzeigen&telnummer=$SNUM" | \
#lynx -dump -nolist -force_html -post_data "http://www.tb-online.at/index.php" > $TMPFILE

#Variante mit wget
wget -q --tries=3 --timeout=5 --post-data="pc=in&suchmaske=_einfach&aktion=suchein&loga=&selsort=&AktuelleSeite=0&blaettern=_einfach$SNUM&wen=&was=&wo=&karte=nichtanzeigen&telnummer=$SNUM" -O $TMPFILE "http://www.tb-online.at/index.php"


#Variante mit curl
#curl -s -d "pc=in&suchmaske=_einfach&aktion=suchein&loga=&selsort=&AktuelleSeite=0&blaettern=_einfach$SNUM&wen=&was=&wo=&karte=nichtanzeigen&telnummer=$SNUM" http://www.tb-online.at/index.php > $TMPFILE
NAME=`grep 'class=\"name\".*' -m1 $TMPFILE | sed -e s/^.*\"name\"\>//g -e s/\<'\/'p\>.*//g`
if [ "$NAME" != "" ]; then
	DETAILS=`grep 'class=\"name\".*' -m1 -A1 $TMPFILE | sed -e s/^.*\"name\"\>.*//g -e s/\<p\ class\=\"telnummer\".*//g -e s/\<'\/'p\>/\|/g -e s/\<p\>//g -e s/\&nbsp\;/\ /g`
	STRA=`echo $DETAILS | cut -d '|' -f 1`
	ORT=`echo $DETAILS | cut -d '|' -f 2`
	DETAILS="$STRA, ${LAND[$CINDEX]}$ORT"
fi
rm $TMPFILE
}  

function LUXEMBURG {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.editustel.lu/luxweb/neosearchAT.do?input=$SNUM&imageField.x=47&imageField.y=15&lan=AL&sessionKey=6DPill4msv5kzCdRPsmymxI"
TEMP=`grep 'class=\"raisSoc\".*' -m1 $TMPFILE | sed -e s/^.*\"raisSoc\".*\<span\>\<strong\>//g -e s/\<'\/'div\>.*//`
NAME="`echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 2 ` `echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 1 `"
if [ "$NAME" != "" ]; then
	STRA=`echo $TEMP | cut -d '>' -f 3 | sed -e s/\<.*//`
	ORT=`echo $TEMP | cut -d '>' -f 4 | sed -e s/\<.*// -e s/\&nbsp\;/\ /g -e s/^L\-//`
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
fi
rm $TMPFILE
}

function USA {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}//"`
NPA=${SNUM:0:3}
SN=${SNUM:3}
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.anywho.com/qry/wp_rl/?npa=$NPA&telephone=$SN"
TEMP=`grep 'Reverse Telephone.*' -m1 -A 12 $TMPFILE | tr '\n' ' '`
if [ "$TEMP" != "" ]; then
	NAME=`echo $TEMP |  sed -e s/^.*\<B\>// -e s/\<'\/'B\>.*//`
	NAME="`echo $NAME | cut -d ',' -f 2 | sed -e s/^\ //` `echo $NAME | cut -d ',' -f 1`"
	STRA=`echo $TEMP | sed -e s/^.*\-\-\>\ // | cut -d '<' -f 1`
	ORT=`echo $TEMP | sed -e s/^.*\-\-\>\ // | cut -d '<' -f 2 | sed -e s/.*\>\ //`
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
fi
rm $TMPFILE
}


function KANADA {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}//"`
# Private Einträge
wget -q --tries=3 --timeout=5 -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://411ca.whitepages.com/search/ReversePhone?phone=$SNUM"
TEMP=`grep 'div class=\"name\"*' -m1 -A 2 $TMPFILE |  tr '\n' ' ' `
if [ "$TEMP" != "" ]; then
	NAME=`echo $TEMP | sed -e s/.*left\;\"\>// -e s/\<'\/'div\>\ \<div.*// -e s/amp\;//`
	NAME="`echo $NAME | cut -d ',' -f 2| sed -e s/^\ // ` `echo $NAME | cut -d ',' -f 1`"
	STRA=`echo $TEMP | sed -e s/.*\;\"// |cut -d '<' -f 1` 
	ORT=`echo $TEMP | sed -e s/.*\;\"// |cut -d '<' -f 2 | sed -e s/.*\>//`	
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
else
	#Business-Einträge
	wget -q --tries=3 --timeout=5 -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.411.ca/websearchservlet?lang=eng&click411=null&canoe=null&combined=$SNUM&sessionId=10DCC8A126531A74FCD5FE0D32478080&qid=1004552341838772480&tid=NEW_SEARCH"
	NAME=`grep 'class=\"cabecera\"' -m1 -A 2 $TMPFILE |  tr '\n' ' ' | sed -e s/.*\<b\>// -e s/\<'\/'b\>.*//g`
	if [ "$NAME" != "" ]; then
		STRA=`grep 'span class=\"cabecera\"' -m1 $TMPFILE | sed -e s/.*cabecera\"\>// -e s/\<'\/'span\>.*// -e s/\,\&nbsp\;//g`
		ORT=`grep 'span class=\"cabecera\"' -m2 $TMPFILE |  tr '\n' ' ' | sed -e s/.*cabecera\"\>// -e s/\<'\/'span\>.*//g` 
		DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
	fi
fi
rm $TMPFILE
}

function FRANKREICH {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 --post-data="actionForwardName=reponseINV&numeroTelephone=$SNUM" -O $TMPFILE "http://www.pagesjaunes.fr/quidonc/aquiestcenumero.do;jsessionid=8005631F6C26F75B86616A34ABE46121.yas41f"
NAME=`grep 'N4_bloc_parution_raison' -m1 $TMPFILE | sed -e s/.*N4_bloc_parution_raison\ sclear\"\>// -e s/\<'\/'h5\>.*// -e s/\ *$//`
if [ "$NAME" != "" ]; then
	TEMP=`grep 'N5_bloc_parution_adresse' -A 3 -m1 $TMPFILE |tr '\n' ' ' | tr '\t' ' ' | sed -e s/^.*\<'\/'strong\>// -e s/\<'\/'p\>.*// -e s/^\ *//`
	STRA=""
	ORT=""
	SO="0"
	set -- $TEMP
	for items in $@
	do   
		T1=`echo $items | sed -e s/^[0-9][0-9][0-9][0-9][0-9]$//`
		if [ "$items" != "$T1" ]; then
			SO="1"
		fi
		if [ "$SO" == "0" ]; then
			STRA="$STRA $items"
		else
			ORT="$ORT $items"
		fi
	done
	STRA=${STRA:1}
	DETAILS="$STRA, ${LAND[$CINDEX]}$ORT"
fi
rm $TMPFILE
}

function SPANIEN {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
TEMP=`$SE/spanien.php $SNUM`
NAME=`echo $TEMP | cut -d '|' -f 1`
STRA=`echo $TEMP | cut -d '|' -f 2`
ORT=`echo $TEMP | cut -d '|' -f 3`
if [ "$NAME" != "" ]; then
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
fi
}

## Die Werte NUMMER NAME und DEATAILS in das cache schreiben
function write_cache {
echo "Gefunde Werte ins cache schreiben" >> $LOGFILE
if [ "$BLACKLIST" == "YES" ]; then
	echo -e "$NUMMER\t$NAME\t$DETAILS\t$ISBLACK" >> $CACHE
else
	echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
fi
}

## Die Werte NUMMER NAME und DEATAILS aus dem cache lesen
function read_cache {
echo "Suche nach $NUMMER im cache" >> $LOGFILE
NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
if [ "$BLACKLIST" == "YES" ]; then
	ISBLACK=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $4 }' $CACHE`
	if [ "$ISBLACK" == "NULL" ] ||  [ "$ISBLACK" == "" ]; then
		ISBLACK=Nein
	fi
fi
}

function read_cache2 {
echo "Suche nach $NUMMER im cache2 " >> $LOGFILE
NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE2`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE2`
if [ "$BLACKLIST" == "YES" ]; then
	ISBLACK=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $4 }' $CACHE2`
        if [ "$ISBLACK" == "NULL" ] ||  [ "$ISBLACK" == "" ]; then
                ISBLACK=Nein
        fi
fi
}


## Die Werte DETAILS, NAME, NUMMER, platzhalter in eine sqlite3 DB schreiben
function sq3_write {
echo "Gefunde Werte in die SQL3-DB schreiben" >> $LOGFILE
#echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
$SQLBIN $DB <<SQL_ENTRY_TAG_1
if [ "$BLACKLIST" == "YES" ]; then
INSERT 
INTO dasoertliche
values ('$AFELD','$DETAILS','$NAME','$NUMMER','$VBOX','$ISBLACK');
else
INSERT 
INTO dasoertliche
values ('$AFELD','$DETAILS','$NAME','$NUMMER','$VBOX');
fi
SQL_ENTRY_TAG_1
}

## Die Werte DEATAILS, NAME aus einer sqlite3 DB lesen
function sq3_read {
echo "Suche nach $NUMMER in SQL3-DB" >> $LOGFILE
$SQLBIN $DB "SELECT NAME FROM dasoertliche WHERE NUMBER='${NUMMER}'" | ( while read NAME ; do echo $NAME > $SQL_NAME_CACHE; done )
$SQLBIN $DB "SELECT DETAILS FROM dasoertliche WHERE NUMBER='${NUMMER}'" | ( while read DETAILS ; do echo $DETAILS > $SQL_DETAILS_CACHE; done )
NAME=`cat $SQL_NAME_CACHE`
DETAILS=`cat $SQL_DETAILS_CACHE`
if [ "$BLACKLIST" == "YES" ]; then
	$SQLBIN $DB "SELECT BLACK FROM dasoertliche WHERE NUMBER='${NUMMER}'" | ( while read BLACK ; do echo $BLACK > $SQL_BLACK_CACHE; done )
	ISBLACK=`cat $SQL_BLACK_CACHE`
        if [ "$ISBLACK" == "NULL" ] ||  [ "$ISBLACK" == "" ]; then
                ISBLACK=Nein
        fi
	rm $SQL_BLACK_CACHE
fi
rm $SQL_NAME_CACHE
rm $SQL_DETAILS_CACHE
}

## Die Werte DETAILS, NAME, NUMMER, platzhalter in eine MYSQL- DB schreiben
function mysql_write {
echo "Gefunde Werte in die MYSQL-DB schreiben" >> $LOGFILE
if [ "$BLACKLIST" == "YES" ]; then
	echo "insert ignore into $CACHETAB(nummer,name,details,black) values ('$NUMMER','$NAME','$DETAILS','$ISBLACK')" | mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB
else
	echo "insert ignore into $CACHETAB(nummer,name,details) values ('$NUMMER','$NAME','$DETAILS')" | mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB
fi
}


## Die Werte DETAILS, NAME, NUMMER, platzhalter aus einer MYSQL- DB lesen
function mysql_read {
echo "Suche nach $NUMMER in MYSQL-DB" >> $LOGFILE
if [ "$BLACKLIST" == "YES" ]; then
	TEMP=`mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB --execute="select concat(name,'|',details,'|',black) from $CACHETAB where nummer='$NUMMER'" | \
	                tail -n +2 | tr '\t' '|'`
else
	TEMP=`mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB --execute="select concat(name,'|',details) from $CACHETAB where nummer='$NUMMER'" | \
	                tail -n +2 | tr '\t' '|'`
fi	          
if [ "$TEMP" != "" ]; then
	NAME=`echo $TEMP | cut -d '|' -f 1`
	DETAILS=`echo $TEMP | cut -d '|' -f 2`
	if [ "$BLACKLIST" == "YES" ]; then
		ISBLACK=`echo $TEMP | cut -d '|' -f 3`
	        if [ "$ISBLACK" == "NULL" ] ||  [ "$ISBLACK" == "" ]; then
        	        ISBLACK=Nein
	        fi
	fi
fi
}

## Die Werte DETAILS, NAME, NUMMER, platzhalter in eine PGSQL- DB schreiben
function pgsql_write {
  echo "Gefunde Werte in die PGSQL-DB schreiben" >> $LOGFILE
  if [ "$BLACKLIST" == "YES" ]; then
	psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "insert into $CACHETAB(nummer,name,details,black) values ('$NUMMER','$NAME','$DETAILS','$ISBLACK')" 
  else
  	psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "insert into $CACHETAB(nummer,name,details) values ('$NUMMER','$NAME','$DETAILS')" 
  fi
}

## Die Werte DETAILS, NAME, NUMMER, platzhalter aus einer PGSQL- DB lesen
function pgsql_read {
  echo "Suche nach $NUMMER in PGSQL-DB" >> $LOGFILE
  if [ "$BLACKLIST" == "YES" ]; then
  	TEMP=`psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "select name,details,black from $CACHETAB where nummer='$NUMMER'"`
  else
  	TEMP=`psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "select name,details from $CACHETAB where nummer='$NUMMER'"`
  fi
  if [ "$TEMP" != "" ]; then
	  NAME=`echo $TEMP | cut -d '|' -f 1`
	  DETAILS=`echo $TEMP | cut -d '|' -f 2`
	  if [ "$BLACKLIST" == "YES" ]; then
		ISBLACK=`echo $TEMP | cut -d '|' -f 3`
	        if [ "$ISBLACK" == "NULL" ] ||  [ "$ISBLACK" == "" ]; then
        	        ISBLACK=Nein
	        fi
	  fi
  fi
}

## Anrufliste_log 
# wunsch von kombjuder
function anruf_log {
if [ -e $ALPFAD/$ALFILE ]; then
	   echo "Anruf.log ($ALFILE) erstellt" >> $LOGFILE
		echo "$ALDATE - $ALTIME - $NUMMER - $NAME - $DETAILS" >> $ALPFAD/$ALFILE
	else
		echo "bestehendes Anruf.log ($ALFILE) verwendet" >> $LOGFILE
		echo "$ALDATE - $ALTIME - $NUMMER - $NAME - $DETAILS" > $ALPFAD/$ALFILE
fi
}


## Anrufliste_log in DB 
function anruf_log_db {
if [ "$LOGDB" == "MYSQL" ]; then
	echo "insert ignore into $LOGTAB (nummer,destination) values ('$NUMMER','$DEST')" | mysql -h$MYSQLHOST -u$MYSQLUSER -p$MYSQLPASS $MYSQLDB
fi
if [ "$LOGDB" == "PGSQL" ]; then
	psql -h$PGSQLHOST -U$PGSQLUSER -p$PGSQLPORT $PGSQLDB -t -c "insert into $LOGTAB(nummer,destination) values ('$NUMMER','$DEST')" 
fi
}


## OSD Mitteilung an den VDR per "svdrpsend.pl"
## im svdrpsend.pl script wirde "localhost" durch die VDR-IP ersetzt
function osdvdr {
svdrpsend.pl "mesg ANRUF: $NAME $NUM"
svdrpsend.pl "mesg $DETAILS"
}

## LONGNAME an die Asterisk uebergeben
function asterisk {
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
# Für mein Fax-Script wird auch Details zurückgeschrieben
echo 'SET VARIABLE LONGDETAILS '"\"$DETAILS\"" >/dev/stdout
#falls BLACKLISTING-Funktionalitaet gesetzt, dieses auch zuückgeben
if [ "$BLACKLIST" == "YES" ]; then
	echo 'SET VARIABLE BLACK '"\"$ISBLACK\"" >/dev/stdout
fi
}

## Mailbenachrichtigung über gmail absetzen
function jabber {
	TEMP=`$SP/sendmessage.php $JUSER $JPASS $JMAIL "$JTEXT"`
	if [ "$TEMP" == "OK" ]; then
		echo "Anrufnachricht erfolgreich versendet" >> $LOGFILE
	fi
}

######################
#####################
####################
#
#  Funktionen ende
#
###################
####################
#####################

if [ -e $LOGFILE ]; then
	rm $LOGFILE
fi
touch $LOGFILE

echo "-----------------------------------------------------" >> $LOGFILE
echo "Logfile Reverssuche vom $DATE" >> $LOGFILE
echo "-----------------------------------------------------" >> $LOGFILE
echo "" >> $LOGFILE

# Pruefen ob eine Nummer uebermittelt wurde (nur reine Ziffernfolge und +)
TEST=`echo $NUMMER | sed -e s/[\+0-9]//g` 
if [ "$TEST" != "" ] || [ "$NUMMER" == "" ] ; then
	echo "Keine Rufnummer uebermittelt" >> $LOGFILE
	NAME="geheim"
	asterisk
	exit 0
fi

#Initialisieren
if [ "$BLACKLIST" == "YES" ]; then
	ISBLACK=Nein
fi

echo "Suchen nach Nummer $NUMMER" >> $LOGFILE

#Wenn Parameter von MYSQL, dann Parameter lesen
if [ "$PARAMS" = "MYSQL" ]; then
	MYSQL_params
fi
if [ "$PARAMS" = "PGSQL" ]; then
	PGSQL_params
fi

# Nummer normalisieren und anschlieÃ?end im Cache suche
echo "Nummer Normalisieren " >> $LOGFILE
normalisierung

if [ "$SPEICHERORT" == "SQL3" ]; then
	echo "SQLite-DB gewaehlt" >> $LOGFILE
	sq3_read
elif [ "$SPEICHERORT" == "CACHE" ]; then
	echo "Cache-File gewaehlt" >> $LOGFILE
	#CACHE-File erzeugen
	if [ -e $CACHE ]; then
	   echo "Cache-File vorhanden" >> $LOGFILE
	else
	   touch $CACHE
	   echo "Cache-File erstellen" > $LOGFILE
	fi
	read_cache
	if [ "$USE_CACHE2" == "YES" ]; then
		read_cache2
	fi
elif [ "$SPEICHERORT" == "MYSQL" ]; then
	echo "MYSQL-DB gewaehlt" >> $LOGFILE
	mysql_read
elif [ "$SPEICHERORT" == "PGSQL" ]; then
	echo "PGSQL-DB gewaehlt" >> $LOGFILE
	pgsql_read
fi

# Wenn im Cache nichts steht wird ueber eine passende I-Net Seite gesucht
if [ "$NAME" == "" ]; then
        echo "Cache hat keinen passenden Eintrag" >> $LOGFILE
	if [ "$PARAMS" == "MYSQL" ]; then
		check_land_mysql
	elif [ "$PARAMS" == "PGSQL" ]; then
		check_land_pgsql
	elif [ ""=="" ]; then 
		check_land
	fi
	if [ $CINDEX -ne -1 ]; then
		echo "I-Net Reverssuche in " $COUNTRY >> $LOGFILE
		${LAND[$CINDEX]}
	        NAME=`echo $NAME| sed 's/\r//g'`	
                DETAILS=`echo $DETAILS| sed 's/\r//g'`
		if [ "$RESET_UML" == 1 ]; then
			NAME=`echo $NAME| sed 's/ö/oe/g;s/ü/ue/g;s/ä/ae/g;s/ß/ss/g;s/Ö/Oe/g;s/Ü/Ue/g;s/Ä/Ae/g'`
			DETAILS=`echo $DETAILS| sed 's/ö/oe/g;s/ü/ue/g;s/ä/ae/g;s/ß/ss/g;s/Ö/Oe/g;s/Ü/Ue/g;s/Ä/Ae/g'`
		fi
                echo " Name: $NAME   DETAILS: $DETAILS per I-Net gefunden" >> $LOGFILE
	fi
 else
 	echo "Wert im Cache gefunden" >> $LOGFILE
	CACHETRUE=1
	echo "CACHETRUE auf 1 gesetzt" >> $LOGFILE
	echo " Name: $NAME   DETAILS: $DETAILS" >> $LOGFILE
fi


# Wenn dasOertliche.de nichts findet NAME und DETAILS f�¼llen
if [ "$NAME" == "" ]; then
	if [ $CINDEX -ne -1 ]; then
		echo "Reverssuche in " $COUNTRY " gab keinen Treffer" >> $LOGFILE
	fi
	if [ "$PARAMS" == "MYSQL" ] && [ "$EXTDESC" != "" ]; then
		NAME="kein Eintrag"
		DETAILS=$EXTDESC
		echo "Werte mit gefundener Extension fuer Name: $NAME und Details: $DETAILS" >> $LOGFILE
	else 
		NAME="kein Eintrag"
		DETAILS="keine Adresse"
		echo "Standartwerte fuer Name: $NAME und Details: $DETAILS" >> $LOGFILE
	fi
fi


if [ "$CACHETRUE" == 0 ]; then
	echo "Werte in den Cache schreiben" >> $LOGFILE
	if [ "$SPEICHERORT" == "SQL3" ]; then
        echo "SQLite-DB gewaehlt" >> $LOGFILE
		sq3_write
	elif [ "$SPEICHERORT" == "CACHE" ]; then
        echo "Cache-File gewaehlt" >> $LOGFILE
		write_cache
	elif [ "$SPEICHERORT" == "MYSQL" ]; then
        echo "MYSQL-DB gewaehlt" >> $LOGFILE
		mysql_write
	elif [ "$SPEICHERORT" == "PGSQL" ]; then
        echo "PGSQL-DB gewaehlt" >> $LOGFILE
		pgsql_write
	fi
fi

echo "Variable fuer Asterisk setzen" >> $LOGFILE
asterisk

if [ "$VDR" == 1 ];then
	echo "VDR-OSD ansteuern" >> $LOGFILE
	osdvdr
fi

echo "Anruflog="$ALYES >> $LOGFILE
if [ "$ALYES" == 1 ]; then
	anruf_log
	echo "Werte in Anruflog schreiben" >> $LOGFILE
	if [ "$LOGDB" != "0" ]; then
		anruf_log_db;
	fi
else
	echo "Anruflog ausgeschaltet" >> $LOGFILE
fi

if [ "$JABBER" == "1" ]; then
	echo "Anrufnachricht versenden" >> $LOGFILE
	jabber
fi

wenn ich es über die Console aufrufe immer noch des selbe....
/var/lib/asterisk/agi-bin# ./ast_revers.agi 03320358134
SET VARIABLE LONGNAME "kein Eintrag"
SET VARIABLE LONGDETAILS "Deutschland Kleinmachnow"

mir gehn die ideen aus

MfG Nikon
 
Hab grade noch mal was getestet das script zieht die daten von das Örtliche nur bei eingekürzten nummer gibts Problem....

Hab das TEMP file mal gesichert ....... hier mal nur der relevante
Code:
			<div class="nummer">
				&nbsp;(03 32 03) 5 81-0<br/>
		           				&nbsp;<br/>
		           				<a href="" onclick="javascript:window.open('http://www1.dasoertliche.de/?form_name=freecall_loading&fcID=1222001399179106165720&service=std&c4allHost=http://ecs.c4all.net/dasoertliche/&orgin='+encodeURIComponent('%0Dq%1D%F0%F4%1E%25%08%04%2C%DA%EDv%92%BC%94Y%18%89%E2it%3B%9E-%BA%3C%B0%08%60%B2%F8%3C%A4APMkA%3A%3C%12%B9%5E%C9%80O%CF%60%8E%7E%989%D8l%A2%91%82%22%B0%3BV%C7%7D%82X%F3%D9%E7%12%C6%EFA%AE%3D%248%B2%11%C7%06%7F%94%98re%29%F7%A4Z%94%24f%C0%13%B6%B5%1E%FDZ%3C%D4%BBcr%5B%09%3C%97%C8+%CBfDl%3A%C1%28-%F9%FD%5B%85VO%05%3D%BE%B8%8A%0AI%F1%ACR%B1z*A%FF%3D%A9%DC%1F%CC%B2P%B9D8%88%A5%B2%0F%9D%DE%02.F%07%0CnY%91%3E%1F%E4%7E%E8%9F%D3v%00B%DF%F9%EB%21%B5%BD%01%90AN%AD%F1%88%98%5B%89%0D%1C%FB%11fs%B9%B1%BF%DF%9B%24%BD%D8I%A3%3F%06')+'&showAd=true&book=1222&kw=&verl=161&na=' + escape('Wasser- und Schifffahrtsdirektion Ost Berufsbildungszentrum Kleinmachnow') + '&phv=&ph=(03 32 03) 5 81-0','BCS','width=780,height=600,menubar=no,status=no,toolbar=no,resizable=no');; return false;" class="btn_freecall_normal"></a>

                </div>
			<div class="zusatz">
								<div class="zusatz">

</div>
                            		
</div>
						<script language="javascript">

// alert("NA:" + 'Wasser- und Schifffahrtsdirektion Ost Berufsbildungszentrum Kleinmachnow');
var data = {id : "1222001399179106165720", 
	    	pc: "14532", 
	    	ci: "Kleinmachnow", 
	    	na: "Wasser- und Schifffahrtsdirektion Ost Berufsbildungszentrum Kleinmachnow", 
		    st: "Stahnsdorfer Damm%201",
		    bi: "1222"};
var custom = {previews : [],
thumbnails : [],
addText : "type=infotext&text=",
moreButton: false};
$v$.itemHandler.addItem (data,custom);
</script>
</div>

Hoffe das es was bringt

und das ist die Consolen ausgabe.....


/var/lib/asterisk/agi-bin# ./ast_revers.agi 03320358134 SET VARIABLE LONGNAME "kein Eintrag"
SET VARIABLE LONGDETAILS "Deutschland Kleinmachnow"
 
Nächster Versuch, hat in Deinem Beispiel jetzt funktioniert, ohne meinen anderen Testfall abzuschießen:

Code:
function oertliches  {
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$SNUM"
[B][COLOR="Red"]NAME=`grep 'class=\"counter.*' -m1 -A1 $TMPFILE |  sed '/\"counter/d;s/<a .* onMouseOut//;s/<.*$//;s/^.*>//'`[/COLOR][/B]
DETAILS=`grep 'class=\"counter.*' -m1 -A5 $TMPFILE | sed '/\"counter/,+4d;s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//'`
if [ "$BLACKLIST" == "YES" ]; then
        if [ "$AUTOBLACKLIST" != "" ]; then
                BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
                if [ "$BLACK" != "" ]; then
                        ISBLACK=Ja
                fi
        fi
fi
rm $TMPFILE
}

Im Ursprung von mir war unabhängig vom jetzt geänderten sed noch ein Fehler mit der direkte Angabe des Filenamens statt Nutzung der entsprechenden Variablen.

Wünsche Gutes Gelingen!
 
Hallo abw1oim Du bist der beste jetzt läuft das Script wieder wie es soll.

Vielen Dank. :p

MfG Nikon :)
 
Hallo zusammen,

habt ihr bereits bemerkt, dass sich der Seitenaufbau von http://www.dasoertliche.de/ geändert hat? Ich habe sed leicht abgeändert und bei bei mir läuft's.

Code:
NAME=`grep 'class=\"counter c01.*' -m1 $TMPFILE |  sed 's/.*<a .* onMouseOut//;s/<.*$//;s/^.*>//'`
DETAILS=`grep 'class=\"counter c01.*' -m1 $TMPFILE | sed 's/.*<div class=\"strasse\">//;s/<\/.*$//;s/\&nbsp\;/ /g'`

HTH Thomas
 
Hallo praesepe.

Vielen Dank für deine Info, leider funktioniert deine Änderung bei mir nicht.
 
@kasper-ls und andere:

Folgendes sollte funktionieren und ist gegenüber der letzten Fassung nur minimal angepasst:

Code:
NAME=`grep 'class=\"counter.*' -m1 -A1 $TMPFILE |  sed '/\"counter/d;s/<a .* onMouseOut//;s/<.*$//;s/^.*>//'`
DETAILS=`grep 'class=\"counter.*' -m1 [B]-A4[/B] $TMPFILE | sed '/\"counter/,[B]+3d[/B];s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//'`

(Geänderte Stellen gegenüber letzter Fassung fett markiert)

Probier mal, ob das bei Dir auch funktioniert
 
Hallo zusammen,

ich habe das Script auf einer Trixbox mit Asterisk 1.6 installiert.

Auf der Konsole läuft es gut.
Ich bekomme es nur nicht in der extensions.conf ans laufen.

Hat es schon einer hin bekommen oder kann mir helfen?

Hier sollte der Code für das agi rein, nur wie?:

Code:
exten => s,1,GotoIf($["${MOHCLASS}" = ""]?dial)
exten => s,n,SetMusicOnHold(${MOHCLASS})
exten => s,n(dial),AGI(dialparties.agi)
exten => s,n,NoOp(Returned from dialparties with no extensions to call and DIALSTATUS: ${DIALSTATUS})

Edit:

Es geht nun...


Danke
Stefan
 
Zuletzt bearbeitet:
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.