2

私の目標は、提供されたXMLを使用してTumblrの投稿をWebサイトに埋め込むことです。問題は、Tumblrが投稿する各画像の6つの異なるサイズを保存することです。以下の私のコードは最初の画像を取得しますが、それはたまたま大きすぎます。すべての写真に同じタグが付いている場合、XMLから小さいサイズの写真の1つを選択するにはどうすればよい<photo-url>ですか?

→これは私が使用しているTumblrのXMLです:TumblrXML 。

→これはこれまでの私のPHPコードです:

<?php
$request_url = "http://kthornbloom.tumblr.com/api/read?type=photo";
$xml = simplexml_load_file($request_url);
$title = $xml->posts->post->{'photo-caption'};
$photo = $xml->posts->post->{'photo-url'};
echo '<h1>'.$title.'</h1>';
echo '<img src="'.$photo.'"/>"'; 
echo "…";
echo "</br><a target=frame2 href='".$link."'>Read More</a>"; 
?>
4

3 に答える 3

1

で写真を取得するにはmax-width="100"

$xml = simplexml_load_file('tumblr.xml');

echo '<h1>'.$xml->posts->post->{'photo-caption'}.'</h1>';

foreach($xml->posts->post->{'photo-url'} as $url) {
    if ($url->attributes() == '100')
        echo '<img src="'.$url.'" />';
}
于 2012-06-01T16:26:44.353 に答える
1

この関数はとgetPhotoの配列を取ります。(1)に最も近く、(2)以下の写真を返します。ニーズに合わせて機能を調整できます。注意すべき重要なことは次のとおりです。$photos$desiredWidthmax-width$desiredWidth

  • $xml->posts->post->{'photo-url'}は配列です。
  • $photo['max-width']タグのmax-width属性にアクセスします。<photo>

私は以前、配列であることがecho '<pre>'; print_r($xml->posts->post); echo '</pre>';わかりました。$xml->posts->post->{'photo-url'}

$photo['max-width']のドキュメントで、属性(たとえば)にアクセスするための構文を見つけましたSimpleXMLElement

function getPhoto($photos, $desiredWidth) {
    $currentPhoto = NULL;
    $currentDelta = PHP_INT_MAX;
    foreach ($photos as $photo) {
        $delta = abs($desiredWidth - $photo['max-width']);
        if ($photo['max-width'] <= $desiredWidth && $delta < $currentDelta) {
            $currentPhoto = $photo;
            $currentDelta = $delta;
        }
    }
    return $currentPhoto;
}

$request_url = "http://kthornbloom.tumblr.com/api/read?type=photo";
$xml = simplexml_load_file($request_url);

foreach ($xml->posts->post as $post) {
    echo '<h1>'.$post->{'photo-caption'}.'</h1>';
    echo '<img src="'.getPhoto($post->{'photo-url'}, 450).'"/>"'; 
    echo "...";
    echo "</br><a target=frame2 href='".$post['url']."'>Read More</a>"; 
}
于 2012-06-01T16:50:10.503 に答える
0

多分これ:

$doc = simplexml_load_file(
  'http://kthornbloom.tumblr.com/api/read?type=photo'
);

foreach ($doc->posts->post as $post) {
  foreach ($post->{'photo-url'} as $photo_url) {
    echo $photo_url;
    echo "\n";
  }
}
于 2012-06-01T16:18:43.890 に答える