Question

I am using the picasa api to do a community search and now I want to put thumbnails on the search results too. How do I do this? I want the results to have thumbnails and clicking on a thumbnail should take you to the image in web album.

<?php

require_once 'Zend/Loader.php';

Zend_Loader::loadClass('Zend_Gdata_Photos');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Query');

$search=$_REQUEST['id'];

$serviceName = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
$user = "abc@gmail.com";
$pass = "password";


$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $serviceName);

$gp = new Zend_Gdata_Photos($client, "Google-DevelopersGuide-1.0");

// Community search queries aren't currently supported through a separate
// class in the PHP client library.  However, we can use the generic 
// Zend_Gdata_Query class as an alternative

// URL for a community search request
// Creates a Zend_Gdata_Query
$query = $gp->newQuery("https://picasaweb.google.com/data/feed/api/all");

// looking for photos in the response
$query->setParam("kind", "photo");

// full text search
$query->setQuery($search);

// maximum of 10 results
$query->setMaxResults("6");

// There isn't a specific class for representing a feed of community
// search results, but the Zend_Gdata_Photos_UserFeed understands
// photo entries, so we'll use that class
$userFeed = $gp->getUserFeed(null, $query);
foreach ($userFeed as $photoEntry) 
{
 echo $photoEntry->getTitle()->getText() . "</br > ";
// The 'alternate' link on a photo represents the link to
// the image page on Picasa Web Albums
$link=$photoEntry->getLink('alternate')->getHref();
echo "<img src='".$link."'>";
echo '<a href="'.$link.'">'.$photoEntry->getLink('alternate')->getHref().'</a> <br />';
echo "<br />\n";

}

?>
Was it helpful?

Solution

The algorithm:

  1. Get the URL for the photo.
  2. Parse the URL into its component parts (scheme, host, path, filename).
  3. Inject the thumbnail qualifier before the filename.
  4. Reassemble the component parts.

For example:

// Define thumbnail properties (w = width, 200 = pixels).
$THUMBMAIL = "w200";

// Get the "source" URL for the image.
$imgSrc  = $photoEntry->content->getSrc();

// Extract the component parts.
$url = parse_url( $imgSrc );

// Extract the path and inject the thumbnail size.
$url["path"] = dirname( $path ) . "/$THUMBNAIL/" . basename( $path );

// Reassemble the URL.
$thumbnail = build_url( $url );

You should be able to use http_build_url, but I had naming conflicts, so wrote this:

function build_url( $url ) {
  return $url["scheme"] . "://" . $url["host"] . "/" . $url["path"];
}

Read this article for more details.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top