【问题标题】:Select specific Tumblr XML values with PHP使用 PHP 选择特定的 Tumblr XML 值
【发布时间】:2012-06-01 16:14:01
【问题描述】:

我的目标是使用他们提供的 XML 将 Tumblr 帖子嵌入到网站中。问题是 Tumblr 会为您发布的每张图片保存 6 种不同尺寸。我下面的代码将获得第一张图片,但它恰好太大。如果所有照片都具有相同的<photo-url> 标签,我如何从 XML 中选择一张较小尺寸的照片?

→ 这是我正在使用的 Tumblr 中的 XML:Tumblr XML。

→ 这是我目前为止的 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>"; 
?>

【问题讨论】:

    标签: php xml tumblr


    【解决方案1】:

    函数getPhoto 采用$photos 和$desiredWidth 的数组。它返回max-width (1) 最接近并且 (2) 小于或等于 $desiredWidth 的照片。您可以调整该功能以满足您的需求。需要注意的重要事项是:

    • $xml-&gt;posts-&gt;post-&gt;{'photo-url'} 是一个数组。
    • $photo['max-width'] 访问&lt;photo&gt; 标记上的max-width 属性。

    我使用echo '&lt;pre&gt;'; print_r($xml-&gt;posts-&gt;post); echo '&lt;/pre&gt;'; 发现$xml-&gt;posts-&gt;post-&gt;{'photo-url'} 是一个数组。

    我在SimpleXMLElement 的文档中找到了访问属性(例如$photo['max-width'])的语法。

    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>"; 
    }
    

    【讨论】:

    • 完美。最后一个问题,如果你不介意的话——我将如何写这个来打印我的每一篇文章,而不仅仅是最近的?
    • 另一个foreach 循环应该可以解决问题。我更新了我的答案。
    • 另外,我将$link 替换为$post['url']。
    【解决方案2】:

    与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.'" />';
    }
    

    【讨论】:

      【解决方案3】:

      也许是这样的:

      $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";
        }
      }
      

      【讨论】:

      • 感谢您的回复,但这似乎会打印出每张照片。在 XML 中,希望我可以从每个帖子中选择 。
      猜你喜欢
      • 2017-03-04
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多