kostenloser Webspace werbefrei: lima-city


MiniPHP Crawler erstellen.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Ich bräuchte mal wieder ein wenig Nachhilfe in PHP.

    Und zwar möchte ich einen Mini Crawler (Wenn ich das mal eben so nennen darf ^^) in PHP schreiben.

    Es geht mir um folgendes: Ich würde gerne ein Eingabefeld haben, in das man ein Stichwort schreiben kann. Wenn man dan auf den Submit Button drückt, soll folgendes passieren: Das Script soll auf Youtube.com gehen, nach dem eingegebenen Stichwort suchen, auf das erste Video, dass gefunden wird gehen, und von dieser Seite dann den am Rand stehenden Link kopieren. ("Einbetten")
    Den Link würde ich dann gerne in eine Datenbank schreiben.

    Leider habe ich überhaupt keine Ahnung, wie das gehen könnte, also suche ich nach Anleitungen, oder Stichworten, um besser danach suchen zu können, denn bis jetzt wurde ich bei Google nicht wirklich fündig. (Habe schon ein paar Sachen gefunden, aber keine, die mir als Anfänger wirklich weiter helfen konnten...)

    Hoffe, dass ihr euch da ein wenig auskennt :D

    lg
    Sincer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Erstmal ein paar Ansätze:

    Du solltest die Seite http://www.youtube.com/results?search_query=SUCHBEGRIFF&search_type= mit PHP aufrufen und dann per Regex oder explode den ersten Videolink rausfiltern. Der Aufruf der Seite geht einfach mit file_get_contents() oder über folgenden Code, wenn du dich als Firefox tarnen willst:
    function do_firefox_request($url)
    {
    $params = array();
    $params['http']['header'] = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7';
    $ctx = stream_context_create($params);
    $fp = @fopen($url, 'rb', false, $ctx);
    $response = @stream_get_contents($fp);
    return $response;
    }
    echo do_firefox_request('http://www.youtube.com/results?search_query=SUCHBEGRIFF&search_type=');

    Dann nimmst du den ersten Videolink, den du rausgefiltert hast und rufst ihn wieder mit der gleichen Methode auf und holst dann den Einbetten-Code per Regex oder explode aus dem Quelltext raus.

    LG cookies

    Beitrag zuletzt geändert: 18.7.2009 10:56:40 von cookies
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Danke für die rasche Antwort. :)

    Ich bin heute nicht @ home, habe zwar meinen Laptop mitgenommen, allerdings das Ladegerät zu Hause vergessen XD
    Naja... das Teil ist mir gerade eingeschalfen :P
    Bin jetzt auf einem Gast PC, kann das ganze also leider nicht testen...

    Meine Fragen an dich:
    Habe ich das richtig verstanden?
    Die Funktion do_firefox_request($url) mach folgendes.
    Ich übergebe der Funktion die Youtube Suchanfrage, mit den Daten, die der User eingegeben und abgeschickt hat, das ganze eingebettet in die Youtube URL Query. Soweit so klar.

    Das was in diesem Fall per echo ausgegeben wird, ist die komplette youtube Seite mit den Suchergebnissen?

    Wie funktioniert das also genau? Ich weiß schon, dass die Suchergebnisseite immer den gleichen aufbau hat.
    Oben ist der Header, den muss ich ignorieren, bis der erste Link kommt, der so aussieht: "http://www.youtube.com/watch?v=*"
    Und grundsätzlich sieht die Einbettung ja auch immer gleich aus. (Ist glaube ich einfacher, als nochmal zu crawlen...)
    Einbettungslink:
    <object width="425" height="344"><param name="movie" value="DER_VOM_CRAWLER_GEFUNDENE_LINK&hl=en&fs=1&color1=0x006699&color2=0x54abd6"></param>
    <param name="allowFullScreen" value="true"></param>
    <param name="allowscriptaccess" value="always"></param>
    <embed src="DER_VOM_CRAWLER_GEFUNDENE_LINK&hl=en&fs=1&color1=0x006699&color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>


    Wie sage ich dem Crawler aber jetzt, dass er nur den ersten Link ("http://www.youtube.com/watch?v=*") braucht.

    Mit regex kenne ich mich kaum aus. Ich benütze das eig. nur, um Formularfelder zu überprüfen (zB. erster Buchstabe muss ein Großbuchstabe sein). Habe mich um ehrlich zu sein auch noch nicht wirklich damit auseinander gesetzt, obwohl ich weiß, dass es eine recht wichtige funktion ist...
    Jetzt weiß ich natürlich nicht, wie ich via regex sage, dass ich bis zu dem link "http://www.youtube.com/watch?v=" will, und einen bestimmten part in eine Variable speichern will...

    Ich habe mal testweise "gummibärenbande" bei youtube eingegeben ^^
    Mir ist aufgefallen, als ich mir den Quelltext durchgesehen habe, dass unter anderem folgendes im Link zum video steckt:
    ql="9Ibqoz5M4l0"
    Dieser Wert entspicht genau der Video ID, die ich dann brauche, um das Video einzubetten.
    Wie sage ich also Regex, dass er bis zum ersten ' ql=" ' gehen soll, und alles, das bis zum erneuten ' " ' kommt, in eine variable speichern soll?

    lg
    Sincer

    Beitrag zuletzt geändert: 18.7.2009 11:51:31 von sincer
  5. Ja, [url]echo do_firefox_request('URL')[/url] gibt den Inhalt der unter URL angegebenen Seite aus. Du solltest es auch mit der Funktion machen, da der Request möglicherweise nicht funktioniert, wenn kein User-Agent gesendet wird.

    Aber versuch doch mal mit

    $text = explode('<div style="font-size: 14px; margin-bottom: 5px;">', do_firefox_request('http://www.youtube.com/results?search_query=SUCHBEGRIFF&search_type='));
    $text2 = explode('</div>', $text[1]);
    echo $text2[0];


    Dann müsstest du das haben:

    <a class="hLink" title="blablabla" href="/watch?v=VIDEOCODE&amp;feature=fvst">blablabla</a>
  6. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Vielen Dank für deine Hilfe, es funktioniert soweit alles :)

    thx
    Sincer

    //EDIT:
    Also ich habe annähernd den Code verwendet, den du mir gegeben hast.
    Was mir aufgefallen ist: Youtube scheint zu erkennen, dass der "Besucher" kein Mensch ist... Die Auswahl, die mir vom "Crawler" ausgegeben wird, ist interessanter weise oft ganz was anderes, als das, was ich bei youtube finde, wenn ich selber die suche betätige :D
    (Angenehm ist, dass er immer eine Gute Version (zB von Musik) findet... Möglicherweise hat es auch einen Nachteil, wenn man etwas nicht finden soll, aber das wird sich erst mit der Zeit herausstellen :P )

    Beitrag zuletzt geändert: 22.7.2009 20:38:31 von sincer
  7. sincer schrieb:
    ho ;)

    Vielen Dank für deine Hilfe, es funktioniert soweit alles :)

    thx
    Sincer

    //EDIT:
    Also ich habe annähernd den Code verwendet, den du mir gegeben hast.
    Was mir aufgefallen ist: Youtube scheint zu erkennen, dass der "Besucher" kein Mensch ist... Die Auswahl, die mir vom "Crawler" ausgegeben wird, ist interessanter weise oft ganz was anderes, als das, was ich bei youtube finde, wenn ich selber die suche betätige :D
    (Angenehm ist, dass er immer eine Gute Version (zB von Musik) findet... Möglicherweise hat es auch einen Nachteil, wenn man etwas nicht finden soll, aber das wird sich erst mit der Zeit herausstellen :P )


    Du könntest auch noch ein paar mehr Header senden, z.B.:

    $params['http']['header'] = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7';
    $params['http']['header'] .= "\n";
    $params['http']['header'] .= "Referer: http://www.google.de";
    //usw.


    Und das solange, bis du genau die Header sendest, wie ein Browser.

    LG cookies
  8. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    ho ;)

    Verstehe, interessante Sache :)
    Mal schauen... wenn ich Zeit habe, spiele ich mich ein wenig damit rum.
    Danke für den Hinweis.

    lg
    Sincer
  9. Eine ganz andere Möglichkeit wäre es, die Youtube PHP Api zu verwenden.
    http://code.google.com/intl/de-DE/apis/youtube/2.0/developers_guide_php.html

    Damit geht das wahrscheinlich deutlich schneller, da nicht die ganze Seite übertragen werden muss.

    Grüße,
    Prog
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!