1

OK、ここに私のジレンマがあります:

PHPFlickr を使用して Flickr の一連の画像を表示できるようにしたいと考えている人がどれだけいるかについては、あちこちで読んできましたが、PhotoSets の API が個々の写真の説明を表示しないことを嘆いています。スクリプトがページ上のギャラリーを組み立てる際に、各写真の説明を取得するように PHP をセットアップしようとした人もいます。ただし、この方法は、時間がかかり、非効率的である可能性があることを示しています。

写真 ID と説明を使用してカンマ区切りの値の文字列を作成するというアイデアを別の場所で思いつきました。私はそれを MySQL データベースに保存し、スクリプトでページ上のギャラリーを組み立てる際にそれを呼び出します。爆発を使用して写真 ID とその説明の配列を作成し、それを呼び出してギャップを埋めます...したがって、API 呼び出しが少なくなり、ページが高速になります。

そのため、バックエンドの管理者には、ギャラリーの情報を設定するフォームがあり、セット 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 文字列に配置され、フォームから取り込まれた他の情報とともにデータベースに配置されます。

私の最初の質問は、これらの説明を取得するために 2 番目の foreach ループを使用することは正しいですか? それを使用していないネット上の他の例をたどってみましたが、うまくいきませんでした。2番目のforeachを実行すると、うまくいきました。私は何か他のことをすべきでしたか?

返されるデータが 2 つのエントリになることに気付きました。1 つは説明であり、もう 1 つは単なる「o」です。したがって、配列 $returnDesc を使用して、必要な 1 つの文字列だけを取得し、もう 1 つの文字列を取得できませんでした。

2 番目の質問は、これを複雑にしすぎたかどうかです。私はよりクリーンで無駄のないコードを書くことを学ぶのが好きで、意見を探していました。

改善に関する提案は大歓迎です。前もって感謝します。

4

1 に答える 1

0

phpFlickrのソースを参照し、呼び出しの Flickr APIを調べただけなので、100% 確信はありませんgetInfo()。とにかくやってみましょう:)

まず、あなたが言及したように、そのループは必要ないようです。の出力はprint_r($rsp);どのように見えますか? それは$rsp1つの要素を持つ配列である可能性があります。その場合、内側のループを捨てて、次のようなものに置き換えることができます$pic = $rsp[0]; $desc = $pic['description'];

また、データベース テーブル (主キーとして写真 ID を持つ) に新しい「説明」列を作成し、説明を独自に保存します。そのような db フィールドの解析は、ちょっとした悪夢です。最後に、強制的に UTF8 モードで動作させたいと思うかもしれませhtmlspecialcharsん。デフォルトではそうではないと思うからです。メモリから、3 番目のパラメーターはコンテンツのエンコードです。

編集: phpFlickr には独自のキャッシュ システムがありませんか? それを使用して、キャッシュサイズを巨大にしないのはなぜですか? ここで車輪を再発明しているようです...おそらく、必要なのはキャッシュサイズを増やしてgetDescription関数を作成することだけです:

function getDescription ($id)
{
    $rsp = $phpFlickr->photos_getInfo ($id);
    $pic = $rsp[0];
    return $pic['description'];
}
于 2011-06-23T11:16:24.463 に答える