Rückwärtssuche für Norwegen

Status
Für weitere Antworten geschlossen.

Tysker

Neuer User
Mitglied seit
23 Jul 2006
Beiträge
37
Punkte für Reaktionen
0
Punkte
6
Moin!
Die Rückwärtssuche für norwegische Nummern über www.gulesider.no funktioniert zumindestens auf meinem Rechner nicht.

Nehmen wir als Beispiel die Nummer 93895329.
In der Anrufliste wird die Nummer genauso dargestellt, ohne irgendein Prefix (ich wohne in Norwegen!)

Aus dem Debug-Fenster:
Code:
(06.09.09 18:33:23): INFO: Creating Lookup request for +4793895329 using gulesider.no
(06.09.09 18:33:23): INFO: creating thread
(06.09.09 18:33:23): INFO: Begin reverselookup for: 93895329
(06.09.09 18:33:23): INFO: Reverse lookup using: http://www.gulesider.no/gs/categoryList.c?q=093895329
(06.09.09 18:33:25): INFO: Begin processing response from gulesider.no
(06.09.09 18:33:25): WARNING: No match for 093895329 found
(06.09.09 18:33:25): INFO: Saving to file D:\TEXTE\ISP Telecom\Fritz!Box\JFritz\jfritz.phonebook.xml
(06.09.09 18:33:25): INFO: Finished 1 from 1 requests
(06.09.09 18:33:27): INFO: Lookup done!

Speichere ich diese Nummer allerdings in die Zwischenablage und füge sie manell bei www.gulesider.no ein, dann wird dazu ein Name und Adresse gefunden.
Allerdings nicht in "Gule Sider" (Branchenteil), sondern in der Kategorie "Telefonkatalogen".

Ich habe mal versucht, mit dem Windows Editor in der reverselookup.xml bei +47 die Null als Prefix rauszunehmen [prefix=""]. Damit ändert sich zwar die Anzeige im Debug-Fenster entsprechend, allerdings wird auch dann kein Name zu der Nummer gefunden.

Hat jemand eine Idee, wo und wie ich noch dran drehen könnte?
Danke!
 
Hallo,

die Seite hat ihr Aussehen verändert, sodass man nun den Parser anpassen musste. Ich habe das nun anhand der einen Beispielnummer korrigiert. Der Eintrag in der reverselookup.xml muss nun folgendermaßen aussehen:
Code:
	<country code="+47">
		<website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="">
			<entry>
				<name>title=&quot;[^p]*personlige infoside&quot;&gt;([^&lt;]*)&lt;/a&gt;</name>
				<street>&lt;div\s+class=&quot;lead&quot;\s+style=&quot;padding-left: 0px;&quot;>([^,]*),\s+[^&lt;]*&lt;/div&gt;</street>
				<city>&lt;div\s+class=&quot;lead&quot;\s+style=&quot;padding-left: 0px;&quot;>[^,]*,\s+[^\s]*\s([^&lt;]*)&lt;/div&gt;</city>
				<zipcode>&lt;div\s+class=&quot;lead&quot;\s+style=&quot;padding-left: 0px;&quot;>[^,]*,\s+([^\s]*)\s[^&lt;]*&lt;/div&gt;</zipcode>
			</entry>
		</website>
	</country>

Wenn du mir noch mehr Nummern per PN oder Email schickst, kann ich das in meinen Unittest einbauen, und somit automatisch überprüfen lassen, ob die Rückwärtssuche noch für Norwegen funktioniert.

Viele Grüße,
Rob
 
Hei Robot,

ich habe das von Dir alternativ vorgeschlagene Script getestet. Vergeblich. Ein Abgleich mit der Telefonkatalogen-Seite hat freilich gezeigt, das die Seite inzwischen möglicherweise erneut eine Veränderung erfahren hat.

Richtigerweise sollte man wohl auch anstelle der

url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix=""

die

url="http://www.gulesider.no/tk/search.c?q=$NUMBER&amp;x=34&amp;y=12" prefix=""

verwenden, wobei man auf die nachgestellten Parameter &amp;x=34&amp;y=12" wohl auch genauso gut verzichten kann.


Aber auch mit der berichtigten URL habe ich Dein Script in der reverselookup.xml nicht zum Laufen bekommen. Das liegt wohl daran, dass es nicht "personlige infoside", sondern "Personlig infoside" heißt und am Ende der Zeile auch nicht &lt;/a&gt; für </a>, sondern &lt;span&gt; für <span> (gefolgt von einem MER INFO </span>).

Ich habe versucht, das alles zu berücksichtigen und bin für den Namen zu dieser Zeile gekommen:

<name>infoside&quot;&gt;[^\w]{17}([^&lt;]*)[^\w]{17}&lt;span&gt;</name>

Wenn man das mit einer zufällig aus dem Internet abgerufenen Telefonnummer - 55363880 - testet, indem man diese Nummer manuell auf der http://www.gulesider.no eingibt oder direkt in die obenstehende url einbaut: http://www.gulesider.no/tk/search.c?q=55363880 dann erhält man als Quellcode:

<a href="/telefonkatalogen/S****_H****/0000303789300000000/?q=55363880" title="S*** H**** - Personlig infoside">
S*** H****
<span>MER INFO</span>

(Sternchen * durch mich gesetzt)

Wenn ich diesen Text auf der http://www.regexe.de/ mit meinem Suchstring infoside&quot;&gt;[^\w]{17}([^&lt;]*)[^\w]{17}&lt;span&gt; abgleiche, dann erhalte ich unter "1.1. Gruppe:" genau den gesuchten Namen S*** H****

Ebenso möglich wäre wohl der Code infoside&quot;&gt;[^\w]*([^&lt;]*)[^\w]*&lt;span&gt;

Aber: Jscript weigert sich beharrlich. Ich habe inzwischen bestimmt vier Stunden damit zugebracht, mich in die Materie der Regexe einzuarbeiten und per Trial and Error gefühlt eine Million Kombinationsvarianten ausprobiert - zwecklos.

Hat JScript an dieser Stelle einfach ein Bug? Oder ist die gulesider.no so gestaltet, dass es nicht gelingen kann, den gesuchten Text auszulesen?

Vielleicht hat jemand noch eine Idee. Ich gebe an dieser Stelle einfach auf. Der Vollstänidgkeit halber noch das ganze Code-Schnipsel:

<country code="+47">
<website name="gulesider.no" url="http://www.gulesider.no/tk/search.c?q=$NUMBER&amp;x=34&amp;y=12" prefix="">
<entry>
<name>infoside&quot;&gt;[^\w]{17}([^&lt;]*)[^\w]{17}&lt;span&gt;</name>
<street>()</street>
<city>()</city>
<zipcode>()</zipcode>
</entry>
</website>
</country>

Wie man sieht, habe ich auf das Auslesen der weiteren Adressdaten zunächst verzichtet. Da die Schreibweise () unter Zipcode, etc. weiter unten in der reverselookup.xml auch vorkommt, gehe ich davon aus, dass das unschädlich ist. Ich hoffe nicht, dass das Programm auch noch für die weiteren drei Felder eine Angabe voraussetzt, da die Suche nach der richtigen Notierung sonst ja zu einer Lebensaufgabe würde....

Ach ja: in der Debug.log steht als Eintrag "No match for 55363880 found" - grds funktioniert als der Seitenabruf - nur der String wird partout nicht identifiziert....

Viele Grüße

pyramus
 
Also falls es jemand interessiert:

JScript hat mit an Sicherheit grenzender Wahrscheinlichkeit einen Bug in Bezug auf das Auslesen von Zeichenketten mittels Regex. Das Problem tritt immer dann auf, wenn sich der gesuchte Zeichenausdruck über mehrere Zeilen hinweg im durchsuchten Ausdruck erstreckt.

Bei telefonkatalogen.no respektive gulesider.no ist genau das der Fall. Telefonkatalogen.no gibt für den Namen zu einer gesuchten Telefonnummer zurück:

title="Max Mustermann - Personlig infoside">
________________ Max Mustermann
________________ <span>MER INFO</span>

Richtig wäre es in diesem Fall, den Ausdruck ab "Personlig infoside" bis zu "<span>MER INFO" auszulesen. Ohne den Zeilenumbruch würde das JScript sicher auch schaffen. Aber an irgendeiner Stelle wurde da wohl etwas unsauber programmiert, so dass der Umbruch zu einer unüberwindlichen Hürde für den interpreter wird.

Ich bin mir ziemlich sicher, dass es nicht an meinen - zweifelsohne begrenzten - Programmierkünsten liegt, weil ich mich inzwischen recht intensiv mit Regexen auseinander gesetzt habe, weil ich bestimmt mindestens 10 Dutzend möglicher Codevarianten ausprobiert habe, vor allem jedoch, weil ich die Codes auch mit http://www.regexe.de/ validieren konnte. Nur JScript weigert sich beharrlich die validen Codes umzusetzen.

Zum Beispiel müßte folgender Code für den Namen funktionieren:

(?m)infoside&quot;&gt;[\s]*([\w ]*)[\s]*&lt;span&gt;

also muss es in der reverselookup.xml entsprechend lauten:

<name>(?m)infoside&quot;&gt;[\s]*([\w ]*)[\s]*&lt;span&gt;</name>

Das (?m) für multiline könnte man dabei auch weglassen, oder auch ausschalten (?-m) - es würde alles nichts nützen. Selbst wenn man den Zielnamen selbst direkt vorgeben würde, in etwa also:

(?m)(Max Mustermann)\W*&lt;span&gt;

käme man nicht an's Ziel. Das "span" in der nächsten Zeile findet JScript aus irgendeinem Grunde nicht mehr. Auch Versuche mit /n oder /r oder /r/n oder mit (Max Mustermann)$ helfen hier nicht weiter.

Es ist trotzdem möglich, den telefonkatalogen behelfsmäßig auszulesen, denn der Name steht nicht nur zwischen den Tags, sondern auch noch einmal im HTML-Tag title selbst. Auch die Adresse bekommt man heraus, was allerdings schon wirklich gewagt ist, weil man als Anhaltspunkt nur <p> (Adresse) </p> verwenden kann. Das funktioniert nur deswegen, weil die Kombination <p> string </p> erstaunlicherweise nur einmal innerhalb einer Zeile in den 1.000 Zeilen der Ausgabe vorkommt.

Wen es also interessiert, hier der Schnipsel zum Auslesen norwegischer Telefonbücher:

<country code="+47">
<website name="nettkatalogen.no" url="http://www.nettkatalogen.no/default.asp?search=$NUMBER&amp;cmd=psok" prefix="">
<entry>
<name>class='privatsok_oppforing_navn' valign=top&gt;&lt;b&gt;([^&lt;]*)&lt;/b&gt; &lt;span OnClick</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="gulesider.no" url="http://www.gulesider.no/tk/search.c?q=$NUMBER" prefix="">
<entry>
<name>title=&quot;([^_]*)- Personlig</name>
<street>&lt;p&gt;([^,]*),.*&lt;/p&gt;</street>
<city>&lt;p&gt;.*, (?:\d*) ([^&lt;]*)&lt;/p&gt;</city>
<zipcode>&lt;p&gt;.*, (\d*) (?:[^&lt;]*)&lt;/p&gt;</zipcode>
</entry>
</website>
</country>

Wie man sehen kann, habe ich auch noch ein weiteres Nachschlagewerk aufgenommen, das sich deutlich leichter und zuverlässiger auslesen läßt - den Nettkatalogen.no.

Viele Grüße an alle

pyramus

P.S.:
Sollte wider Erwarten doch ein Auslesen über mehrere Zeilen mit JScript möglich sein, würde ich mich über entsprechenden Hinweis freuen.
 
Status
Für weitere Antworten geschlossen.

Zurzeit aktive Besucher

Keine Mitglieder online.

Neueste Beiträge

Statistik des Forums

Themen
246,273
Beiträge
2,249,292
Mitglieder
373,862
Neuestes Mitglied
904lte
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.