PHP Problem mit Reg Ex

[o.0]

Lt. Commander
Registriert
Apr. 2008
Beiträge
1.056
Hallo,
hab auch mal wieder ein Problem ;)

Ich bin grade dabei mir eine kleine Erleichterung zu basteln, damit sich meine Liste, welche Filme der IMDB Top 250 ich noch sehen muss/schon gesehen habe automatisch aktualisiert.

Das ganze soll (irgendwann & ungefähr) folgender Maßen ablaufen:
Ich hole mir die komplette IMDB Top 250 Seite, hole mit Regular Expressions die Daten der Filme (Platzierung, Wertung, Link, Titel, Erscheinungsjahr und abgegebene Stimmen) und speicher sie in eine Datenbank. Als Frontend soll eine einfache HTML Seite dienen, auf der man mit Checkboxen auswählen kann was man schon gesehen hat - alles neu angekreuzte wird in die Datenbank als gesehen markiert und der Titel des Films durchgestrichen.
Das ganze soll dann einmal am Tag per Cronjob aktualisiert werden.

Leider habe ich jetzt schon ganz am Anfang ein kleines Problem: Wie kriege ich aus diesen mit preg_match_all geholten $matches die Daten raus?
Ich habe vorher noch nie was mit Regular Expressions gemacht und find es schonmal toll das ich zumindest diesen pattern (wie man das wohl nennt) hingekriegt habe.. und jetzt hakt es an sowas :freak:


Das ist der dafür relevante Codeabschnitt den ich bis jetzt habe:
PHP:
$txt = file_get_contents('filme.txt');

preg_match_all ('%<b>([0-9]{1,3}).</b></font></td><td align="center">
				<font face="Verdana, Arial, sans-serif" size="-1">([0-9,]{3,3})</font>
				</td><td><font face="Verdana, Arial, sans-serif" size="-1">
				<a href="http://www.imdb.de/title/tt([0-9]{7,7})/">(.*?)</a>
				(.*?)</font></td><td align="right">
				<font face="Verdana, Arial, sans-serif" size="-1">(.*?)
				</font>%is', $txt, $matches); 

//print_r($matches);

Um die IMDB Server nicht ständig mit meinen Anfragen zu stressen und die Ladezeiten zu verkürzen nehme ich anstatt der IMDB Seite nur diese paar Zeilen als Testobjekt:
Code:
(Auf Misters Snoots Wunsch im Anhang =P)

Als Ausgabe kommt dann sowas:
Code:
Array
(
    [0] => Array
        (
            // unwichtig, entfernt
        )

    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )

    [2] => Array
        (
            [0] => 9,1
            [1] => 9,1
            [2] => 9,0
            [3] => 8,9
            [4] => 8,9
        )

    [3] => Array
        (
            [0] => 0111161
            [1] => 0068646
            [2] => 0071562
            [3] => 0060196
            [4] => 0110912
        )

    [4] => Array
        (
            [0] => Die Verurteilten
            [1] => Der Pate
            [2] => Der Pate 2
            [3] => Zwei glorreiche Halunken
            [4] => Pulp Fiction
        )

    [5] => Array
        (
            [0] => (1994)
            [1] => (1972)
            [2] => (1974)
            [3] => (1966)
            [4] => (1994)
        )

    [6] => Array
        (
            [0] => 430.259
            [1] => 355.653
            [2] => 207.160
            [3] => 127.629
            [4] => 352.772
        )

)

Sieht ja schonmal ganz gut aus, das unter "[0] => Array" kann ich zwar vergessen, aber der Rest ist genau das was ich will. Ich komm irgendwie nur nicht dran.. oder ich steh total auf dem Schlauch.

Ein weiteres Problem wäre, das das auch nur mit der filme.txt funktioniert, wenn ich die "richtige" Seite nehme, klappt gar nichts. Wisst ihr woran das liegt? Ich vermute das hat etwas mit der fehlenden Formatierung von deren HTML Code zu tun. Wäre also auch da für einen Verbesserungsvorschlag wie es trotzdem geht dankbar.. bin wie gesagt ein absoluter Reg Ex Anfänger :freak:

Wäre klasse wenn mir jemand helfen würde, danke schonmal =]
 

Anhänge

Zuletzt bearbeitet:
Würds dir was ausmachen, den HTML-Code umzubrechen oder für hier die ganzen Formatierungen rauszunehmen? Macht keinen Spaß den Post hier zu lesen wenn man ständig nach rechts scrollen muss ;)
 
Oh, bei mir klappt das auch so.. aber kann ich natürlich ändern, kein Thema. So besser?
 
Eine API kann man das ja wohl fast nicht nennen.. okay, die Top 250 sind in der ratings.list. Die ist allerdings entpackt fast 18 MB groß und die Filmnamen auf Englisch.
 
Ka ob ich dich jetzt richtig verstanden habe oder nicht, aber an die Werte kommst du mit $matches[4][0] ... für die Verurteilten usw.?
 
@Stefan-: Ja, das Programm ist wirklich nicht schlecht, aber ich bräuchte das leider Online und nicht als Anwendung =/

@t R I A S: Ah, danke.. genauso gehts :]

Weiß noch jemand warum das ganze nicht funktioniert wenn ich nicht nur 5 Filme auslese sondern alle will?
Edit: Mit 3, 4 und 5 geht es, ab 5 aber nicht mehr.. seltsam 0o Die Syntax ist eigentlich genau die gleiche..
 
Zuletzt bearbeitet:
Vermutlich sperren die automatische Zugriffe ab einem bestimmten Stand. Was spricht denn dagegen, die ganzen Tabellen runterzuladen, in z.B. MySQL einzuspielen (insg. vielleicht 1GB Daten, also fast nichts für eine Datenbank) und diese dann lokal zu nutzen?
 
Nee, geht auch nicht wenn ich von Hand die restliche Tabelle der Filme runterlad und in eine .txt Speicher, da können die ja nichts dagegen machen.

1GB Daten ist eben eine ganze Menge, dafür das das eigentlich so klein wie möglich bleiben soll. Auf ein oder zwei MB kommt es nicht an, aber auf ein Gigabyte dagegen schon. Auserdem sollte das wenn möglich auch im Netz stehen, und dafür ist eine 1GB große Datenbank doch schon heftig.. zumindest wenn man nur einen kleinen Webspace hat^^
 
Zurück
Oben