Rückwärtssuche das Örtliche mit Python aber wie

Du hast eine Idee für ein Projekt?
Antworten
miami
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2006, 14:42

Donnerstag 26. Oktober 2006, 15:09

Hallo an die Programmierergemeinde.

Ich hab mich nach längerem googeln jetzt doch mal entschlossen hier die Frage zu stellen.
Bin ein absoluter Neuling was programmierung anbelangt und bin auf der Suche nach einem script um eine Telefonnummernrückwärtssuche über das örtliche mit python zu realisieren.
Hab das ganze mit einem shellscript probiert, funktioniert auch soweit habe jetzt aber schwiergkeiten aus python heraus das script zu starten.
wie gesagt absoluter Neuling.
Ziel wäre bei eigehendem Anruf auf Linuxserver wird das script incomming.py der capisuite aufgerufen, jetzt sollte geprüft werden ob eine Nummer übermittelt wurde, wenn ja dann Abfrage ob schon ein Eintrag in der Mysqldatenbank besteht wenn ja dann ende wenn nein dann über das Örtliche abfragen, bei gefundenem Eintrag Daten auslesen und in mysqldatenbank eintragen,
wenn kein eintrag gefunden dann abfrage über andere Rückwärtssuche z.B 11880
wenn kein Eintrag gefunden dann ende ansonsten halt diesen eintrag in mysqldatenbank.
Ist sowas möglich oder gibt es vielleicht schon so ein script zumindest ansatzweise.

Gruß und Danke schon mal miami

PS. Ist mein erster Post.
Ich hoffe ich bin in dieser Rubrik richtig.
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

Donnerstag 26. Oktober 2006, 17:20

Hi,

ich habe sowas vor einiger Zeit mal ganz rudimentär gebaut.

Code: Alles auswählen

def search_doe(self,number):
    from twisted.web.client import getPage
    from BeautifulSoup import BeautifulSoup, Null

    def got_page(x):
        soup = BeautifulSoup(x)
        r = soup.first('a',{'class' : 'blb'})
        if r != Null:
            self.addContact2DB(self.contacts,
                               unicode(string.strip(r.string),'latin-1'),
                               number,
                               auto='yes')
 
    search_uri = """http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?\
kw_invers=%s\
&main=Antwort&\
AKTION=START_SUCHE&\
SEITE=INVERSSUCHE&rg=1&s=2"""

    search_uri = search_uri % number

    getPage(search_uri).addCallback(got_page)
Die Seiten bei Das Örtliche haben sich zwischenzeitlich geändert, sprich Du mußt das entsprechend anpassen.

Ciao,
dev

Edit (Leonidas): Code in Python-Tags gesetzt.
miami
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2006, 14:42

Freitag 27. Oktober 2006, 12:02

Hi dev,

vielen Dank für die schnelle Antwort. Hilft mir leider nicht viel weiter.
Bin wie gesagt absoluter Neuling auf dem Gebiet.

Hier hab ich mal das Shellscript das ich erstellt habe für die Abfrage so sollte das mit Python funktionieren.
In meinem script fehlt allerdings noch der Eintrag in die Datenbank.

Code: Alles auswählen

#!/bin/sh
#
TMPFILE="/mein ordner/tmpsuche"
TEXT="$1"
if [ "$TEXT" == "" ]; then
    NAME="anonymer Anrufer"
    DETAILS="Keine details"
else
    NUMMER=`echo $TEXT | sed -e "s/\ //g" -e "s/0049/0/"`

wget "http://www2.dasoertliche.de/?id=3339GS10886550222242399&la=de&form_name=detail&lastFormName=search_inv&ph=$NUMMER&recFrom=1&hitno=99&kgs=11000000&zvo_ok=1&page=TREFFERLISTE&context=TREFFERLISTE&action=TEILNEHMER&orderby=name&ttforderby=rel&la=de&detvert_ok=1" -O $TMPFILE

        NAME=`grep detail_top  $TMPFILE |  sed  -e "s/<div class=\"detail_top\">//; s/<\/div>                            //;"`



        if [ "$NAME" == "" ]; then
	
	wget "http://www.11880.com/Suche/index.cfm?fuseaction=Suche.rueckwaertssucheresult&init=true&change=false&searchform=Rueckwaerts&tel=$NUMMER" -O $TMPFILE
	
		NAME=`grep nam_header  $TMPFILE |  sed  -e "s/<h1 class=\"nam_header\">//; s/<\/h1>//;"`
	      
            	if grep "Es wurden keine Treffer gefunden" $TMPFILE > /dev/null; then
                NAME="$NUMMER"
                DETAILS="Kein Eintrag $2"
		echo $NAME $DETAILS
		else echo $NAME
            	fi;
	else 
Vielleicht kann mir das jemand in python umsetzen. Das wäre super.

im voraus schon mal vielen dank

Ciao,
miami

Edit (Leonidas): Code in Tags gesetzt.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 27. Oktober 2006, 12:18


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Freitag 27. Oktober 2006, 16:08

So ungefähr nach dem Bash-Skript könnte das so aussehen:

Code: Alles auswählen

import sys
from urllib import urlopen
from BeautifulSoup import BeautifulSoup


def get_soup(url):
    url_file = urlopen(url)
    result = BeautifulSoup(url_file,
                           convertEntities=BeautifulSoup.HTML_ENTITIES)
    url_file.close()
    return result


def lookup_oertliche(phone_number):
    soup = get_soup('http://www2.dasoertliche.de/?id=3339GS10886550222242399&'
                    'la=de&form_name=detail&lastFormName=search_inv&'
                    'ph=%s&recFrom=1&hitno=99&kgs=11000000&zvo_ok=1&'
                    'page=TREFFERLISTE&context=TREFFERLISTE&'
                    'action=TEILNEHMER&orderby=name&ttforderby=rel&'
                    'la=de&detvert_ok=1' % phone_number)

    result = soup.find('div', {'class': 'detail_top'})
    
    if result:
        return result.string.strip()
    else:
        return u''


def lookup_11880(phone_number):
    soup = get_soup('http://www.11880.com/Suche/index.cfm?'
                    'fuseaction=Suche.rueckwaertssucheresult&'
                    'init=true&change=false&searchform=Rueckwaerts&'
                    'tel=%s' % phone_number)
    
    result = soup.find('h1', {'class': 'nam_header'})
    
    if result:
        return result.string
    else:
        return u''


def clean_phone_number(phone_number):
    result = ''.join(char for char in phone_number if char.isdigit())
    if result.startswith('0049'):
        result = '0' + result[4:]
    return result


def main():
    if len(sys.argv) < 2:
        print 'Anonymer Anrufer'
    else:
        phone_number = clean_phone_number(sys.argv[1])
        
        for lookup_func in (lookup_oertliche, lookup_11880):
            name = lookup_func(phone_number)
            if name:
                break
        if name:
            print name
        else:
            print 'Kein Name zu %s gefunden' % phone_number


if __name__ == '__main__':
    main()
Die URL bei das Örtliche funktioniert nicht, da war ich jetzt zu faul herauszufinden warum. Bei der Funktion ist also nie ein Treffer und die Ergebnisse kommen immer von 11880.
miami
User
Beiträge: 3
Registriert: Donnerstag 26. Oktober 2006, 14:42

Freitag 27. Oktober 2006, 21:10

Hi BlackJack

erstmal vielen Dank für den Code, werde am Wochenende mal ausprobieren warum der Link mit "Das Örtliche" nicht funktioniert.
Dafür hätte ich Wochen gebraucht.
Ich hab immer nur abends und am Wochende Zeit sowas zu testen, das dauert dann immer ewig.
Also nochmal Herzlichen Dank für die schnelle Hilfe.
Ist echt ein super Forum hier.

CIAO
miami
Antworten