Avatar billede mrkaynex Nybegynder
20. juni 2011 - 15:56 Der er 17 kommentarer og
1 løsning

Ekstrahere flere billedimgs fra side

Hej,

Jeg har planer om at lave et script der skal trække billedurls fra en ekstern side. Det er screenshots fra steam jeg har planer om at hente ud.

Nedenfor er den stump kildekode det hentes fra. De 2 img urls ses ud fra "url: -----".

Men hvordan kan jeg hente det, og altså kun få de 2 urls - eller flere, alt efter hvor mange man vil have?

Mvh
Avatar billede pstidsen Novice
20. juni 2011 - 16:04 #1
Nedenfor er den stump kildekode det hentes fra.????

Kender du php include?
http://www.w3schools.com/PHP/php_includes.asp
og http://php.net/manual/en/function.include.php
Avatar billede mrkaynex Nybegynder
20. juni 2011 - 16:12 #2
Undskyld pstidsen, men hvordan vil det dække mine behov? Jeg har en kildekode fra en anden hjemmeside, og i denne kildekode findes der flere img urls jeg skal have ekstraheret, uden alt andet kode.
Avatar billede vagnk Juniormester
20. juni 2011 - 16:33 #3
Jamen så forstår jeg det sådan at du har en fil, hvor du vil finde elementer der består af et eller andet f.eks. "<img ... src= ...> eller som du antyder "url:...", hvilket lyder som css-filer. Er det korrekt?

Det ville måske have hjulpet hvis du havde vedlagt den kildekode du skriver om.
Avatar billede pstidsen Novice
20. juni 2011 - 16:38 #4
#2: ok men skriv stadig kode...
Avatar billede mrkaynex Nybegynder
20. juni 2011 - 17:30 #5
Hov! Jeg glemte koden i det oprindelige topic, sorry!

Nedenfor kan i se at der er 2stk url: "---";

Det er disse urls jeg gerne vil have fat i. Uanset hvor mange der måtte være.

Håber I kan tyde koden.

            <script type='text/javascript'>
                addScreenshot({
                    link: "http://steamcommunity.com/id/mrkayne/screenshot/595814531186836087",
                    id: "595814531186836087",
                    privacy: "public",
                    width: 1680,
                    height: 1050,
                    appid: 240,
                    appname: "Counter-Strike: Source",
                    timecreated: 1308566827,
                    commentcount: 0,
                    caption: "",
                    url: "http://cloud.steampowered.com/ugc/595814531186836087/B9CF28DB3408B3B7A1705F699B90B017F84A4EE7/",
                    thumburl: "http://cloud.steampowered.com/ugc/595814531186838384/03A7539B4B613692DEB53044C3F5570FB9020140/"
                });
            </script>

            <div class="screenshot_thumb_area" id="screenshot_595814531186805543">

                <div class="screenshot_comment_count"><a class="screenshot_comment_link" href="http://steamcommunity.com/id/mrkayne/screenshot/595814531186805543"><img class="screenshot_comment_icon" src="http://cdn.steamcommunity.com/public/images/skin_1/iconComments.png" width="14" height="14" border="0" />0</a><br /></div>
                                <a id="thumb_link_595814531186805543" class="screenshot_thumb_link" href="http://steamcommunity.com/id/mrkayne/screenshot/595814531186805543" onmousemove="screenshotStartHover(595814531186805543);" onmouseout="screenshotStopHover();">
                    <img class="screenshot_thumb_img"  src="http://cloud.steampowered.com/ugc/595814531186809768/7BD432407BECCF14371D92BEB07C4FCA154F3AC7/" width="168" height="105" />
                </a>
                <div style="clear:right;"></div>
            </div>

            <script type='text/javascript'>
                addScreenshot({
                    link: "http://steamcommunity.com/id/mrkayne/screenshot/595814531186805543",
                    id: "595814531186805543",
                    privacy: "public",
                    width: 1680,
                    height: 1050,
                    appid: 240,
                    appname: "Counter-Strike: Source",
                    timecreated: 1306958366,
                    commentcount: 0,
                    caption: "",
                    url: "http://cloud.steampowered.com/ugc/595814531186805543/59720BC7DC9A61919387E974F9E76140E06B4A3D/",
                    thumburl: "http://cloud.steampowered.com/ugc/595814531186809768/7BD432407BECCF14371D92BEB07C4FCA154F3AC7/"
                });
            </script>
Avatar billede mrkaynex Nybegynder
20. juni 2011 - 17:49 #6
Jeg har fundet, og rettet lidt i, følgende kode:

<?php
$url = 'http://steamcommunity.com/id/mrkayne/screenshots/';
$contents = file_get_contents($url);

/* Henter alt indenfor addSceenshot */
$str = $contents;
$start  = strpos($str, 'addScreenshot({');
$end    = strpos($str, '});', $start + 1);
$length = $end - $start;
$result = substr($str, $start + 16, $length - 1);

/* Henter url */
$str2 = $result;
$start2  = strpos($str2, 'url:');
$end2    = strpos($str2, '",', $start2 + 3);
$length2 = $end2 - $start2;
$result2 = substr($str2, $start2 + 6, $length2 - 1);

echo str_replace('",', "", $result2);
?>

Det virker til den grad, at jeg får den første URL den finder, men ikke de andre. Jeg er også sikker på at det kan gøres nemmere, meget nemmere, men jeg ved ikke hvordan.
Avatar billede majbom Novice
20. juni 2011 - 19:29 #7
hvis dette kan bruges:



kan du gøre således:

$url = 'http://steamcommunity.com/id/mrkayne/screenshots/';
  $subject = file_get_contents($url);
  $pattern = '/url: "([a-zA-Z0-9\.\/:]*)"/';
  preg_match($pattern, $subject, $matches);
  print_r($matches);
Avatar billede mrkaynex Nybegynder
20. juni 2011 - 19:50 #8
Hej Splazz,

Ja, det begynder sku at ligne noget. Der er rigtig nok to URIs, desværre opfanger den kun den samme, af ukendte årsager.

Jeg ved ikke om du kan se en løsning på det?
Avatar billede majbom Novice
20. juni 2011 - 20:36 #9
$pattern = '/\surl: "([a-zA-Z0-9\.\/:]*)"/';
preg_match_all($pattern, $subject, $matches);
print_r($matches[1]);


sådan! :)
Avatar billede mrkaynex Nybegynder
20. juni 2011 - 23:02 #10
Splazz, du er pisse nice! Det er bare perfekt! :D

Smid et svar, og du vil få point!

Hvis du har lyst, kan du måske svare på, hvordan jeg kan vælge, hvordan mange den skal outputte?

Jeg kører det igennem en foreach, så den skal vel smides igennem en for() eller noget også, eller hvordan?
Avatar billede mrkaynex Nybegynder
21. juni 2011 - 00:00 #11
Nevermind, fandt selv ud af løsningen :)

$i = 0;
if(++$i == 5) break;

Men smid et svar! Og super mange gange tak! :)
Avatar billede mrkaynex Nybegynder
21. juni 2011 - 00:12 #12
Haha.. Nyt spørgsmål..

Jeg har lavet 2 foreaches nu, en der henter thumbnail og en der henter billedet. Er det muligt at få kørt disse sammen?

<?php
$url = 'http://steamcommunity.com/id/mrkayne/screenshots/';
    $subject = file_get_contents($url);
        $pattern = '/\surl: "([a-zA-Z0-9\.\/:]*)"/';
        preg_match_all($pattern, $subject, $matches);

        foreach($matches[1] AS $match){
            echo $match."<br /><br />";
        }
             
echo "<br />----<br /><br />";

        $pattern = '/\sthumburl: "([a-zA-Z0-9\.\/:]*)"/';
        preg_match_all($pattern, $subject, $matches); 

        $i = 0;
        foreach($matches[1] AS $match){   
            echo $match."<br /><br />";
            if(++$i == 3) break;
        }
             
?>
Avatar billede majbom Novice
21. juni 2011 - 08:37 #13
du kan lave dit pattern om til:

$pattern = '/url: "([a-zA-Z0-9\.\/:]*)"/';


så henter den begge adresser (så du har 4 adresser i dit array)
Avatar billede majbom Novice
21. juni 2011 - 08:38 #14
og det skulle have været et svar :)
Avatar billede majbom Novice
21. juni 2011 - 11:22 #15
tfp :)

spiller det?
Avatar billede mrkaynex Nybegynder
21. juni 2011 - 17:20 #16
Hey!

Både og.

Jeg har den til at vise thumbnails der linker til det oprindelige billede. Der er dog lige et problem; thumbnails er forskudt i forhold til de oprindelige billeder.

Det betyder, at thumbnail 1 vises til det oprindelige billede 2, og thumbnail 2 til billede 3..

Jeg kan godt oprette et nyt spørgsmål til det, men hvis du kan se problemet allerede nu, vil jeg da blive taknemmelig :)

<?php
$url = 'http://steamcommunity.com/id/mrkayne/screenshots/';
    $subject = file_get_contents($url);
        $pattern = '/url: "([a-zA-Z0-9\.\/:]*)"/';
        preg_match_all($pattern, $subject, $matches); 
        $i = 1;
        foreach($matches[1] AS $key => $match) {
            if($key % 2) {
                //print 'thumbnail url foto '.$i.': '.$match.'<br>';
                $thumb = $match;
                $i++;
            }
            else {
                //print 'org url foto '.$i.': '.$match.'<br>';
                $pic = $match;
                echo "<a href=\"".$pic."\"><img src=\"".$thumb."\"></a>";
            }
        } 
       
        echo "<br><br>";
        print_r($matches[1]);           
?>
Avatar billede mrkaynex Nybegynder
21. juni 2011 - 17:59 #17
Jeg rodede selv med det, og fandt frem til en løsning :)

<?php
$url = 'http://steamcommunity.com/id/mrkayne/screenshots/';
    $subject = file_get_contents($url);
        $pattern = '/url: "([a-zA-Z0-9\.\/:]*)"/';
        preg_match_all($pattern, $subject, $matches); 
        $x = 1;
        $z = 0;
        foreach($matches[1] AS $match) {
            if($x % 2) {
                $pic = $match;
            }
            else {
                $thumb = $match;
                echo "<a href=\"".$pic."\"><img src=\"".$thumb."\"></a>";
                if(++$z == 5) break;

            }
            $x++;
           
        } 
                 
?>
Avatar billede majbom Novice
21. juni 2011 - 18:02 #18
super :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester