By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,913 Members | 1,356 Online
Bytes IT Community
Submit an Article
Got Smarts?
Share your bits of IT knowledge by writing an article on Bytes.

Retrieve a Random Image URL From Google With PHP

P: 1
A recent project involved me obtaining a random image from the Web and using it in some specific fashion. I chose to use PHP to access Google Images for a random image URL. The image could be generic or related to a specific topic.

Here's the PHP function that queries Google Images and returns an image URL:
Expand|Select|Wrap|Line Numbers
  1. function GetRandomImageURL($topic='', $min=0, $max=100)
  2. {
  3.   // get random image from Google
  4.   if ($topic=='') $topic='image';
  5.   $ofs=mt_rand($min, $max);
  6.   $geturl='' . $topic . '&start=' . $ofs . '&gbv=1';
  7.   $data=file_get_contents($geturl);
  9.   $f1='<div id="center_col">';
  10.   $f2='<a href="/imgres?imgurl=';
  11.   $f3='&amp;imgrefurl=';
  13.   $pos1=strpos($data, $f1)+strlen($f1);
  14.   if ($pos1==FALSE) return FALSE;
  15.   $pos2=strpos($data, $f2, $pos1)+strlen($f2);
  16.   if ($pos2==FALSE) return FALSE;
  17.   $pos3=strpos($data, $f3, $pos2);
  18.   if ($pos3==FALSE) return FALSE;
  19.   return substr($data, $pos2, $pos3-$pos2);
  20. }
This function generates a random number, sends that off as a "start" parameter with an image query to Google, and grabs the HTML code generated. The "gbv=1" parameter is required - without it, Google will return a generic page instead of the image results.

If any markers ($f1, $f2 or $f3) are not found, the function will return FALSE. Otherwise, the first image (from the "start" parameter) is parsed, and the corresponding URL is retrieved.

Note that Google may alter its HTML along the way, making this function obsolete. Also, large "start" values seem to exceed the number of images Google is willing to display. At the time of this writing, the maximum was about 980.

The $topic parameter allows the option of specifying a certain type of image. Pass 'vehicle' and an image of a vehicle is the target; pass 'balloon', and.. well, you get the idea. Note that this isn't guaranteed to focus on a topic, as someone may have posted a picture with 'balloon' as an image tag but without any balloons in the picture.

Although any randomiser function could be used, mt_rand() is used here due to its speed and reasonable randomness.

This example function demonstrates the use of the above GetRandomImageURL() function:
Expand|Select|Wrap|Line Numbers
  1. function ShowRandomImage($topic='')
  2. {
  3.   echo('<table border="1"><tr><td>');
  4.   $url=GetRandomImageURL($topic);
  5.   if ($url==FALSE) echo('Error while searching');
  6.   else {
  7.     echo(htmlentities($url) . '<br />');
  8.     echo('<img width="640" src="' . $url . '" />');
  9.   }
  10.   echo('</td></tr></table>');
  11. }
  13. ShowRandomImage();
  14. ShowRandomImage('rothschild');
Apr 12 '11 #1
Share this Article
Share on Google+

Expert 100+
P: 250
Although I haven't tested it, it looks pretty cool.
May 25 '11 #2

P: 1
Hmmm, this doesn't seem to work anymore. Any ideas why?
Dec 11 '13 #3