def out(number, caller):
debug("[nrzuname] out: %s: %s" %(number, caller))
- if not caller:
+ found = re.match("NA: ([^;]*);VN: ([^;]*);STR: ([^;]*);HNR: ([^;]*);PLZ: ([^;]*);ORT: ([^;]*)", caller)
+ if not found:
return
- name = vorname = strasse = hnr = plz = ort = ""
- lines = caller.split(', ')
- found = re.match("(.+?)\s+(.+)", lines[0])
- if found:
- name = found.group(1)
- vorname = found.group(2)
- else:
- name = lines[0]
-
- if len(lines) > 1:
- if len(lines) > 2: # this means, we have street and city
- found = re.match("^(.+) ([-\d]+)$", lines[1], re.S)
- if found:
- strasse = found.group(1)
- hnr = found.group(2)
- else:
- found = re.match("^(\d+) (.+)$", lines[1], re.S)
- if found:
- strasse = found.group(2)
- hnr = found.group(1)
- else:
- strasse = lines[1]
- for i in range(2, len(lines)):
- found = re.match("(\S+)\s+(.+)", lines[i], re.S)
- if found and re.search('\d', found.group(1)):
- plz = found.group(1)
- ort = found.group(2)
- break
- else: # only two lines, the second must be the city...
- ort = lines[1].strip()
- print "NA: %s;VN: %s;STR: %s;HNR: %s;PLZ: %s;ORT: %s" %( name,vorname,strasse,hnr,plz,ort )
-
-def simpleout(number, caller):
+ ( name,vorname,strasse,hnr,plz,ort ) = (found.group(1),
+ found.group(2),
+ found.group(3),
+ found.group(4),
+ found.group(5),
+ found.group(6)
+ )
+ if vorname: name += ' ' + vorname
+ if strasse or hnr or plz or ort: name += ', '
+ if strasse: name += strasse
+ if hnr: name += ' ' + hnr
+ if (strasse or hnr) and (plz or ort): name += ', '
+ if plz and ort: name += plz + ' ' + ort
+ elif plz: name += plz
+ elif ort: name += ort
+
+ print(name)
+
+def simpleout(number, caller): #@UnusedVariable
print caller
try:
def _gotPage(self, page):
def cleanName(text):
- item = text.replace(" "," ").replace("</b>","").replace(","," ").replace('\n',' ').replace('\t',' ')
- try:
- item = html2unicode(item).decode('iso-8859-1')
- # item = html2unicode(item)
- newitem = item.replace(" ", " ")
- while newitem != item:
- item = newitem
- newitem = item.replace(" ", " ")
- return newitem.strip()
+ item = text.replace("%20"," ").replace(" "," ").replace("</b>","").replace(","," ").replace('\n',' ').replace('\t',' ')
+
+ item = html2unicode(item)
+ try: # this works under Windows
+ item = item.decode('iso-8859-1')
except:
- debug("[ReverseLookupAndNotifier] cleanName: " + traceback.format_exc())
- return item
+ try: # this works under Enigma2
+ item = item.decode('utf-8')
+ except:
+ try: # fall back
+ item = item.decode(self.charset)
+ except:
+ # debug("[ReverseLookupAndNotifier] cleanName: " + traceback.format_exc())
+ debug("[ReverseLookupAndNotifier] cleanName: encoding problem")
+
+ newitem = item.replace(" ", " ")
+ while newitem != item:
+ item = newitem
+ newitem = item.replace(" ", " ")
+ return newitem.strip()
debug("[ReverseLookupAndNotifier] _gotPage")
found = re.match('.*<meta http-equiv="Content-Type" content="(?:application/xhtml\+xml|text/html); charset=([^"]+)" />',page, re.S)
continue
# look for <firstname> and <lastname> match, if not there look for <name>, if not there break
- lastname = ''
+ name = ''
firstname = ''
+ street = ''
+ streetno = ''
+ city = ''
+ zipcode = ''
pat = self.getPattern(entry, "lastname")
if pat:
pat = ".*?" + pat
found = re.match(pat, page, re.S|re.M)
if found:
debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "lastname", found.group(1)))
- lastname = cleanName(found.group(1))
+ name = cleanName(found.group(1))
pat = self.getPattern(entry, "firstname")
if pat:
found = re.match(pat, page, re.S|re.M)
if found:
debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "firstname", found.group(1)))
- firstname = cleanName(found.group(1))
+ firstname = cleanName(found.group(1)).strip()
- if firstname:
- name = lastname + ' ' + firstname
- else:
- name = lastname
else:
pat = ".*?" + self.getPattern(entry, "name")
debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "name", pat ))
if found:
debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "name", found.group(1)))
item = cleanName(found.group(1))
- debug("[ReverseLookupAndNotifier] _gotPage: name: " + item)
- name = item
+ # debug("[ReverseLookupAndNotifier] _gotPage: name: " + item)
+ name = item.strip()
+ firstNameFirst = entry.getElementsByTagName('name')[0].getAttribute('swapFirstAndLastName')
+ # debug("[ReverseLookupAndNotifier] _gotPage: swapFirstAndLastName: " + firstNameFirst)
+ if firstNameFirst == 'true': # that means, the name is of the form "firstname lastname"
+ found = re.match('(.*?)\s+(.*)', name)
+ if found:
+ firstname = found.group(1)
+ name = found.group(2)
else:
debug("[ReverseLookupAndNotifier] _gotPage: no name found, skipping")
continue
- address = ""
- if name:
- pat = ".*?" + self.getPattern(entry, "city")
- debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "city", pat ))
- found = re.match(pat, page, re.S|re.M)
- if found:
- debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "city", found.group(1)))
- item = cleanName(found.group(1))
- debug("[ReverseLookupAndNotifier] _gotPage: city: " + item)
- address = item.strip()
-
- pat = ".*?" + self.getPattern(entry, "zipcode")
- debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "zipcode", pat ))
- found = re.match(pat, page, re.S|re.M)
- if found and found.group(1):
- debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "zipcode", found.group(1)))
- item = cleanName(found.group(1))
- debug("[ReverseLookupAndNotifier] _gotPage: zipcode: " + item)
- address = item.strip() + ' ' + address
-
- pat = ".*?" + self.getPattern(entry, "street")
- debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "street", pat ))
- found = re.match(pat, page, re.S|re.M)
- if found and found.group(1):
- debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "street", found.group(1)))
- item = cleanName(found.group(1))
- debug("[ReverseLookupAndNotifier] _gotPage: street: " + item)
- address = item.strip() + ', ' + address
-
- if address:
- debug("[ReverseLookupAndNotifier] _gotPage: Reverse lookup succeeded:\nName: %s\nAddress: %s" %(name, address))
- self.caller = "%s, %s" %(name, address)
- else:
- debug("[ReverseLookupAndNotifier] _gotPage: Reverse lookup succeeded:\nName: %s" %(name))
- self.caller = name
+ if not name:
+ continue
- self.notifyAndReset()
- return True
- else:
+ pat = ".*?" + self.getPattern(entry, "city")
+ debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "city", pat ))
+ found = re.match(pat, page, re.S|re.M)
+ if found:
+ debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "city", found.group(1)))
+ item = cleanName(found.group(1))
+ debug("[ReverseLookupAndNotifier] _gotPage: city: " + item)
+ city = item.strip()
+
+ if not city:
continue
+
+ pat = ".*?" + self.getPattern(entry, "zipcode")
+ debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "zipcode", pat ))
+ found = re.match(pat, page, re.S|re.M)
+ if found and found.group(1):
+ debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "zipcode", found.group(1)))
+ item = cleanName(found.group(1))
+ debug("[ReverseLookupAndNotifier] _gotPage: zipcode: " + item)
+ zipcode = item.strip()
+
+ pat = ".*?" + self.getPattern(entry, "street")
+ debug("[ReverseLookupAndNotifier] _gotPage: look for '''%s''' with '''%s'''" %( "street", pat ))
+ found = re.match(pat, page, re.S|re.M)
+ if found and found.group(1):
+ debug("[ReverseLookupAndNotifier] _gotPage: found for '''%s''': '''%s'''" %( "street", found.group(1)))
+ item = cleanName(found.group(1))
+ debug("[ReverseLookupAndNotifier] _gotPage: street: " + item)
+ street = item.strip()
+ streetno = ''
+ found = re.match("^(.+) ([-\d]+)$", street, re.S)
+ if found:
+ street = found.group(1)
+ streetno= found.group(2)
+ #===============================================================
+ # else:
+ # found = re.match("^(\d+) (.+)$", street, re.S)
+ # if found:
+ # street = found.group(2)
+ # streetno = found.group(1)
+ #===============================================================
+
+ self.caller = "NA: %s;VN: %s;STR: %s;HNR: %s;PLZ: %s;ORT: %s" %( name,firstname,street,streetno,zipcode,city )
+ debug("[ReverseLookupAndNotifier] _gotPage: Reverse lookup succeeded:\nName: %s" %(self.caller))
+
+ self.notifyAndReset()
+ return True
else:
self._gotError("[ReverseLookupAndNotifier] _gotPage: Nothing found at %s" %self.currentWebsite.getAttribute("name"))
return False
cwd = os.path.dirname(sys.argv[0])
if (len(sys.argv) == 2):
# nrzuname.py Nummer
- ReverseLookupAndNotifier(sys.argv[1])
+ ReverseLookupAndNotifier(sys.argv[1], simpleout)
reactor.run() #@UndefinedVariable
elif (len(sys.argv) == 3):
# nrzuname.py Nummer Charset
setDebug(False)
- ReverseLookupAndNotifier(sys.argv[1], simpleout, sys.argv[2])
+ ReverseLookupAndNotifier(sys.argv[1], out, sys.argv[2])
reactor.run() #@UndefinedVariable
from Components.Button import Button
from Components.Pixmap import Pixmap
from Components.config import config, ConfigSubsection, ConfigSelection, ConfigEnableDisable, getConfigListEntry, ConfigText, ConfigInteger
+from Components.ConfigList import ConfigListScreen
+from Components.Harddisk import harddiskmanager
try:
from Components.config import ConfigPassword
except ImportError:
ConfigPassword = ConfigText
-from Components.ConfigList import ConfigListScreen
-from Components.Harddisk import harddiskmanager
from Plugins.Plugin import PluginDescriptor
from Tools import Notifications
from Tools.NumericalTextInput import NumericalTextInput
-from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_CONFIG, SCOPE_MEDIA
from Tools.LoadPixmap import LoadPixmap
from twisted.internet import reactor #@UnresolvedImport
config.plugins.FritzCall.prefix.setUseableChars('0123456789')
config.plugins.FritzCall.fullscreen = ConfigEnableDisable(default=False)
-mountedDevs= [("/etc/enigma2", _("Flash"))]
-if os.path.isdir("/media/cf"):
- mountedDevs.append(("/media/cf", _("Compact Flash")))
-if os.path.isdir("/media/usb"):
- mountedDevs.append(("/media/usb", _("USB Device")))
+mountedDevs= [(resolveFilename(SCOPE_CONFIG), _("Flash") + " (" + resolveFilename(SCOPE_CONFIG) + ")")]
+if os.path.isdir(resolveFilename(SCOPE_MEDIA, "cf")):
+ mountedDevs.append((resolveFilename(SCOPE_MEDIA, "cf"), _("Compact Flash") + " (" + resolveFilename(SCOPE_MEDIA, "cf") + ")"))
+if os.path.isdir(resolveFilename(SCOPE_MEDIA, "usb")):
+ mountedDevs.append((resolveFilename(SCOPE_MEDIA, "usb"), _("USB Device") + " (" + resolveFilename(SCOPE_MEDIA, "usb") + ")"))
for p in harddiskmanager.getMountedPartitions(True):
mp = p.mountpoint[:-1]
if p.description:
return '[' + avon[normNumber[:i]].strip() + ']'
return ""
+def handleReverseLookupResult(name):
+ found = re.match("NA: ([^;]*);VN: ([^;]*);STR: ([^;]*);HNR: ([^;]*);PLZ: ([^;]*);ORT: ([^;]*)", name)
+ if found:
+ ( name,firstname,street,streetno,zipcode,city ) = (found.group(1),
+ found.group(2),
+ found.group(3),
+ found.group(4),
+ found.group(5),
+ found.group(6)
+ )
+ if firstname: name += ' ' + firstname
+ if street or streetno or zipcode or city: name += ', '
+ if street: name += street
+ if streetno: name += ' ' + streetno
+ if (street or streetno) and (zipcode or city): name += ', '
+ if zipcode and city: name += zipcode + ' ' + city
+ elif zipcode: name += zipcode
+ elif city: name += city
+ return name
+
from xml.dom.minidom import parse
cbcInfos = {}
def initCbC():
self._callScreen.updateStatus(_("preparing"))
parms = urlencode({'getpage':'../html/de/menus/menu2.html', 'var:lang':'de', 'var:pagename':'foncalls', 'var:menu':'fon', 'sid':self._md5Sid})
url = "http://%s/cgi-bin/webcm?%s" % (config.plugins.FritzCall.hostname.value, parms)
- getPage(url).addCallback(lambda x:self._getCalls1(callback)).addErrback(self._errorCalls)
+ getPage(url).addCallback(lambda x:self._getCalls1(callback)).addErrback(self._errorCalls) #@UnusedVariable
def _getCalls1(self, callback):
#
'Content-Length': str(len(parms))},
postdata=parms).addCallback(self._okDial).addErrback(self._errorDial)
- def _okDial(self, html):
+ def _okDial(self, html): #@UnusedVariable
debug("[FritzCallFBF] okDial")
def _errorDial(self, error):
'Content-Length': str(len(parms))},
postdata=parms).addCallback(self._okChangeWLAN).addErrback(self._errorChangeWLAN)
- def _okChangeWLAN(self, html):
+ def _okChangeWLAN(self, html): #@UnusedVariable
debug("[FritzCallFBF] okDial")
def _errorChangeWLAN(self, error):
'Content-Length': str(len(parms))},
postdata=parms).addCallback(self._okChangeMailbox).addErrback(self._errorChangeMailbox)
- def _okChangeMailbox(self, html):
+ def _okChangeMailbox(self, html): #@UnusedVariable
debug("[FritzCallFBF] _okChangeMailbox")
def _errorChangeMailbox(self, error):
'Content-Length': str(len(parms))},
postdata=parms)
- def _okReset(self, html):
+ def _okReset(self, html): #@UnusedVariable
debug("[FritzCallFBF] _okReset")
def _errorReset(self, error):
class FritzDisplayCalls(Screen, HelpableScreen):
- def __init__(self, session, text=""):
+ def __init__(self, session, text=""): #@UnusedVariable
if config.plugins.FritzCall.fullscreen.value:
self.width = DESKTOP_WIDTH
self.height = DESKTOP_HEIGHT
self.width, self.height, _("Phone calls"),
backMainLine,
scaleH(1130, XXX), scaleV(40, XXX), scaleH(80, XXX), scaleV(26, XXX), scaleV(26, XXX), # time
- scaleH(900, XXX), scaleV(70, XXX), scaleH(310, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
+ scaleH(890, XXX), scaleV(70, XXX), scaleH(320, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
"FritzCall " + _("Phone calls"), scaleH(500, XXX), scaleV(63, XXX), scaleH(330, XXX), scaleV(30, XXX), scaleV(27, XXX), # eLabel
scaleH(80, XXX), scaleV(150, XXX), scaleH(280, XXX), scaleV(200, XXX), scaleV(22, XXX), # statusbar
scaleH(420, XXX), scaleV(120, XXX), scaleH(790, XXX), scaleV(438, XXX), # entries
self.lookup()
def lookedUp(self, number, name):
+ name = handleReverseLookupResult(name)
if not name:
if self.lookupState == 1:
name = _("No result from reverse lookup")
name = _("No result from Outlook export")
else:
name = _("No result from LDIF")
- self.number = number
self.name = name
+ self.number = number
debug("[FritzOfferAction] lookedUp: " + str(name.replace(", ", "\n")))
self.setTextAndResize(str(name.replace(", ", "\n")))
self.width, self.height, _("Phonebook"),
backMainLine,
scaleH(1130, XXX), scaleV(40, XXX), scaleH(80, XXX), scaleV(26, XXX), scaleV(26, XXX), # time
- scaleH(900, XXX), scaleV(70, XXX), scaleH(310, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
+ scaleH(890, XXX), scaleV(70, XXX), scaleH(320, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
"FritzCall " + _("Phonebook"), scaleH(80, XXX), scaleV(63, XXX), scaleH(300, XXX), scaleV(30, XXX), scaleV(27, XXX), # eLabel
scaleH(420, XXX), scaleV(120, XXX), scaleH(self.entriesWidth, XXX), scaleV(438, XXX), # entries
scaleH(450, XXX), scaleV(588, XXX), scaleH(21, XXX), scaleV(21, XXX), # red
class FritzCallSetup(Screen, ConfigListScreen, HelpableScreen):
- def __init__(self, session, args=None):
+ def __init__(self, session, args=None): #@UnusedVariable
if config.plugins.FritzCall.fullscreen.value:
self.width = DESKTOP_WIDTH
self.height = DESKTOP_HEIGHT
self.width, self.height, _("FritzCall Setup"),
backMainLine,
scaleH(1130, XXX), scaleV(40, XXX), scaleH(80, XXX), scaleV(26, XXX), scaleV(26, XXX), # time
- scaleH(900, XXX), scaleV(70, XXX), scaleH(310, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
+ scaleH(890, XXX), scaleV(70, XXX), scaleH(320, XXX), scaleV(22, XXX), scaleV(20, XXX), # date
_("FritzCall Setup"), scaleH(500, XXX), scaleV(63, XXX), scaleH(330, XXX), scaleV(30, XXX), scaleV(27, XXX), # eLabel
scaleH(80, XXX), scaleV(150, XXX), scaleH(250, XXX), scaleV(200, XXX), scaleV(22, XXX), # consideration
scaleH(420, XXX), scaleV(125, XXX), scaleH(790, XXX), scaleV(428, XXX), # config
@param caller: name and address of remote. it comes in with name, address and city separated by commas
'''
debug("[FritzReverseLookupAndNotifier] got: " + caller)
+ self.number = number
#===============================================================================
# if not caller and os.path.exists(config.plugins.FritzCall.phonebookLocation.value + "/PhoneBook.csv"):
# caller = FritzOutlookCSV.findNumber(number, config.plugins.FritzCall.phonebookLocation.value + "/PhoneBook.csv") #@UndefinedVariable
# debug("[FritzReverseLookupAndNotifier] got from ldif: " + caller)
#===============================================================================
- if caller:
- self.caller = caller.replace(", ", "\n").replace('#','')
+ name = handleReverseLookupResult(caller)
+ if name:
+ self.caller = name.replace(", ", "\n").replace('#','')
if self.number != 0 and config.plugins.FritzCall.addcallers.value and self.event == "RING":
debug("[FritzReverseLookupAndNotifier] add to phonebook")
phonebook.add(self.number, self.caller)
self.phone = None
self.date = '0'
- def notifyAndReset(self, timeout=config.plugins.FritzCall.timeout.value):
+ def notifyAndReset(self):
notifyCall(self.event, self.date, self.number, self.caller, self.phone)
self.resetValues()
def __init__(self):
self.hangup_ok = False
- def startedConnecting(self, connector):
+ def startedConnecting(self, connector): #@UnusedVariable
Notifications.AddNotification(MessageBox, _("Connecting to FRITZ!Box..."), type=MessageBox.TYPE_INFO, timeout=2)
- def buildProtocol(self, addr):
+ def buildProtocol(self, addr): #@UnusedVariable
global fritzbox, phonebook
Notifications.AddNotification(MessageBox, _("Connected to FRITZ!Box!"), type=MessageBox.TYPE_INFO, timeout=4)
self.resetDelay()
self.d[1].disconnect()
self.d = None
-def displayCalls(session, servicelist=None):
+def displayCalls(session, servicelist=None): #@UnusedVariable
session.open(FritzDisplayCalls)
-def displayPhonebook(session, servicelist=None):
+def displayPhonebook(session, servicelist=None): #@UnusedVariable
session.open(phonebook.FritzDisplayPhonebook)
-def displayFBFStatus(session, servicelist=None):
+def displayFBFStatus(session, servicelist=None): #@UnusedVariable
session.open(FritzMenu)
def main(session):
fritz_call.shutdown()
fritz_call = None
-def Plugins(**kwargs):
+def Plugins(**kwargs): #@UnusedVariable
what = _("Display FRITZ!box-Fon calls on screen")
what_calls = _("Phone calls")
what_phonebook = _("Phonebook")
<reverselookup version="1.01">
<country code="+1">
<website name="whitepages.com" url="http://www.whitepages.com/search/ReversePhone?phone=$NUMBER" prefix="1">
- <entry>
- <firstname>'FIRST'\s*: "([^"]*)",</firstname>
- <lastname>'LAST'\s*: "([^"]*)",</lastname>
- <street>'ADDRESS'\s*: "([^"]*)",</street>
- <city>'CITY'\s*: "([^"]*)",</city>
- <zipcode>'ZIP'\s*: "([^"]*)",</zipcode>
- </entry>
- <entry>
- <name><p class="name"><a href[^>]*>([^<]*)</a></p></name>
- <street><li class="col_address">\s*<span.*?</span>\s*([^<\n]*)\s*</li></street>
- <city><li class="col_location">\s*([^<\n]*)\s*</li></city>
- <zipcode>()</zipcode>
- </entry>
- <entry>
- <name><a href="[^"]*" class="fn n" title="[^"]*">([^<]*)</a></name>
- <street><span class="street-address">([^<]*)</span></street>
- <city><span class="locality">([^<]*)</span></city>
- <zipcode><span class="postal-code">([^<]*)</span></zipcode>
- </entry>
- <entry>
- <name><a href="[^"]*" class="fn n" title="[^"]*">([^<]*)</a></name>
- <street>()<span class="results_widget_street_none">street address not available</span></street>
- <city><span class="locality">([^<]*)</span></city>
- <zipcode><span class="postal-code">([^<]*)</span></zipcode>
- </entry>
- <entry>
- <name><[span]*[div]* class="fn n">([^<]*)</[span]*[div]*></name>
- <street><span class="street-address">([^<]*)</span></street>
- <city><span class="locality">([^<]*)</span></city>
- <zipcode><span class="postal-code">([^<]*)</span></zipcode>
- </entry>
- <entry>
- <name><[span]*[div]* class="fn n">([^<]*)</[span]*[div]*></name>
- <street>()<span class="results_widget_street_none">street address not available</span></street>
- <city><span class="locality">([^<]*)</span></city>
- <zipcode><span class="postal-code">([^<]*)</span></zipcode>
+ <entry firstOccurance="firstname">
+ <firstname>'FIRST'\s*:\s*"([^"]*)",</firstname>
+ <lastname>'LAST'\s*:\s*"([^"]*)",</lastname>
+ <street>'ADDRESS'\s*:\s*"([^"]*)",</street>
+ <city>'CITY'\s*:\s*"([^"]*)",</city>
+ <zipcode>'ZIP'\s*:\s*"([^"]*)",</zipcode>
</entry>
</website>
</country>
</website>
</country>
<country code="+352">
+ <website name="infobel.com" url="http://infobel.com/en/luxembourg/Inverse.aspx?qPhone=$NUMBER&qSelLang3=&SubmitREV=Search&inphCoordType=EPSG" prefix="">
+ <entry>
+ <name><div class=\"result-item\"><h2>[^<]*<a [^>]*>([^<]*)</a></name>
+ <street><div class=\"result-box-col\"><div><strong>([^,]*),\s*\d{4}\s*[^lt;]*</strong></street>
+ <city><div class=\"result-box-col\"><div><strong>[^,]*,\s*\d{4}\s*([^lt;]*)</strong></city>
+ <zipcode><div class=\"result-box-col\"><div><strong>[^,]*,\s*(\d{4})\s*[^lt;]*</strong></zipcode>
+ </entry>
+ </website>
<website name="editustel.lu" url="http://www.editustel.lu/luxweb/neosearchAT.do?input=$NUMBER" prefix="">
<entry>
<name>raisSoc[^>]*>([^<]*?)<</name>
<zipcode>raisSoc(?:[^>]*?>){6}L-(\d{4})&nbsp;</zipcode>
</entry>
</website>
- <website name="infobel.com" url="http://infobel.com/en/luxembourg/Inverse.aspx?qPhone=$NUMBER&qSelLang3=&SubmitREV=Search&inphCoordType=EPSG" prefix="">
- <entry>
- <name>ResNoPack2.><tr><td><h3>1\.\s*([^<]*)<</name>
- <street>InfoItemNoPack[^>]*>([^,]*),</street>
- <city>InfoItemNoPack[^>]*>[^,]*,[^\d]*\d{4}\s*([^<]*)<</city>
- <zipcode>InfoItemNoPack[^>]*>[^,]*,[^\d]*(\d{4})</zipcode>
- </entry>
- </website>
</country>
<country code="+354">
<website name="simaskra.is" url="http://ja.is/gular?q=$NUMBER" prefix="">
</country>
<country code="+46">
<website name="privatpersoner.eniro.se" url="http://privatpersoner.eniro.se/query?what=wp&search_word=$NUMBER&geo_area=" prefix="0">
- <entry>
+ <entry firstOccurance="firstname">
<firstname><span class="given-name">([^<]*)</span></firstname>
<lastname><span class="family-name">([^<]*)</span></lastname>
<street><span class="street-address">([^<]*)</span></street>
</website>
</country>
<country code="+47">
- <website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="0">
+ <website name="gulesider.no" url="http://www.gulesider.no/gs/categoryList.c?q=$NUMBER" prefix="">
<entry>
- <name>RESULT.ITEM.START(?:[^>]*>)+([^<]*?)</h2></name>
- <street>title=.Kart.>([^,]*?),</street>
- <city>title=.Kart.>(?:[^,]*?,)+\s*?\d{4}\s([^<]*?)<</city>
- <zipcode>title=.Kart.>(?:[^,]*?,)+\s*?(\d{4})\s[^<]*?<</zipcode>
+ <name swapFirstAndLastName="true">title=".*personlige infoside">\s*([^<]*)</a></name>
+ <street><div\s+class="lead"\s+style="padding-left: 0px;">([^,]*),\s+[^<]*</div></street>
+ <city><div\s+class="lead"\s+style="padding-left: 0px;">[^,]*,\s+[^\s]*\s([^<]*)</div></city>
+ <zipcode><div\s+class="lead"\s+style="padding-left: 0px;">[^,]*,\s+([^\s]*)\s[^<]*</div></zipcode>
</entry>
</website>
</country>
</country>
<country code="+49">
<website name="www.dasoertliche.de" url="http://dasoertliche.de/Controller?form_name=search_inv&ph=$NUMBER" prefix="0">
+ <entry firstOccurance="zipcode">
+ <name>\sna: "([^"]*)",</name>
+ <street>\sst: "([^"]*)",</street>
+ <city>\sci: "([^"]*)",</city>
+ <zipcode>\spc: "([^"]*)",</zipcode>
+ </entry>
<entry>
- <name>class="preview\s*".*?>([^<]*)<span class="preview_box"></name>
+ <name>class="preview">([^<]*)<span class="preview_box"></name>
<street>^\s*([^,>]+),&nbsp;\d{5}&nbsp;[^<]*</div></street>
<city>^[^,]*,&nbsp;\d{5}&nbsp;([^<]*)</div></city>
<zipcode>^[^,]*,&nbsp;(\d{5})&nbsp;[^<]*</div></zipcode>
<zipcode>^[^,]*,&nbsp;(\d{5})&nbsp;[^<]*</div></zipcode>
</entry>
</website>
+ <website name="www.dastelefonbuch.de" url="http://www3.dastelefonbuch.de/?la=de&kw=$NUMBER&cmd=detail&recSelected=0" prefix="0">
+ <entry>
+ <name><div id="detail-hl"><h2>([^<]*)</h2></name>
+ <street>([^&]*)&nbsp;<br />\d{5}&nbsp;[^<]*</div></street>
+ <city>[^&]*&nbsp;<br />\d{5}&nbsp;([^<]*)</div></city>
+ <zipcode>[^&]*&nbsp;<br />(\d{5})&nbsp;[^<]*</div></zipcode>
+ </entry>
+ </website>
<website name="www.dastelefonbuch.de" url="http://www.dastelefonbuch.de/?sourceid=Mozilla-search&cmd=search&kw=$NUMBER" prefix="0">
<entry>
<name><div class="(?:short|long)">(?:<b>)?<a href=[^>]*>([^<]*)<</name>
<zipcode><td class="col3"(?: onclick="[^"]*")?>(\d{5})</zipcode>
</entry>
</website>
-<!-- this appears not to be working correctly. Klicktel tries to "guess" numbers by stripping the last digits
- <website name="www.klicktel.de" url="http://www.klicktel.de/inverssuche/backwardssearch.html?newSearch=1&boxtype=backwards&vollstaendig=$NUMBER" prefix="0">
+ <website name="www.goyellow.de" url="http://www.goyellow.de/inverssuche/?TEL=$NUMBER" prefix="0">
<entry>
- <name>class="title">([^<]+)</span></name>
- <street>class="location">([^<]+)<br />\d{5}\s+[^<]+</span></street>
- <city>class="location">[^<]+<br />\d{5}\s+([^<]+)</span></city>
- <zipcode>class="location">[^<]+<br />(\d{5})\s+[^<]+</span></zipcode>
+ <name><a href="[^"]*" title="[^"]*" onClick="[^"]*">([^<]*)</a></name>
+ <street><p class="address">([^<]*)<br />[\d]*\s*[^<]*</p></street>
+ <city><p class="address">[^<]*<br />[\d]*\s*([^<]*)</p></city>
+ <zipcode><p class="address">[^<]*<br />([\d]*)\s*[^<]*</p></zipcode>
</entry>
- </website>
--->
- <website name="www.goyellow.de" url="http://www.goyellow.de/inverssuche/?TEL=$NUMBER" prefix="0">
<entry>
<name><a href="[^"]*" onClick="[^"]*" title="[^"]*">([^<]*)</a></name>
<street><p class="address">([^<]*)<br />[\d]*\s*[^<]*</p></street>
<zipcode><p class="address">[^<]*<br />([\d]*)\s*[^<]*</p></zipcode>
</entry>
</website>
- <website name="www.11880.com" url="http://www.11880.com/Suche/index.cfm?fuseaction=Suche.rueckwaertssucheresult&init=true&tel=$NUMBER" prefix="0">
+ <website name="www.11880.com" url="http://www.11880.com/Suche/index.cfm?&fuseaction=Suche.rueckwaertssucheresult&init=true&tel=$NUMBER" prefix="0">
<entry>
- <name><a style="text-decoration: underline;" href="[^"]*?" onclick="[^"]*?" class="popup"[^>]*?>([^<]*?)</a></name>
+ <name><a style="text-decoration: underline;" href="[^"]*?"\s+onclick="[^"]*?"\s+class="popup"[^>]*?>([^<]*?)</a></name>
<street>^\t*?([^,\t]*?), [\d]{5} [^<]*?<br /></street>
<city>^\t*?[^,\t]*?, [\d]{5} ([^<]*?)<br /></city>
<zipcode>^\t*?[^,\t]*?, ([\d]{5}) [^<]*?<br /></zipcode>