我試圖從flickr使用Flickr API獲取圖像,並且無法弄清楚如何獲得唯一的圖像。我已經審查我使用了specific method的參數和這裏就是我想出了:Flickr API返回重複圖像
<?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張圖片,這就是我所需要的。我也嘗試添加儘可能多的符合我需求的參數,但仍然沒有運氣。提前致謝!
有關此任何更新或更多信息?我已經返回85,763張照片,但其中只有4280張是獨一無二的。根據我的電話JSON,應該有> 500,000獨特。 – ow3n