• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:flickrAPIでの画像取得について)

flickrAPIでの画像取得について

このQ&Aのポイント
  • flickrAPIを用いて画像を取得する際にエラーが発生し、取得できない状況になっています。
  • エラーメッセージによると、アクセスしたURLでXMLファイルをロードできないという警告が出ています。
  • また、同じURLにアクセスするとXMLのデータが正常に表示されています。エラーを修正する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.3

悪かったのは入力データのようです。 何らかの原因でデータが壊れているので、Tidyを使って修復すれば正常に読み込めます。 http://codepad.viper-7.com/OW2xCH ※Tidyはphp.iniで「php_tidy.dll」を有効にする必要があります 壊れた原因はよくわかりませんが・・・ Flickrのドキュメンテーションを見ても、あのような形のレスポンスは見当たりませんでした。 (XMLで要素の間にハイフンが紛れてることなんて本来あってはいけない)

toyama-ooo
質問者

お礼

解決しました。 本当にありがとうございました。

その他の回答 (2)

noname#244856
noname#244856
回答No.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カ所抜けてました、失礼しました

toyama-ooo
質問者

補足

回答ありがとうございました。 次のようにスクリプトを書き直したらエラーと表示されます。 <?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>

noname#244856
noname#244856
回答No.1

<?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 デバッグしてないので脱字・誤字などあったらすみません。