- ベストアンサー
flickrAPIでの画像取得について
- flickrAPIを用いて画像を取得する際にエラーが発生し、取得できない状況になっています。
- エラーメッセージによると、アクセスしたURLでXMLファイルをロードできないという警告が出ています。
- また、同じURLにアクセスするとXMLのデータが正常に表示されています。エラーを修正する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
悪かったのは入力データのようです。 何らかの原因でデータが壊れているので、Tidyを使って修復すれば正常に読み込めます。 http://codepad.viper-7.com/OW2xCH ※Tidyはphp.iniで「php_tidy.dll」を有効にする必要があります 壊れた原因はよくわかりませんが・・・ Flickrのドキュメンテーションを見ても、あのような形のレスポンスは見当たりませんでした。 (XMLで要素の間にハイフンが紛れてることなんて本来あってはいけない)
その他の回答 (2)
$format = '<a href="http://www.flickr.com/photos/%s/%s/"><img src="http://farm%s.static.flickr.com/%s/%s_%s_m.jpg" alt="%s"></a>' . PHP_EOL; ダブルクオート1カ所抜けてました、失礼しました
補足
回答ありがとうございました。 次のようにスクリプトを書き直したらエラーと表示されます。 <?php set_time_limit(60); function search_flickr($keyword, $limit, $apikey) { $params = array( 'method' => 'flickr.photos.search', 'api_key' => $apikey, 'text' => $keyword, 'sort' => 'interestingness-desc', 'per_page' => $limit, ); $query = http_build_query($params, '', '&'); $url = 'http://www.flickr.com/services/rest/?' . $query; $data = @simplexml_load_string(@file_get_contents($url)); if ($data === false) { return 'エラー' . PHP_EOL; } $ret = ''; $format = '<a href="http://www.flickr.com/photos/%s/%s/"><img src="http://farm%s.static.flickr.com/%s/%s_%s_m.jpg" alt="%s"></a>' . PHP_EOL; foreach ($data->photos->photo as $p) { $ret .= sprintf($format, $p['owner'], $p['id'], $p['farm'], $p['server'], $p['id'], $p['secret'], $p['title']); } return $ret; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>flickr API サンプル</title> </head> <body> <h1>flickr API サンプル</h1> <p> <?php echo search_flickr('sea', 10, '(僕のAPIキー)') ?> </p> <p>powerd by <a href="http://www.flickr.com/services/api/">Flickr Services</a></p> </body> </html>
<?php set_time_limit(60); function search_flickr($keyword, $limit) { $params = array( 'method' => 'flickr.photos.search', 'api_key' => 'MY API KEY', 'text' => $keyword, 'sort' => 'interestingness-desc', 'per_page' => $limit, ); $query = http_build_query($params, '', '&'); $url = 'http://www.flickr.com/services/rest/?' . $query; $data = @simplexml_load_string(@file_get_contents($url)); if ($data === false) { return 'エラー' . PHP_EOL; } $ret = ''; $format = '<a href="http://www.flickr.com/photos/%s/%s/><img src="http://farm%s.static.flickr.com/%s/%s_%s_m.jpg" alt="%s"></a>' . PHP_EOL; foreach ($data->photos->photo as $p) { $ret .= sprintf($format, $p['owner'], $p['id'], $p['farm'], $p['server'], $p['id'], $p['secret'], $p['title']); } return $ret; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>flickr API サンプル</title> </head> <body> <h1>flickr API サンプル</h1> <p> <?php echo search_flickr('sea', 10) ?> </p> <p>powerd by <a href="http://www.flickr.com/services/api/">Flickr Services</a></p> </body> </html> 参考 http://mbnk.blog120.fc2.com/blog-entry-122.html デバッグしてないので脱字・誤字などあったらすみません。
お礼
解決しました。 本当にありがとうございました。