Скрипт PHPFlickr ... это может быть чище / экономнее? - PullRequest
1 голос
/ 17 мая 2011

Хорошо, вот моя дилемма:

Я прочитал все о том, сколько парней хотят иметь возможность отображать набор изображений из Flickr с помощью PHPFlickr, но сетовать на то, что API для PhotoSets не делаетвыложите индивидуальные фото описания.Некоторые пытались настроить свой PHP, поэтому он будет тянуть описание на каждой фотографии, когда скрипт собирает галерею на странице.Однако метод показал, насколько медленным и неэффективным он может быть.

В другом месте я нашел идею создать строку значений, разделенных запятыми, с идентификатором фотографии и описанием.Я сохранял это в базе данных MySQL и затем вызывал его, когда мой скрипт собирал галерею на странице.Я бы использовал explode для создания массива идентификатора фотографии и его описания, а затем вызывал бы его, чтобы заполнить пробелы ... таким образом, меньше вызовов API и более быстрая страница.

Так что в бэк-эндеadmin, у меня есть форма, в которой я настраиваю информацию для галереи, и я вручаю Set ID.Затем сценарий прошел бы и создал эту строку разделенных значений («| ~ |» как разделение).Вот что я придумал:

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]."|~|";
}

Строка $ descArray будет помещена в строку MySQL, которая помещает ее в базу данных вместе с другой информацией, извлекаемой из формы.

MyПервый вопрос: правильно ли я использовал второй цикл foreach для получения этих описаний?Я пытался следовать другим примерам по всей сети, которые не использовали это, но они никогда не работали.Когда я привел на второй foreach, то это сработало.Должен ли я сделать что-то еще?

Я заметил, что возвращенные данные будут две записи.Один из них - описание, а другой - просто "o" ... отсюда и массив $ returnDesc, чтобы я мог получить только одну нужную строку, а не другую.

Второй вопрос: могу ли я сделать это тоже?сложно или нет.Мне нравится пытаться научиться писать более понятный код, и я искал мнения.

Предложения по улучшению приветствуются.Заранее спасибо.

1 Ответ

0 голосов
/ 23 июня 2011

Я не уверен на 100%, так как я только что просмотрел источник для phpFlickr и искал Flickr API для вызова getInfo().Но в любом случае позвольте мне пойти дальше:)

Во-первых, похоже, вам не нужен этот цикл, как вы упомянули.Как выглядит вывод print_r($rsp);?Возможно, $rsp - это массив с 1 элементом, и в этом случае вы можете обойти внутренний цикл и заменить его чем-то вроде $pic = $rsp[0]; $desc = $pic['description'];

Кроме того, я бы создал новый столбец «описание»в вашей таблице базы данных (которая имеет идентификатор фотографии в качестве первичного ключа), и сохраните описание самостоятельно.Разбор таких дб полей - это настоящий кошмар.Наконец, вы можете захотеть заставить htmlspecialchars работать в режиме UTF8, потому что я не думаю, что это происходит по умолчанию.По памяти третий параметр - это кодировка содержимого.

edit: Разве phpFlickr не имеет своей собственной системы кэширования?Почему бы не использовать это и не увеличить размер кэша?Похоже, что вы, возможно, заново изобретаете колесо ... возможно, все, что вам нужно сделать, это увеличить размер кэша и сделать функцию getDescription:

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