2011-05-17 1 views
1

OK, voici mon dilemme:PHPFlickr script ... pourrait-il être plus propre/plus mince?

J'ai lu partout sur le nombre de gars veulent être en mesure d'afficher une série d'images de Flickr utilisant PHPFlickr, mais se lamenter sur la façon dont l'API pour photosets ne met pas photo individuelle descriptions. Certains ont essayé de configurer leur PHP de sorte qu'il va tirer la description sur chaque photo que le script assemble la galerie sur la page. Cependant, la méthode a montré à quel point elle peut être lente et inefficace.

J'ai trouvé une autre idée de créer une chaîne de valeurs séparées par des virgules avec la photo d'identité et la description. Je le stocke sur la base de données MySQL et je l'appelle quand j'ai mon script assembler la galerie sur la page. J'utiliserais exploser pour créer un tableau de la photo d'identité et sa description, puis appelez-le pour combler les lacunes ... donc moins d'appels API et une page plus rapide. Donc, dans l'admin back-end, j'ai un formulaire où je configure les informations pour la galerie, et je donne un Set ID. Le script passerait alors et rendrait cette chaîne de valeurs séparées ("| ~ |" comme séparation). Voici ce que je suis venu avec:

include("phpFlickr.php"); 
$f = new phpFlickr("<api>"); 

$descArray = ""; 

// This will create an Array of Photo ID from the Set ID. 
// $setFeed is the set ID brought in from the form. 
$photos = $f->photosets_getPhotos($setFeed); 
foreach ($photos['photoset']['photo'] as $photo) { 
    $returnDesc = array(); 
    $photoID = $photo['id']; 
    $rsp = $f->photos_getInfo($photoID); 
    foreach ($rsp as $pic) { 
     $returnDesc[] = htmlspecialchars($pic['description'], ENT_QUOTES); 
    } 
    $descArray .= $photoID."|~|".$returnDesc[0]."|~|"; 
} 

La chaîne de descArray $ serait alors placé dans la chaîne MySQL qu'il met dans la base de données avec d'autres informations portées à partir de la forme.

Ma première question est de savoir si j'ai utilisé une seconde boucle foreach pour obtenir ces descriptions? J'ai essayé de suivre d'autres exemples sur le net qui ne l'utilisaient pas, mais ils n'ont jamais fonctionné. Quand j'ai lancé la deuxième foreach, ça a marché. Aurais-je dû faire autre chose? J'ai remarqué que les données retournées seraient deux entrées. L'un étant la description, et l'autre juste un "o" ... d'où le tableau $ returnDesc donc je pourrais juste obtenir la chaîne que je voulais et pas l'autre.

La deuxième question est de savoir si j'ai rendu cela trop compliqué ou non. J'aime essayer d'apprendre à écrire du code plus propre et plus léger, et je cherchais des opinions.

Les suggestions d'amélioration sont les bienvenues. Merci d'avance.

Répondre

0

Je ne suis pas sûr à 100% que je viens de parcourir la source pour phpFlickr, et regardé le Flickr API pour l'appel getInfo(). Mais laissez-moi aller de toute façon :)

Tout d'abord, il semble que vous ne devriez pas avoir besoin de cette boucle, comme vous le mentionnez. À quoi ressemble la sortie de ? Il se pourrait que $rsp est un tableau avec 1 élément, dans ce cas, vous pourriez fossé la boucle interne et le remplacer par quelque chose comme $pic = $rsp[0]; $desc = $pic['description'];

Aussi, je crée une nouvelle colonne « description » dans votre base de données (qui a l'ID de la photo comme clé primaire), et stocker la description dans leur propre. L'analyse des champs DB est un peu un cauchemar. Enfin, vous pouvez forcer htmlspecialchars à travailler en mode UTF8, car je ne pense pas que cela fonctionne par défaut. De mémoire, le troisième paramètre est le codage de contenu.

edit: phpFlickr n'a pas son propre système de cache? Pourquoi ne pas l'utiliser et rendre la taille du cache massive? On dirait que vous pourriez réinventer la roue ici ... peut-être que tout ce que vous devez faire est d'augmenter la taille du cache, et faire une fonction:

function getDescription ($id) 
{ 
    $rsp = $phpFlickr->photos_getInfo ($id); 
    $pic = $rsp[0]; 
    return $pic['description']; 
} 
Questions connexes