Flickr API返回重复的图像

时间:2013-09-11 03:12:49

标签: php flickr phpflickr

我正在尝试使用Flickr API从flickr获取图像,但我无法弄清楚如何只获取独特的图像。我已经回顾了我正在使用的specific method的论点,这是我想出的:

<?php
class Flickr {

    private $flickr_key;
    private $flickr_secret;
    private $format = 'json';

    public function __construct( $flickr_key, $flickr_secret ) {

        $this->flickr_key = $flickr_key;
        $this->flickr_secret = $flickr_secret;
    }


    public function searchPhotos( $query = '', $tags = '' ) {

        $urlencoded_tags = array(); 

        $tags_r = explode(',', $tags);
        foreach($tags_r as $tag){
            $urlencoded_tags[] = urlencode($tag);
        }

        $url = 'http://api.flickr.com/services/rest/?';
        $url .= 'method=flickr.photos.search';
        $url .= '&text=' . urlencode($query);
        $url .= '&tags=' . implode(',', $urlencoded_tags);
        $url .= '&sort=relevance';
        $url .= '&safe_search=1';
        $url .= '&content_type=4';
        $url .= '&api_key=' . $this->flickr_key;
        $url .= '&format=' . $this->format;
        $url .= '&per_page=10';
        $url .= '&media=photos';
        $url .= '&privacy_filter=1';

        $result = @file_get_contents( $url );


        $json = substr( $result, strlen( "jsonFlickrApi(" ), strlen( $result ) - strlen( "jsonFlickrApi(" ) - 1 );

        $photos = array();
        $data = json_decode( $json, true );
        if($data['stat'] != 'fail'){
            $photos = $data['photos']['photo'];
            return $photos;
        }else{
            return false;
        }
    }
}

我只会这样称呼它:

$flickr = new Flickr($flickr_key, $flickr_secret);

$query = 'Kaspersky Internet Security 2013';
$tags = 'software';

$results = $flickr->searchPhotos($query, $tags);
foreach($results as $img){
    $src = "http://farm" . $img['farm'] . ".static.flickr.com/" . $img['server'] . '/' . $img['id'] . '_' . $img['secret'] . '_m.jpg';
?>
  <img src="<?php echo $src; ?>"/>
<?php
}

这里的问题是我不时会收到重复的图像。 我也尝试使用phpflickr库。但我仍然遇到同样的问题:

$flickr = new phpFlickr($api_key);

$args = array(
    'text' => 'Kaspersky Internet Security 2013',
    'tags' => 'software',
    'per_page' => '10',
    'safe_search' => '1',
    'content_type' => '4',
    'media' => 'photos',
    'sort' => 'relevance',
    'privacy_filter' => '1'
);

$results = $flickr->photos_search($args);

$hashes = array();
$sources = array();

$images = $results['photo'];

foreach($images as $img){

    $src = "http://farm" . $img['farm'] . ".static.flickr.com/" . $img['server'] . '/' . $img['id'] . '_' . $img['secret'] . '_m.jpg';

    $current_hash = sha1_file($src);


    if(!in_array($current_hash, $hashes)){
?>
    <img src="<?php echo $src; ?>" alt="">
<?php       
    }

    $hashes[] = $current_hash;
}

从上面的代码中可以看出,我使用sha1_file方法来比较flickr返回的每个图像的哈希值。但这是一个巨大的性能影响:

without sha1_file: 0.81311082839966
with sha1_file: 6.8974900245667 

我还能做些什么来阻止flickr返回重复项?如你所见,我只返回10张图片,这就是我所需要的。我也尝试添加符合我需求的参数,但仍然没有运气。提前谢谢!

1 个答案:

答案 0 :(得分:1)

试用API资源管理器,this会给你相同的结果吗?

我尝试使用您指定的参数,它总共返回34个结果..