2011-03-08 53 views
0

我设计了一个漂亮的小网站,它使用phpflickr(PHP Flickr API)从flickr组中拉出图片,然后根据该信息提取它的标签显示信息。需要重新编码速度的算法(Flickr API)

我的问题是,我认为我有太多的循环,因此通过API的Flickr太多的查询,显着减缓加载过程。这里是代码:

<?php 

require_once("phpFlickr/phpFlickr.php"); 

$f = new phpFlickr("apicode","secretcode"); 
$f->auth("write"); 
$token = $f->auth_checkToken(); 
$photos = $f->groups_pools_getPhotos("groupcode", null, null, "description,tags"); 
$nsid = $token['user']['nsid']; 
$voted = $_POST['voted']; 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta name="Keywords" content="Flickr, App" /> 
    <meta name="Description" content="Flickr group rater" /> 
    <title>My App</title> 
    <!--<link rel="shortcut icon" href="/media/images/favicon.ico" type="image/x-icon"/>--> 
</head> 
<body> 

<? 


if ($voted == null){ 

    foreach ($photos['photo'] as $photo) { 

     $alreadyvoted = "false"; 
     $tags = $f->tags_getListPhoto($photo['id']); 

     foreach($tags as $tagdata) { 
      if(is_array($tagdata)) { 
       foreach($tagdata as $author) { 
        if($author == $nsid) $alreadyvoted = "true"; 
       } 
      } 
     } 


     if ($alreadyvoted == "false") { 
      echo "<div class=\"container\" style=\"border-width: 1px; border-style: solid; padding: 20px; margin-top: 20px; width: 1100px; height: 600px; margin-left: auto; margin-right: auto;\">"; 
      echo "<div class=\"photo\" style=\"float: left;\">"; 
      echo "<a href=\"http://www.flickr.com/photos/$photo[owner]/$photo[id]/in/pool-hbu\">"; 
      echo "<img border='0' alt='$photo[title]' ". 
       "src=\"" . $f->buildPhotoURL($photo, "Medium 640") . "\" />"; 
      echo "</a><div style=\"width: 500px;\"><p>$photo[description]</p></div></div>"; 
      echo "<div style=\"width: 400px; float:right;\"><h2>$photo[title]</h2></div>"; 
      echo "<div style=\"float: right; margin-left: 40px; margin-right: 40px; border: 1px solid; padding: 10px;\">"; 
      echo "<form action=\"index.php\" method=\"post\"> 
        <input type=\"hidden\" name=\"photoid\" value=\"$photo[id]\" /> 
        <input type=\"hidden\" name=\"voted\" value=\"voted$photo[id]\" /> 
        Tag:<br /> 
        <input type=\"radio\" name=\"tag\" value=\"delete\" />Delete<br /> 
        <input type=\"radio\" name=\"tag\" value=\"save\" />Save<br /> 
        <br /><a href=\"http://www.flickr.com/photos/$photo[owner]/$photo[id]/lightbox/\">View Large</a><br /> 
        <br />Comment: <br /><textarea cols=\"40\" rows=\"10\" name=\"comment\"></textarea><br /> 
        <br /><input type=\"submit\" value=\"Submit\" /></form>"; 
      echo "</div>"; 
      echo "</div>"; 
      echo "<br /><br />\n"; 
     } 
    } 


} 

else if ($voted != null){ 

    $photoid = $_POST['photoid']; 
    $totag = $_POST['tag']; 
    $tocomment = $_POST['comment']; 
    $tags = $f->tags_getListPhoto($photoid); 

    if (($totag == null) || ($tocomment == null)) die("Make sure you have both a tag and a comment selected"); 
    else { 
     if($totag == "delete"){ 
      $finaltag = "delete"; 
      foreach ($tags as $row){ 
       if (($row["raw"] == "delete") || ($row["raw"] == "delete1") || ($row["raw"] == "delete 1")) $finaltag = "delete2"; 
       else if (($row["raw"] == "delete2") || ($row["raw"] == "Delete 2")) $finaltag = "delete3"; 
       else if (($row["raw"] == "delete3") || ($row["raw"] == "Delete 3")) $finaltag = "delete4"; 
       else if (($row["raw"] == "delete4") || ($row["raw"] == "Delete 4")) $finaltag = "delete5"; 
       else if (($row["raw"] == "delete5") || ($row["raw"] == "Delete 5")) $finaltag = "delete6"; 
       else if (($row["raw"] == "delete6") || ($row["raw"] == "Delete 6")) $finaltag = "delete7"; 
       else if (($row["raw"] == "delete7") || ($row["raw"] == "Delete 7")) $finaltag = "delete8"; 
       else if (($row["raw"] == "delete8") || ($row["raw"] == "Delete 8")) $finaltag = "delete9"; 
       else if (($row["raw"] == "delete9") || ($row["raw"] == "Delete 9")) $finaltag = "delete10"; 
       else if (($row["raw"] == "delete10") || ($row["raw"] == "Delete 10")) $finaltag = "delete11"; 
       else if (($row["raw"] == "delete11") || ($row["raw"] == "Delete 11")) $finaltag = "delete12"; 
       else if (($row["raw"] == "delete12") || ($row["raw"] == "Delete 12")) $finaltag = "delete13"; 
       else if (($row["raw"] == "delete13") || ($row["raw"] == "Delete 13")) $finaltag = "delete14"; 

      } 
     } 

     else if($totag == "save"){ 
      $finaltag = "save"; 
      foreach ($tags as $row){ 
       if (($row["raw"] == "save") || ($row["raw"] == "save1") || ($row["raw"] == "save 1")) $finaltag = "save2"; 
       else if (($row["raw"] == "save2") || ($row["raw"] == "Save 2")) $finaltag = "save3"; 
       else if (($row["raw"] == "save3") || ($row["raw"] == "Save 3")) $finaltag = "save4"; 
       else if (($row["raw"] == "save4") || ($row["raw"] == "Save 4")) $finaltag = "save5"; 
       else if (($row["raw"] == "save5") || ($row["raw"] == "Save 5")) $finaltag = "save6"; 
       else if (($row["raw"] == "save6") || ($row["raw"] == "Save 6")) $finaltag = "save7"; 
       else if (($row["raw"] == "save7") || ($row["raw"] == "Save 7")) $finaltag = "save8"; 
       else if (($row["raw"] == "save8") || ($row["raw"] == "Save 8")) $finaltag = "save9"; 
       else if (($row["raw"] == "save9") || ($row["raw"] == "Save 9")) $finaltag = "save10"; 
       else if (($row["raw"] == "save10") || ($row["raw"] == "Save 10")) $finaltag = "save11"; 
       else if (($row["raw"] == "save11") || ($row["raw"] == "Save 11")) $finaltag = "save12"; 
       else if (($row["raw"] == "save12") || ($row["raw"] == "Save 12")) $finaltag = "save13"; 
       else if (($row["raw"] == "save13") || ($row["raw"] == "Save 13")) $finaltag = "save14"; 
      } 
     } 

     else die("Something went wrong there, try again."); 

     $finalcomment = $tocomment."\n\n -Voted \"".$finaltag."\" (by the flickr rater app</a>)"; 

     $f->photos_comments_addComment($photoid, $finalcomment); 
     $f->photos_addTags($photoid, $finaltag); 

     header("Refresh: 0;"); 
    } 

} 


?> 

</body> 
</html> 

回答

0

Cache。

例如,将组中的照片列表缓存5分钟,并缓存给定照片的标签60分钟。 (是标签要经常改变?)缓存

例通过序列数据,并写入到磁盘:

$cacheTTL = 300; 
$cacheFile = 'photos.dat'; 
if (file_exists($cacheFile) && filemtime($cacheFile) > (time() - $cacheTTL)){ 
    $photos = unserialize(file_get_contents($cacheFile)); 
} 
else { 
    $photos = $f->groups_pools_getPhotos("groupcode", null, null, "description,tags"); 
    file_put_contents($cacheFile,serialize($photos)); 
} 
+0

标签由第2更新,这就是为什么我离开phpflickr的缓存选项关闭。上面的代码只会缓存else语句中的部分吗? – bswinnerton 2011-03-08 03:03:37