Bug 358330 - "Make Flickr API interaction less painful" [p=ryan@ryanflint.com]

This commit is contained in:
reed%reedloden.com 2006-10-27 14:26:53 +00:00
Родитель dea869cf01
Коммит da09919c1e
2 изменённых файлов: 43 добавлений и 23 удалений

Просмотреть файл

@ -76,12 +76,12 @@ class FeedsController extends AppController {
$party = $this->Feed->findById($id); $party = $this->Feed->findById($id);
$this->set('party', $party); $this->set('party', $party);
if (FLICKR_API_KEY != null && !$party['Party']['canceled']) { if (FLICKR_API_KEY != null && !$party['Feeds']['canceled']) {
if ($party['Feeds']['useflickr'] == 1) { if ($party['Feeds']['useflickr'] == 1) {
$data = array('type' => 'flickr', 'userid' => $party['Feeds']['flickrid'], 'randomize' => false); $data = array('type' => 'flickr', 'userid' => $party['Feeds']['flickrid'], 'randomize' => false);
$flickr = new webServices($data); $flickr = new webServices($data);
$photoset = $flickr->fetchPhotos(FLICKR_TAG_PREFIX.$id, 10, (($party['Feeds']['flickrperms']) ? false : true)); $photoset = $flickr->fetchPhotos(FLICKR_TAG_PREFIX.$id, 10, (($party['Feeds']['flickrperms']) ? false : true));
$this->set('flickr', $photoset, 0, 9); $this->set('flickr', $photoset);
} }
} }
} }

62
webtools/partytool/vendors/webServices.php поставляемый
Просмотреть файл

@ -82,34 +82,53 @@ class webServices {
} }
function fetchPhotos($tags, $num_results, $single_user) { function fetchPhotos($tags, $num_results, $single_user) {
$head = "GET /services/rest/?method=flickr.photos.search&api_key=".FLICKR_API_KEY.(($single_user) ? "&user_id=" : '').$this->userid."&tags=".$tags."&per_page=".$num_results." HTTP/1.1\r\n"; $params = array('api_key' => FLICKR_API_KEY,
$head .= "Host: ".$this->host."\r\n"; 'method' => 'flickr.photos.search',
'format' => 'php_serial',
'tags' => $tags,
'per_page' => $num_results);
if ($single_user)
$params['user_id'] = $this->userid;
$encoded_params = array();
foreach ($params as $k => $v)
$encoded_params[] = urlencode($k).'='.urlencode($v);
$head = 'GET /services/rest/?'.implode('&', $encoded_params)." HTTP/1.1 \r\n";
$head .= 'Host: '.$this->host."\r\n";
$head .= "Connection: Close\r\n\r\n"; $head .= "Connection: Close\r\n\r\n";
if ($results = $this->fetchResults($head)) { if ($results = $this->fetchResults($head)) {
preg_match_all('/id="(.*)" own/', $results, $ids, PREG_SET_ORDER); $resp = split("\r\n\r\n", $results);
preg_match_all('/owner="(.*)" sec/', $results, $owners, PREG_SET_ORDER); $data = unserialize($resp[1]);
preg_match_all('/secret="(.*)" ser/', $results, $secrets, PREG_SET_ORDER);
preg_match_all('/server="(.*)" tit/', $results, $servers, PREG_SET_ORDER);
preg_match_all('/title="(.*)" isp/', $results, $titles, PREG_SET_ORDER);
$arr = array(); if ($data['stat'] == 'ok') {
for ($i = 0; $i < count($ids); $i++) { $arr = array();
$arr[$i] = array('id' => $ids[$i][1], for ($i = 0; $i < $data['photos']['total']; $i++) {
'owner' => $owners[$i][1], $p = $data['photos']['photo'][$i];
'secret' => $secrets[$i][1], $arr[$i] = array('id' => $p['id'],
'server' => $servers[$i][1], 'owner' => $p['owner'],
'title' => $titles[$i][1]); 'secret' => $p['secret'],
'server' => $p['server'],
'farm' => $p['farm'],
'title' => $p['title']);
}
if ($this->randomize) {
// Randomize the results
shuffle($arr);
}
return $arr;
} }
if ($this->randomize) { else
// Randomize the results return 0;
shuffle($arr);
}
return $arr;
} }
return 0;
else
return 0;
} }
function GSuggest($phrase) { function GSuggest($phrase) {
@ -165,6 +184,7 @@ class webServices {
else { else {
fwrite($fs, $headers); fwrite($fs, $headers);
stream_set_timeout($fs, 2);
$buffer = null; $buffer = null;
while (!feof($fs)) while (!feof($fs))