views:

53

answers:

4

Hi there. My first question here, after enjoying lots og other peoples questions and answers. Thanks for that :)

Im trying to work with vimeo's api, and im getting a response I can't figure out to use as I intend. I think its simple for some of you guys, but can't wrap my head around it.

I got a bunch of video id's that I need to get the thumbnail url for. I would like to "ask" the response "What's the thumb url for this id" and loop though all my id's like that.

The response object looks like this in a stripped down version:

stdClass Object
(
    [videos] => stdClass Object
        (
            [video] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 8128888
                            [thumbnails] => stdClass Object
                                (
                                    [thumbnail] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [height] => 75
                                                    [width] => 100
                                                    [_content] => http://ts.vimeo.com.s3.amazonaws.com/370/931/37093137_100.jpg
                                                )
                                        )
                                )
                        )
                    [1] => stdClass Object
                        (
                            [id] => 8760295
                            [thumbnails] => stdClass Object
                                (
                                    [thumbnail] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [height] => 75
                                                    [width] => 100
                                                    [_content] => http://ts.vimeo.com.s3.amazonaws.com/417/146/41714684_100.jpg
                                                )
                                        )
                                )
                        )
                )
        )
)

I need to use it like this (again stripped down), its the quoted part I cant figure out:

<?php while ( $vid->fetchRecord() ) :
    $vid_id = $vid->get_field('video');
    $thumb = "find [video][thumbnail][0][_content] where [video][id] = $vid_id";
?>
<img src="<?php echo $thumb;?>" 
<?php endwhile ?>

So, how close am I? :P

+2  A: 

You could redefine that structure into a simpler array for your use. The following assumes the structure above is stored in $response:

$videos = array();
foreach($response->videos->video as $video) {
  if(count($video->thumbnails->thumbnail) > 0) {
    $videos[$video->id] = $video->thumbnails->thumbnail[0]->_content;
  }
}

That will leave you with an array $videos of id to url mappings:

Array(
  '8128888' => 'http://ts.vimeo.com.s3.amazonaws.com/370/931/37093137_100.jpg',
  '8760295' => 'http://ts.vimeo.com.s3.amazonaws.com/417/146/41714684_100.jpg'
)

Your output code would then just need to be:

<?php while ( $vid->fetchRecord() ) :
    $vid_id = $vid->get_field('video');
    $thumb = $videos[$vid_id];
?>
<img src="<?php echo $thumb;?>" 
<?php endwhile ?>
Cryo
Yes, works perfect. Thanks a lot
Greenie
+1  A: 
// Assuming the response you posted above is stored in the variable $response

$thumbnails = array ( );

foreach ( $response->videos->video as $vID => $v )
{
        $thumbnails [ $vID ] = $v->thumbnails->thumbnail[0]->_content;
}
lamas
Thanks, but I went for Cryos' answer. He explained it so a noob like me understood. But now I see your answer does the same.
Greenie
A: 

If i'm correct the first part of code you've entered may correspond to executing something like this:

var_dump($responseObject);

So following that assumption you can try and get a thumbnails for all returned videos like that:

<?php foreach($responseObject->videos->video as $video) { ?>
    <img src="<?= $video->thumbnails->thumbnail[0]->_content?>" />
<?php } ?>

This is what I think you try to accomplish with your while() loop.

Mike P.
yeah but that only gives me the urls, need to map it to each id, as Cryo suggests
Greenie
A: 

You could walk the above posted object/arrays like this:

// $vid is the object you posted above
foreach( $vid->videos->video as $key => &$video ) {
    echo "id: " . $video->id;
    echo "thumbnails: \n";
    foreach( $video->thumbnails->thumbnail as $key => $thumb ) {
        echo "thumb {$key}: <img src=\" " . $thumb->_content . " \"> \n";
    }
}

There are simpler ways, if you don't need to care wheter there is only one or multiple thumbnails.

svens