#1 16. Oktober 2008 hallo ich wollte eine fremde seite analysieren und bestimmte inhalte rauskopieren. das mache ich mit der klasse snoopy klappt auch. nur habe ich folgendes prob. es handelt sich zum beispiel um folgenden inhalt. das erfassen von titel studio genre ist kein prob. zum beispiel erfasse ich die genre folgendermaßen PHP: include "Snoopy.class.php" ; $snoopy = new Snoopy ; $snoopy -> agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ; $snoopy -> referer = "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" ; $snoopy -> cookies [ "CartInfo" ] = "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ; $snoopy -> cookies [ "nh" ] = "" ; $snoopy -> cookies [ "UID" ] = "785618111" ; $snoopy -> cookies [ "IAmAnAdult" ] = "yes" ; $snoopy -> cookies [ "psychicsearch" ] = "on" ; $snoopy -> cookies [ "TabsSeen" ] = 16 ; $snoopy -> fetchtext ( 'http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806' ); print ( $snoopy -> results ); // Position vom Wort Category finden $findMich = 'Category' ; $pos = strpos ( $snoopy -> results , $findMich ); // Position vom Wort Starring finden $findMich2 = 'Starring' ; $pos2 = strpos ( $snoopy -> results , $findMich2 ); // Differenz zwischen dem Wort Category und Starring herausfinden // da in diesem Teil die Genre Begriffe stehen $pos3 = $pos2 - $pos ; $genre = substr ( $snoopy -> results , $pos , $pos3 ); echo "<br>" ; echo $genre ; aber wie filtere ich die namen der darsteller raus? ich kann zwar herausfinden, ab welchem zeichen die darstellernamen beginnen. jedoch weiß ich nicht wie ich das anstelle, dass das script weiß, ab wann keine darstellernamen angezeigt werden. denn nach den darstellernamen, die ja je nach film unterschiedlich lang sind, kommt die beschreibung des films, die wiederum auch unterschiedlich ist. + Multi-Zitat Zitieren
#2 16. Oktober 2008 AW: fremde seite analysieren Hi! Du solltest dir mal Reguläre Ausdrücke angucken, damit kannst du das ganz einfach machen. Hier ist die passende PHP-Funktion. + Multi-Zitat Zitieren
#3 17. Oktober 2008 AW: fremde seite analysieren danke habe den code nun so bekomme aber dann den fehler: Warning: preg_match() [function.preg-match]: Unknown modifier 'a' in /home/sweex/domains/sweex.ws/public_html/test/Snoopy-1.2.3/auslesen.php on line 22 PHP: <? include "Snoopy.class.php" ; $snoopy = new Snoopy ; $snoopy -> agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ; $snoopy -> referer = "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" ; $snoopy -> cookies [ "CartInfo" ] = "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ; $snoopy -> cookies [ "nh" ] = "" ; $snoopy -> cookies [ "UID" ] = "785618111" ; $snoopy -> cookies [ "IAmAnAdult" ] = "yes" ; $snoopy -> cookies [ "psychicsearch" ] = "on" ; $snoopy -> cookies [ "TabsSeen" ] = 16 ; $snoopy -> fetch ( 'http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806' ); //print ($snoopy->results); if( preg_match ( '@<title>(.*)</title>@' , $snoopy -> results , $matches )) { $titel = $matches [ 1 ]; echo $titel ; } if( preg_match ( "/class='categorylink'>(.*)</a>/" , $snoopy -> results , $matches )) { $studio = $matches [ 1 ]; echo $studio ; } + Multi-Zitat Zitieren
#4 17. Oktober 2008 AW: fremde seite analysieren Hi! Du hast "/" als "begrenzer" für deinen Regulären Ausdruck. Das heißt wenn dieser in deinem RegEx vor kommt musst du ihn maskieren, da er sonst das Ende des RegEx darstellt. Um dir diese nervige arbeit zu ersparen gibt es eine nette Funktion namens "preg_quote", die maskiert dir automatisch alle Zeichen. + Multi-Zitat Zitieren
#5 17. Oktober 2008 AW: fremde seite analysieren danke so klappte es dann doch noch PHP: preg_match ( "~class='categorylink'>(.+)</a></h2>~" , $snoopy -> results , $matches2 ) und wie ist es wenn ich folgedendes habe cat=123>text</a> cat=53>text</a> ich habe es so versucht PHP: preg_match ( '~cat="([0-9]+)">(.*)</a>~' , $snoopy -> results , $matches3 und so PHP: preg_match ( '~(cat=")[0-9]+(">)(.*)(</a>)~' , $snoopy -> results , $matches3 aber es wird wieder nichts angezeigt. + Multi-Zitat Zitieren
#6 17. Oktober 2008 AW: fremde seite analysieren Der Matcht: PHP: preg_match ( '~cat=(\d+)">(.*?)</a>~' , $snoopy -> results , $matches3 ); + Multi-Zitat Zitieren
#7 17. Oktober 2008 AW: fremde seite analysieren das komische ist: PHP: $suchtext = 'href="/browsecat.asp?style=ice&cat=32">Gonzo</a>' ;if( preg_match ( '%(cat=)[0-9]+(">)(.*)(</a>)%' , $suchtext , $matches3 )){ print_r ( $matches3 );} das klappt. aber so wird nichts angezeigt. man muss hinzusagen, dass es mehrere ergebnisse gibt PHP: if( preg_match ( '%(cat=)[0-9]+(">)(.*)(</a>)%' , $snoopy -> results , $matches3 )){ print_r ( $matches3 );} obwohl der inhalt der variable $suchtext einfach mal aus dem quelltext rausgenommen wurde + Multi-Zitat Zitieren
#8 18. Oktober 2008 AW: fremde seite analysieren ok habe nun so weit alles hinbekommen. nun steh ich vor einem anderen prob. ich wollte auf noch auf das große coverbild zugreifen. jedoch scheint cduniverse.com irgendein schutz eingebaut zu haben. statt dem cover bild wird dieses kleine bild angezeigt ist es möglich diesen schutz zu umgehen. ich täusche ja mit dem snoopy script schon einen broswer vor. aber trotzdem klappt es nicht + Multi-Zitat Zitieren
#9 18. Oktober 2008 AW: fremde seite analysieren Einen Referer von cduniverse.com absenden. Kann man mit cURL mit der curl_setopt Option "CURLOPT_REFERER" machen. + Multi-Zitat Zitieren
#10 18. Oktober 2008 AW: fremde seite analysieren wie schon im ersten posting sende ich referer broswerkennung etc alle nötigen cookies. ich kann auch auf die seite zugreifen. jedoch wird das bild durch diesen schutz nicht angezeigt. PHP: <?include "Snoopy.class.php" ; $snoopy = new Snoopy ; $snoopy -> agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)" ; $snoopy -> referer = "http://www.cduniverse.com/productinfo.asp?pid=7317169&style=ice&cart=786596806" ; $snoopy -> cookies [ "CartInfo" ] = "786599197%2E10%2F16%2F2008+10%3A28%3A14+AM" ; $snoopy -> cookies [ "nh" ] = "" ; $snoopy -> cookies [ "UID" ] = "785618111" ; $snoopy -> cookies [ "IAmAnAdult" ] = "yes" ; $snoopy -> cookies [ "psychicsearch" ] = "on" ; $snoopy -> cookies [ "TabsSeen" ] = 16 ; $url1 = 'http://www.cduniverse.com/images.asp?pid=7317169&style=ice&image=front&title=European+♂️♀️+Stalkers+DVD' ; $snoopy -> fetch ( $url1 );print ( $snoopy -> results ); ?> + Multi-Zitat Zitieren
#11 18. Oktober 2008 AW: fremde seite analysieren Du musst einen Request auf das Bild absetzen mit dem Referer von cduniverse. + Multi-Zitat Zitieren
#12 20. Oktober 2008 AW: fremde seite analysieren das prob welches ich nun habe ist folgendes. ich öffne eine seite, ermittle einen link. nun wollte ich mit snoopy diesen link folgen und dort alle links anzeigen lassen vereinfacht. PHP: $snoopy -> fetch ( 'http://homepage.de' ) print ( $snoopy -> results ); $snoopy -> fetchlinks ( 'http://homepage.de/unterseite.php' ) print ( $snoopy -> results ); das zweite print ($snoopy->results); zeigt mir aber nicht die links an, sondern nochmals den seiteninhalt von der ersten seite. gibt es da eine lösung? + Multi-Zitat Zitieren
#13 20. Oktober 2008 AW: fremde seite analysieren Bastel dir einfach dein eigenes Script, was soll an "snoopy" denn so toll sein? Geht mit cURL sicher genauso wenn nicht viel leichter, was du da vorhast. Oo + Multi-Zitat Zitieren
#14 20. Oktober 2008 AW: fremde seite analysieren das ist nicht die antwort auf die frage + Multi-Zitat Zitieren
#15 20. Oktober 2008 AW: fremde seite analysieren Aber ein Workaround. Ich kann deine Frage nicht beantworten weil ich keine Lust hab mich in das Snoopy Script einzuarbeiten. + Multi-Zitat Zitieren
#16 20. Oktober 2008 AW: fremde seite analysieren ok habe es mit curl hinbekommen. PHP: <? //Die Session initialisieren $ch = curl_init ( "http://www.cduniverse.com/productinfo.asp?pid=7457001&style=ice/" ); curl_setopt ( $ch , CURLOPT_REFERER , "http://www.cduniverse.com/warning.asp?cart=510621910&destination=%2Fproductinfo.asp%3Fpid%3D7317169%26style%3Dice" ); curl_setopt ( $ch , CURLOPT_COOKIE , 'CartInfo=786599197%2E10%2F16%2F2008+10%3A28%3A14+AM; nh=; UID=785618111; IAmAnAdult=yes; psychicsearch=on; TabsSeen=16' ); curl_setopt ( $ch , CURLOPT_USERAGENT , "Mozilla/4.0" ); $fp = fopen ( "example_homepage.txt" , "w" ); //Session Optionen setzen curl_setopt ( $ch , CURLOPT_FILE , $fp ); curl_setopt ( $ch , CURLOPT_HEADER , 0 ); //Ausführen der Aktionen curl_exec ( $ch ); //Session beenden curl_close ( $ch ); fclose ( $fp ); $content = file_get_contents ( './example_homepage.txt' ); if( preg_match ( '~<title>(.*)</title>~' , $content , $matches )) { $titel = $matches [ 1 ]; echo $titel ; } if( preg_match ( "~class='categorylink'>(.+)</a></h2>~" , $content , $matches2 )){ $studio = $matches2 [ 1 ]; echo $studio ;} if( preg_match_all ( '~<a class="categorylink" href="\/browsecat.asp\?style=ice&cat=(\d+)&cart=(\d+)">(.*?)</a>~' , $content , $matches3 ) != false ) { foreach ( $matches3 [ 3 ] as $wert ) { echo $wert ; }}if( preg_match_all ( '~HT_Search_Name=([A-Za-z]+)\+([A-Za-z]+)">(.*?)</a>~' , $content , $matches4 ) != false ) { foreach ( $matches4 [ 3 ] as $wert ) { echo $wert ; }} if( preg_match ( "~<tr><td><a rel=\"nofollow\" href=\"\/(.*?)\"><img src~" , $content , $matches5 )){ $bildurl = "http://www.cduniverse.com/" . $matches5 [ 1 ];} // ------------------------------------------------------------------// 2 Seite analysieren// ------------------------------------------------------------------//Die Session initialisieren $ch2 = curl_init ( " $bildurl " ); curl_setopt ( $ch2 , CURLOPT_REFERER , "http://www.cduniverse.com/productinfo.asp?pid=7457001&style=ice/" ); curl_setopt ( $ch2 , CURLOPT_COOKIE , 'CartInfo=786599197%2E10%2F16%2F2008+10%3A28%3A14+AM; nh=; UID=785618111; IAmAnAdult=yes; psychicsearch=on; TabsSeen=16' ); curl_setopt ( $ch2 , CURLOPT_USERAGENT , "Mozilla/4.0" ); $fp2 = fopen ( "example_homepage2.txt" , "w" ); //Session Optionen setzen curl_setopt ( $ch2 , CURLOPT_FILE , $fp2 ); curl_setopt ( $ch2 , CURLOPT_HEADER , 0 ); //Ausführen der Aktionen curl_exec ( $ch2 ); //Session beenden curl_close ( $ch2 ); fclose ( $fp2 ); $content2 = file_get_contents ( './example_homepage2.txt' ); if( preg_match ( '~<center><p><img src=\"(.*?)\" border=0></center>~' , $content2 , $matches6 )) { $bild = $matches6 [ 1 ]); copy ( $bild , "temp,jpg" ); $dateiname2 = "temp.jpg" ; $size = getimagesize ( $dateiname2 ); $breite = $size [ 0 ]; $hoehe = $size [ 1 ]; $neueBreite = 250 ; $neueHoehe = intval ( $hoehe * $neueBreite / $breite ); $altesBild = ImageCreateFromJPEG ( $dateiname2 ); $neuesBild = imagecreatetruecolor ( $neueBreite , $neueHoehe ); ImageCopyResized ( $neuesBild , $altesBild , 0 , 0 , 0 , 0 , $neueBreite , $neueHoehe , $breite , $hoehe ); ImageJPEG ( $neuesBild , $dateiname2 , 90 ); } ?> habe aber nun eine andere frage. es gibt bestimmte darsteller die ich rausfiltern möchte. da dachte ich an in_array PHP: if( preg_match_all ( '~HT_Search_Name=([A-Za-z]+)\+([A-Za-z]+)">(.*?)</a>~' , $content , $matches4 ) != false ) { $filter = array ( 'Kapri Styles' , 'Alexis Silver' ); foreach ( $matches4 [ 3 ] as $wert ) { if (! in_array ( $wert , $filter )) { $akzeptierteWoerter [] = $wert ; } } print_r ( $akzeptierteWoerter );} aber dann wird immer nur der letzte darsteller ins array akzeptierteWoerter aufgenommen. + Multi-Zitat Zitieren