[v0.7.4.1] [Feature] Rückwärtssuche Norwegen ausbauen

Status
Für weitere Antworten geschlossen.

pyramus2000

Neuer User
Mitglied seit
7 Nov 2009
Beiträge
41
Punkte für Reaktionen
0
Punkte
0
Hi Rob,

nachstehend kleiner Beitrag von mir für Dein Programm zur Rückwärtssuche für Norwegen. Ich habe den Code etwas optimiert bzw. die Suche etwas ausgebaut. Vielleicht magst Du die Erweiterung auch für das nächste Upgrade aufnehmen? Ansonsten kann sie ja sicher auch jeder selbst in der reverselookup.xml implementieren, der mag / Bedarf hat. Die Suchmaschinen-Datenbanken sind übrigens nicht redundant, d.h. es gibt tatsächlich Nummern, die jeweils nur in einer Suchmaschine gefunden werden und es gibt keine, die alle Nummern kennt.

Gibt es eigentlich eine Möglichkeit, die richtigen Regex-Expressionen programmgestützt ermitteln zu lassen? Das manuelle Gepfriemele ist schon sehr aufwendig, wenn auch die Qualität sicher etwas besser wird.

Hast Du die Rückwärtssuchen in der reverselookup alle manuell selbst entwickelt???

Problem ist zudem sicher auch, dass das Format der Anbieter immer mal wieder geändert wird...

Nochmals Danke und viele Grüße!

pyramus

==============================================
=== Kopieren und in den Abschnitt <country code="+47"> einfügen ===
==============================================
Code:
	<country code="+47">

		<website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="" numLines="7">
			<entry>
				<name swapFirstAndLastName="true">&lt;h2 class=&quot;name&quot;&gt;\s*&lt;a href=&quot;[^&quot;]*&quot;\s*title=&quot;[^&quot;]*&quot;&gt;\s*([^&lt;]*)\s*&lt;span&gt;\s*[^&lt;]*&lt;/span&gt;\s*&lt;/a&gt;\s*&lt;/h2&gt;</name>
				<street>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;([^,]*),\s*[^\s]*\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;</street>
				<city>\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[^,]*,\s*[^\s]*\s([^&lt;]*)&lt;/p&gt;\s*&lt;/div&gt;|\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[\d]*\s*([^&lt;]*)&lt;/p&gt;</city>
				<zipcode>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[^,]*,\s*([\d]*)\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;|&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;([\d]*)\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;</zipcode>
			</entry>
		</website>

		<website name="nettkatalogen.no" url="http://www.nettkatalogen.no/default.asp?search=$NUMBER&amp;x=36&amp;y=15&amp;cmd=psok" prefix="">
			<entry>
				<name swapFirstAndLastName="true">class='privatsok_oppforing_navn'[\s]valign=top&gt;&lt;b&gt;([^&lt;]*)&lt;/b&gt;</name>
				<street>class='privat_adresse_link'&gt;([^&lt;]*)&lt;/a&gt;</street>
				<city>&lt;/a&gt;, \d* ([^&lt;]*)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</city>
				<zipcode>&lt;/a&gt;, (\d*) [^&lt;]*&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</zipcode>
			</entry>
		</website>

		<website name="nettkatalogen.no/bransjelist" url="http://www.nettkatalogen.no/bransjelist/$NUMBER/1.htm" prefix="">
			<entry>
				<name>class='firmasok_oppforing_link'&gt;&lt;b&gt;([^&lt;]*)&lt;/b&gt;</name>
				<street>&lt;div class='firmasok_oppforing_adresse'&gt;([^,^&lt;]*).*&lt;/div&gt;</street>
				<city>&lt;div class='firmasok_oppforing_adresse'&gt;[^,]*,[\s][\d]*[\s]([^&lt;]*)&lt;/div&gt;</city>
				<zipcode>'firmasok_oppforing_adresse'&gt;[^,]*,[\s](\d*)[\s]</zipcode>
			</entry>
		</website>

		<website name="gul.no" url="http://gul.no/?q=$NUMBER&amp;PageView=YellowResult" prefix="">
			<entry>
				<name swapFirstAndLastName="true">&lt;a id=&quot;ancCompanyName&quot;[^&gt;]*&gt;([^&lt;]*)&lt;/a&gt;</name>
				<street>class=&quot;sr_showaddress&quot;&gt;([^&lt;]*)&lt;</street>
				<city>class=&quot;sr_showaddress&quot;&gt;[^&gt;]*&gt;[\d]*([^&lt;]*)&lt;</city>
				<zipcode>class=&quot;sr_showaddress&quot;&gt;[^&gt;]*&gt;([\d]*)[\s]</zipcode>
			</entry>
		</website>

	</country>
 
Zuletzt bearbeitet von einem Moderator:
Gibt es eigentlich eine Möglichkeit, die richtigen Regex-Expressionen programmgestützt ermitteln zu lassen? Das manuelle Gepfriemele ist schon sehr aufwendig, wenn auch die Qualität sicher etwas besser wird.
Mir ist keines bekannt. Mache das auch immer manuell.

Hast Du die Rückwärtssuchen in der reverselookup alle manuell selbst entwickelt???
Nein, hab ich glücklicherweise nicht. Wir haben erst ein paar Anbieter unterstützt und leider ist es mir entfallen, wer dann die ganzen anderen beigesteuert hat. Derzeit pflege ich auch "nur" 10 Länder. Deutschland, Frankreich, Italien, Luxemburg, Niederlande, Norwegen, Österreich, Schweden, Schweiz und USA. Dafür habe ich einige Testrufnummern, die ich automatisch prüfen lasse.

Problem ist zudem sicher auch, dass das Format der Anbieter immer mal wieder geändert wird...
Ja, das passiert leider sehr oft und dann geht auch die Rückwärtssuche nicht mehr. Da muss ich dann leider jedes Mal manuell ran und es wieder reparieren. Hatte ja die Hoffnung, dass die Community mir dies abnehmen könnte, aber bisher bist du erst der vierte, der mir dabei hilft :)

Dann baue ich mal deine Änderungen ein und schaue, ob meine Tests dann immer noch laufen. Vielen Dank für deine Hilfe.

Edit: Falls du noch ein paar Beispielrufnummern hast, könnte ich sie in meinen Test einbauen und damit die Rückwärtssuche für Norwegen besser absichern. Hab da bisher nur 2 Nummern. Und ich habe mal deinen Code in code-Tags gepackt, ist dann besser lesbar und verschwendet nicht so viel Platz.

Hab noch nen kleinen Fehler in der Suche für gulesider.no gefunden:
Code:
				<city>\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[^,]*,\s*[^\s]*\s([^&lt;]*)&lt;/p&gt;\s*&lt;/div&gt;|\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[\d]+\s*([^&lt;]*)&lt;/p&gt;</city>
In der zweiten Bedingung, die du mit OR verknüpft hast, matched das [\d]* zu oft und setzt damit die Stadt auf den Leerstring. Ich habe daraus ein [\d]+ gemacht und schon funktioniert das besser.
 
Zuletzt bearbeitet:
Hei Rob,

Danke für die schnelle Prüfung des Codes! Dass Dir das gleich aufgefallen ist! Ich hab *viele* Stunden gebraucht, um die Codes zu optimieren bzw. zu schreiben! Den verbliebenen Fehler habe ich trotz aller Tests am Ende dann doch nicht mehr gesehen. Irgendwann wird man natürlich auch "blind"...

Die gulesider-Seite ist allerdings mE auch schlecht programmiert bzw. schlecht für das Auslesen geeignet, weil dort die Trennung der Strings zum Teil nur durch ein Komma stattfindet. Das funktioniert - solange beide String-Paare vorhanden sind und damit durch ein Komma getrennt sind. Es gibt aber auch Einträge, bei denen nur PLZ und Ort oder sogar nur die Straße vermerkt ist. Ohne Komma läuft dann das Script im Original ins Leere. Daher meine komplizierte neue "|" - Notierung mit zwei Varianten.

Wahrscheinlich würde man aus diesem Grunde ohnehin die gulesider besser eher an's Ende der Abfrage-Reihenfolge stellen und mit netkatalogen.no anfangen...

Wahnsinn, dass Du die Abfragen zum Großteil selbst betreust und manuell anpaßt... Das müssen viele, *viele* Tage Arbeit allein für die reverselookup.xml sein...

Mich wundert's nicht, dass sich die "Community" bisher da wenig eingebracht hat. Von HTML / XM werden einige noch Ahnung haben. Bei Regex wird es da aber wohl dünn. Ich mußte mich auch erst einlesen und habe selbst nach einigen Stunden nur einen kleinen Teil verstanden. Vor allem ist es aber extrem fummelig, mühsam und bisweilen frustierend, weil man nicht sehen kann, was im Hintergrund passiert und warum die Abfrage oft nicht funktioniert.

Vielleicht würde es helfen, wenn Du ein kleines How-to einstellen würdest mit ein Paar Beispielsfragmenten des Quelltextes des Infoproviders und der Regex-Übersetzung... Wenn jemand sich das mittels Wiki beibringen muss, ist es dagegen extrem hart (auch wenn die Wiki-Seite an sich gut ist).... Macht natürlich auch erst wieder Arbeit und wer weiß, wie viele sich motiviert fühlen dann ein Paar Stunden Arbeit zu investieren... Ein fertiges Script ist doch einfacher und lebenszeitökonomischer ;-)

Viele Grüße

pyramus
 
[v0.7.4.1] [Feature][TIP] Rückwärtssuche Belgien

Die aktuelle Rückwärtssuche mit "gebeld.nl" funktioniert (bei mir) für Belgien nicht - dafür "http://www.infobel.com/fr/belgium/inverse.aspx?qPhone=$NUMBER", mit denselben Parametern wie die anderen Infobel-Abfragen.
 
Hei GG,

Danke für den Tipp! Ich habe über infobel diese Suchmaschine für Norwegen gefunden, die ich noch nicht kannte: http://www.1881.no

Diese ist in Vollständigkeit die absolut beste, habe ich den Eindruck. Nicht nur erkannte sie alle Nummern, die ansonsten nur durch die Kombination aus den anderen vier Suchmaschinen identifiziert wurden, sondern auch eine Nummer, die keine der anderen Datenbanken auflösen konnte....

Leider sind die Rückgabewerte wie bei gulesider nicht sauber getrennt, sondern nur durch Kommata (die manchmal auch fehlen, wenn nur Straße oder Ort angegeben sind). Das erfodert extrem komplexe Regex-Ausdrücke, wenn man einigermaßen sicher gehen will, dass immer alles im richtigen Feld landet... Meine Regex-Kenntnisse übersteigt das für alle Bedingungen etwas....

Mal gucken

Viele Grüße

pyramus
 
Danke gg7. Werde das gleich mal bei mir einbauen. Hast du eventuell ein paar belgische Beispielrufnummern? Dann kann ich sie in meine Testumgebung einbauen und somit immer auf dem Laufenden bleiben, wenn sich etwas bei der Seite ändern sollte.

@pyramus2000:
Bin auch kein regex-Gott, aber vielleicht können wir es ja gemeinsam schaffen. Kannst du mir deine bisherigen Bemühungen diesbezüglich mal zuschicken?
 
025156111, 022824770, 032052011, 061275331 - reicht das zum testen?
 
Jap, reicht. Vielen Dank!
 
Hallo Rob,

nachstehend der Regex-Code zum Auslesen der Daten auch von www.1881.no.

Das scheint mir in puncto Vollständigkeit die beste Telefoon-Suchmaschine für Norwegen zu sein - sowohl für den gewerblichen als auch privaten Bereich.

Vielleicht magst Du den Code aufnehmen für das nächste Update. Er ist recht komplex, da ich versucht habe, die meisten vorkommenden Varianten zu berücksichtigen - Ergebnis mit / ohne Komma, nur mir Straße und HNr, nur mit PLZ und Ort. Alles kann man nicht berücksichtigen. Es gibt auch Einträge mit zwei Kommata und auch solche, bei denen der Zusatz zur Postbox nach dem Komma und damit vor der PLZ steht... Aber so wie die erste Abfrage jetzt aussieht, sollte das für die meisten Fälle ein gutes Ergebnis liefern.

Die weiteren Abfragen mit Kommaseparatoren als Trennmerkmal für Straße und Ort, sollten sicher auch entsprechend angepasst werden. Aber da die Abfragen auch so schon recht brauchbar sind und in den meisten Fällen ohnehin schon die erste Abfrage über 1881 ein Ergebnis liefern wird, habe ich mir die Mühe erspart.

Rob, Du solltest wirklich mal ein kleines How-to einstellen. Beinähe hätte ich das Ganze hingeworfen. Ich habe drei Stunden herumprobiert, bis ich entdeckte, dass auch bei 1881.no der Zusatz "numline=7" für die Abfrage erforderlich ist! Ohne diesen Zusatz geht gar nichts. Ich weiß bis jetzt nicht, was der bedeutet. Es iist reiner Zufall, dass ich das aus einer der anderen Abfragen übernommen habe...

Viele Grüße

pyramus

======================================





Code:
	<country code="+47">

		<website name="1881.no" url="http://www.1881.no/?Query=$NUMBER&amp;qt=8" prefix="" numLines="7">
			<entry>
				<name swapFirstAndLastName="true">&gt;([^&lt;]*)&lt;/a&gt;&lt;/h3&gt;[\s]*&lt;div[\s]class=&quot;contact_info&quot;&gt;</name>
				<street>&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;([^,]*),[^&lt;]*&lt;/span&gt;|&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;(\D+\s*\d+)*&lt;/span&gt;</street>
				<city>&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;[^,]*,[\s]*([^&lt;]*)[\d]{4}[\s]*([^&lt;]*)&lt;/span&gt;|&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;([^&lt;]*)[\d]{4}\s*([^&lt;]+)&lt;/span&gt;</city>
				<zipcode>&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;[^,]*,[\s]*[^&lt;]*([\d]{4})[\s]+[^&lt;]*&lt;/span&gt;|&lt;div class=&quot;contact_info&quot;&gt;&lt;p class=&quot;dots&quot;&gt;&lt;span&gt;[\s]*[^&lt;]*([\d]{4})[\s]+[^&lt;]*&lt;/span&gt;</zipcode>
			</entry>
		</website>


		<website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="" numLines="7">
			<entry>
				<name swapFirstAndLastName="true">&lt;h2 class=&quot;name&quot;&gt;\s*&lt;a href=&quot;[^&quot;]*&quot;\s*title=&quot;[^&quot;]*&quot;&gt;\s*([^&lt;]*)\s*&lt;span&gt;\s*[^&lt;]*&lt;/span&gt;\s*&lt;/a&gt;\s*&lt;/h2&gt;</name>
				<street>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;([^,]*),\s*[^\s]*\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;</street>
				<city>\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[^,]*,\s*[^\s]*\s([^&lt;]*)&lt;/p&gt;\s*&lt;/div&gt;|\s*&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[\d]+\s*([^&lt;]*)&lt;/p&gt;</city>
				<zipcode>&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;[^,]*,\s*([\d]*)\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;|&lt;div class=&quot;address&quot;&gt;\s*&lt;p&gt;([\d]*)\s[^&lt;]*&lt;/p&gt;\s*&lt;/div&gt;</zipcode>
			</entry>
		</website>

		<website name="nettkatalogen.no" url="http://www.nettkatalogen.no/default.asp?search=$NUMBER&amp;x=36&amp;y=15&amp;cmd=psok" prefix="">
			<entry>
				<name swapFirstAndLastName="true">class='privatsok_oppforing_navn'[\s]valign=top&gt;&lt;b&gt;([^&lt;]*)&lt;/b&gt;</name>
				<street>class='privat_adresse_link'&gt;([^&lt;]*)&lt;/a&gt;</street>
				<city>&lt;/a&gt;, \d* ([^&lt;]*)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</city>
				<zipcode>&lt;/a&gt;, (\d*) [^&lt;]*&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</zipcode>
			</entry>
		</website>

		<website name="nettkatalogen.no/bransjelist" url="http://www.nettkatalogen.no/bransjelist/$NUMBER/1.htm" prefix="">
			<entry>
				<name>class='firmasok_oppforing_link'&gt;&lt;b&gt;([^&lt;]*)&lt;/b&gt;</name>
				<street>&lt;div class='firmasok_oppforing_adresse'&gt;([^,^&lt;]*).*&lt;/div&gt;</street>
				<city>&lt;div class='firmasok_oppforing_adresse'&gt;[^,]*,[\s][\d]*[\s]([^&lt;]*)&lt;/div&gt;</city>
				<zipcode>'firmasok_oppforing_adresse'&gt;[^,]*,[\s](\d*)[\s]</zipcode>
			</entry>
		</website>

		<website name="gul.no" url="http://gul.no/?q=$NUMBER&amp;PageView=YellowResult" prefix="">
			<entry>
				<name swapFirstAndLastName="true">&lt;a id=&quot;ancCompanyName&quot;[^&gt;]*&gt;([^&lt;]*)&lt;/a&gt;</name>
				<street>class=&quot;sr_showaddress&quot;&gt;([^&lt;]*)&lt;</street>
				<city>class=&quot;sr_showaddress&quot;&gt;[^&gt;]*&gt;[\d]*([^&lt;]*)&lt;</city>
				<zipcode>class=&quot;sr_showaddress&quot;&gt;[^&gt;]*&gt;([\d]*)[\s]</zipcode>
			</entry>
		</website>

	</country>
 
Mal so als Starthilfe für ein mögliches How-To :))))

Wer sich an der Regex-Optimierung für JFritz versucht, sollte mE folgenden Einstieg wählen. Die neue URL und Bezeichnung eintragen unter <website name=...>

Darunter nur ein Tag-Paar, nämlich

<name>(.)</name>

Alles andere (<street><city>... erst einmal löschen. Mit diesem Ansatz läßt sich ersehen, ob überhaupt etwas eingelesen wird von der Suchmaschinen-Seite. (.) "frisst" ja fast alles, so dass im Telefonbuch von Fritz nach einem Test der Header der Suchmaschinenseite unter Name und Vorname stehen sollte...
Wenn da nichts steht, dann stimmt schon der Aufruf der URL nicht....
Man erspart sich mit diesem Ansatz stundenlanges Basteln am Regex selbst, obwohl der Fehler ganz woanders liegt...
 
Status
Für weitere Antworten geschlossen.
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.