• ベストアンサー
  • すぐに回答を!

MagpieRSSでアメブロ画像取得

  • 質問No.6812634
  • 閲覧数3376
  • ありがとう数1
  • 気になる数0
  • 回答数7
  • コメント数0
MagpieRSSを使用してアメブロのRSS情報を取得しようと思います。
コチラのサイトを参考にタイトルと日付は何とか取得出来ました。
http://blog.promob.jp/fri/2009/05/phprss.html

あとはアメブロの画像をリサイズして表示させたいのと、
本文を文字数制限をして表示したいと考えております。

下記サイト辺りが近いのかなと思いますが
どこをどういう風にすればいいのか初心者で全くわかりません。
http://www.anaveve.com/amamjaubb/innukusu.php?itemid=46

どうかお詳しい方ご教授お願い致します。

現在のコードはこんな感じです。

<?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']));

$html .= "<li>\n";

$html .= "<font color=\"#ff0000\">(" . $date . ")</font>\n";

$html .= "<a href=$href>" . $title . "</a><br>\n";

}

$html .= "</ul>";

// htmlの表示
echo($html);

?>


どうか宜しくお願い致します!

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

  • 回答No.7
  • ベストアンサー

ベストアンサー率 87% (97/111)

まったく試していない状態だったのですいません^^;
ちゃんとPHPでRSS読み込んで試してみました。

結論として、ユーザーが登録した画像に関しては、
リンク元がアメブロ、または”なし”でなければ、画像は呼び出せないようです。
アメブロの広告用とか、絵文字用アイコンとかは一部は取得できるようですが。

FireFoxのアドオンでリンク元を”なし”にできるものがあるのですが、
それで試したら、全て正常に表示されました。

ご自身だけで閲覧したいならそれでも構わないでしょうが、WEBで公開したいわけですよね?
だとしたら現状無理だと思います。
結局、無料提供なので仕方ないですね。

タイトルと日時と本文で掲載するようにしてみてはどうでしょう。
お礼コメント
noname#146867
なるほどー。
やはりアメブロでは無理なんですね・・・
長々とご協力頂きありがとうございました!
とても勉強になりました。
投稿日時:2011/06/17 00:27

その他の回答 (全6件)

  • 回答No.6

ベストアンサー率 87% (97/111)

少し調べてみたら、
rssblog.ameba.jp/****/rss20.xml
で取得すると画像が表示されないことがあるらしく、
feedblog.ameba.jp/rss/ameblo/****/rss20.xml
で取得すると表示されたというページを見かけました。

でも、あれ?
blog.promob.jp/fri/atom.xml
の情報を取得してるんです?
アメブロじゃなかったのかなあ^^;
補足コメント
noname#146867
スイマセン。
アメブロです。間違って書いてしまいました;;
feedblog.ameba.jp/rss/ameblo/****/rss20.xml
でやってみましたが、結果は同じでした・・・
何がダメなのか・・・
アメブロのなんか仕様なんですかね;;
投稿日時:2011/06/16 20:57
  • 回答No.5

ベストアンサー率 87% (97/111)

>最初の画像1つだけ取得は出来てますが、表示されるjpgと表示されないjpgがあります・・・
ちょっとわからないですねえ。
アメブロありますけど、画像載せてないので^^;

>画像がどうしても出たり出なかったり不安定なので、
私もさきほど試したら画像呼び出しで2度ほど500エラーになりました。
直のアクセスだったのですが、アメブロ側の問題ですかねえ。
今、同じ画像見たら正常に表示されますが^^;
  • 回答No.4

ベストアンサー率 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));
補足コメント
noname#146867
すみません、なんどもありがとうございます!本当に感謝です;;
実はまだ本文の表示までは行けてません・・・
画像がどうしても出たり出なかったり不安定なので、
そこを何とかしようと頑張ってみましたが、やはり私の知識じゃ無理でした。
最初の画像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);
?>


こんな感じに書きました。
投稿日時:2011/06/16 17:49
  • 回答No.3

ベストアンサー率 87% (97/111)

>アップロードした画像は表示されません・・・
もしかして、
echo mb_substr($item['description'],0,$length);
として、その後に画像を載せてます?
もしかしたら、最後のほうでタグが開始されて、終了しないで終わっているのかもしれません。
それでHTML的におかしくなって画像が表示されなかったとか。

たとえば、

あいうえお<br
<img src="hogehoge.jpg">

みたいになってるとか。
一度確認してみてください。
  • 回答No.2

ベストアンサー率 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">';
}
  • 回答No.1

ベストアンサー率 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);
でいけるかと。

未テストです。
補足コメント
noname#146867
早速ご回答頂きありがとうございます!
なぜか絵文字アイコン(GIF)は表示されますが、
アップロードした画像は表示されません・・・
ソースを確認するとちゃんと<img src="画像へのパス">となっているのですが・・・
画像URLに直接アクセスすると、ちゃんと画像が表示されます。
これはどういう現象なんでしょうか。。

そして記事内の全ての画像を取得してますが、これを記事の1番初めの画像一つだけ表示させる事は出来ますでしょうか。

質問ばかりで本当に申し訳ないです。
投稿日時:2011/06/16 13:01
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ