- ベストアンサー
MagpieRSSでアメブロ画像取得
- MagpieRSSを使用してアメブロのRSS情報を取得する方法について紹介します。
- アメブロの画像をリサイズして表示させる方法や本文を文字数制限して表示させる方法についても考えます。
- 初心者でもわかりやすいサイトやコードを紹介していますので、ぜひ参考にしてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
まったく試していない状態だったのですいません^^; ちゃんとPHPでRSS読み込んで試してみました。 結論として、ユーザーが登録した画像に関しては、 リンク元がアメブロ、または”なし”でなければ、画像は呼び出せないようです。 アメブロの広告用とか、絵文字用アイコンとかは一部は取得できるようですが。 FireFoxのアドオンでリンク元を”なし”にできるものがあるのですが、 それで試したら、全て正常に表示されました。 ご自身だけで閲覧したいならそれでも構わないでしょうが、WEBで公開したいわけですよね? だとしたら現状無理だと思います。 結局、無料提供なので仕方ないですね。 タイトルと日時と本文で掲載するようにしてみてはどうでしょう。
その他の回答 (6)
- mikemike7
- ベストアンサー率87% (97/111)
少し調べてみたら、 rssblog.ameba.jp/****/rss20.xml で取得すると画像が表示されないことがあるらしく、 feedblog.ameba.jp/rss/ameblo/****/rss20.xml で取得すると表示されたというページを見かけました。 でも、あれ? blog.promob.jp/fri/atom.xml の情報を取得してるんです? アメブロじゃなかったのかなあ^^;
補足
スイマセン。 アメブロです。間違って書いてしまいました;; feedblog.ameba.jp/rss/ameblo/****/rss20.xml でやってみましたが、結果は同じでした・・・ 何がダメなのか・・・ アメブロのなんか仕様なんですかね;;
- mikemike7
- ベストアンサー率87% (97/111)
>最初の画像1つだけ取得は出来てますが、表示されるjpgと表示されないjpgがあります・・・ ちょっとわからないですねえ。 アメブロありますけど、画像載せてないので^^; >画像がどうしても出たり出なかったり不安定なので、 私もさきほど試したら画像呼び出しで2度ほど500エラーになりました。 直のアクセスだったのですが、アメブロ側の問題ですかねえ。 今、同じ画像見たら正常に表示されますが^^;
- mikemike7
- ベストアンサー率87% (97/111)
連続投稿になってすいません。 考えてたらいろいろ問題ありますね。 とりあえず、記事内のタグは全て取り除くのがベストだと思います。 No3で書いたくらいの閉じ忘れは、正規表現でなんとでもなりますが、 たとえば、以下のようなもの。 <a href="hogehoge.html">リン で終わったようなものも削除するのは困難です。 aタグ限定にするならまだしも、<b><font><span><img><div><p> などタグ数は莫大な為、単体のものか、複数のものかを判断するのは難しいです。 抽出した記事でHTMLを使わなくても良いなら、 以下のようになります。 $description = strip_tags($item['description']); echo mb_substr($description,0,$length); 抽出した記事で改行タグ以外は必要ない。 # brのみ残す $description = strip_tags($item['description'],'<br>'); echo preg_replace("#<[^>]*$#","",mb_substr($description,0,$length));
補足
すみません、なんどもありがとうございます!本当に感謝です;; 実はまだ本文の表示までは行けてません・・・ 画像がどうしても出たり出なかったり不安定なので、 そこを何とかしようと頑張ってみましたが、やはり私の知識じゃ無理でした。 最初の画像1つだけ取得は出来てますが、表示されるjpgと表示されないjpgがあります・・・ どちらも画像URLは正しく出ております。(URLに直接アクセスすると画像は表示される。) またhtmlタグも閉じ忘れなどは無くちゃんと<img src="画像までのパス"> 前後に挿入されてるhtmlタグも正常です。 因みに書いたコードは、 <?php // MagpieRSSの読み込み require_once('magpierss/rss_fetch.inc'); // エンコード指定 define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); // キャッシュ時間の設定 define('MAGPIE_CACHE_AGE', 60*5 ); // キャッシュ保存ディレクトリ指定 define('MAGPIE_CACFHE_DIR', 'cache/'); // 表示する件数の設定 $count = 5; // 表示する文字数の設定 $length = 50; // RSSのURLを指定する $url = 'http://blog.promob.jp/fri/atom.xml'; // RSSのデータを配列で取得 $rss = fetch_rss($url); // 表示する件数のデータ以外は削除 array_splice($rss->items, $count); // 取得したデータをリストで表示 $html .= "<ul>\n"; foreach ($rss->items as $item) { // リンクURL $href = $item['link']; // タイトル $title = mb_convert_encoding($item['title'],"SJIS","auto"); // 投稿日付 $date = date('Y/m/d H:i:s',parse_w3cdtf($item['published'])); if(preg_match('#<img[^>]*src=["\']?([^"\' >]+)["\']?[^>]*>#is',$item['description'],$str)){ // 横幅100で合わせる echo '<img src="'.$str["1"].'" width="100">'; // 縦幅100で合わせる // echo '<img src="'.$str["1"].'" height="100">'; } $html .= "<li>\n"; $html .= "<font color=\"#ff0000\">(" . $date . ")</font>\n"; $html .= "<a href=$href>" . $title . "</a><br>\n"; } $html .= "</ul>"; // htmlの表示 echo($html); ?> こんな感じに書きました。
- mikemike7
- ベストアンサー率87% (97/111)
>アップロードした画像は表示されません・・・ もしかして、 echo mb_substr($item['description'],0,$length); として、その後に画像を載せてます? もしかしたら、最後のほうでタグが開始されて、終了しないで終わっているのかもしれません。 それでHTML的におかしくなって画像が表示されなかったとか。 たとえば、 あいうえお<br <img src="hogehoge.jpg"> みたいになってるとか。 一度確認してみてください。
- mikemike7
- ベストアンサー率87% (97/111)
>なぜか絵文字アイコン(GIF)は表示されますが、 >アップロードした画像は表示されません・・・ 絵文字アイコンは記事には入ってないからおかしいんですか? わからないですが、無料系のホームページやブログなどは外部から呼び出し禁止にしているところもあります。 HTMLタグが正常ならそのせいかもしれませんねえ。 あと、考えられるとしたらCSSで非表示にしてるとかくらいですか。 >これを記事の1番初めの画像一つだけ表示させる事は出来ますでしょうか。 以下に変えます。 if(preg_match('#<img[^>]*src=["\']?([^"\' >]+)["\']?[^>]*>#is',$item['description'],$str)){ // 横幅100で合わせる echo '<img src="'.$str["1"].'" width="100">'; // 縦幅100で合わせる // echo '<img src="'.$str["1"].'" height="100">'; }
- mikemike7
- ベストアンサー率87% (97/111)
>アメブロの画像をリサイズして表示させたい 参考URLでは、imagecreatefromjpegで画像を取得して、サイズ変更していますが、これだと画像数分、読み込む必要があるので、負荷・メモリーが多くなります。 簡単にするなら、画像リスト取得して、HTML上でリサイズが良いかなと。 こんな感じかな。 if(preg_match_all('#<img[^>]*src=["\']?([^"\' >]+)["\']?[^>]*>#is',$item['description'],$str)){ $imglist = $str["1"]; foreach($imglist as $val){ // 横幅100で合わせる echo '<img src="'.$val.'" width="100">'; // 縦幅100で合わせる //echo '<img src="'.$val.'" height="100">'; } } HTML上でwidth="100"とかせずにCSSでまとめたほうが良いと思うけど。 本文をカットするのは、 echo mb_substr($item['description'],0,$length); でいけるかと。 未テストです。
補足
早速ご回答頂きありがとうございます! なぜか絵文字アイコン(GIF)は表示されますが、 アップロードした画像は表示されません・・・ ソースを確認するとちゃんと<img src="画像へのパス">となっているのですが・・・ 画像URLに直接アクセスすると、ちゃんと画像が表示されます。 これはどういう現象なんでしょうか。。 そして記事内の全ての画像を取得してますが、これを記事の1番初めの画像一つだけ表示させる事は出来ますでしょうか。 質問ばかりで本当に申し訳ないです。
お礼
なるほどー。 やはりアメブロでは無理なんですね・・・ 長々とご協力頂きありがとうございました! とても勉強になりました。