質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.09%

RSS 記事内容文字数

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,571

score 15

Wordpressで作成されたブログのRSSを表示したいのですが、
記事内容の文字数を100文字に設定しても54文字までしか表示がされません。
54文字以上は表示出来ないような制限があるのでしょうか?
もしくはどこかの設定が間違っているのでしょうか?
ご教授の程宜しくお願いいたします。

<? require_once('http://abc.jp/common/sp/blogrss.php?u=http://abc.jp/news/?feed=rss2&n=1&o=D/T/S&w=0&tc=0&ec=100&f=01'); ?>

「blogrss.php」

/*------------------------------------------------------------------------
名称            :ブログRSS情報取得(blogrss.php)
説明            :ブログRSS情報を取得し、整形出力する。
                : ※1 RSS1.0/RSS2.0 対応
                :
パラメータ        :$u    RSSフィードURL(設定時、環境設定より優先)
                :$n    表示記事数(0の場合、すべて表示)
                :$o    出力データ[D/T/S](D:記事投稿日 T:記事タイトル S:記事内容)
                :$w    ウインドウサイズ[横/縦](0の場合、親ウインドウに表示)
                :$bc    ブログ名称表示文字数(0の場合、すべて表示)
                :$tc    タイトル表示文字数(0の場合、すべて表示)
                :$ec    記事内容表示文字数(0の場合、すべて表示)
                :$f    環境設定ファイル(config_XX.phpのXXを指定)
                :
履歴            :2008/03/19    新規作成
                :2008/10/15    修正(環境設定ファイルパラメータ/複数ブログ複数記事読込み)
                :
------------------------------------------------------------------------*/


/*------------------------------------------------------------------------
    パラメータ取得
------------------------------------------------------------------------*/

// RSSフィードURL
$inRss_url = $_GET['u'];
// SereneBach-カテゴリ別RSSフィードURL対応
if ($_GET['cid']) {
    $inRss_url .= '&cid=' . $_GET['cid'];
}

// 表示記事数(0の場合、すべて表示)
$inNum = $_GET['n'];

// 出力データ[D/T/S](D:記事投稿日 T:記事タイトル S:記事内容)
$inOutData = $_GET['o'];

// ウインドウサイズ[横/縦](0の場合、親ウインドウに表示)
$inWindowSize = $_GET['0'];

// ブログ名称表示文字数(0の場合、すべて表示)
$inBlogNmCharCount = $_GET['bc'];

// タイトル表示文字数(0の場合、すべて表示)
$inTitleCharCount = $_GET['tc'];

// 記事内容表示文字数(0の場合、すべて表示)
$inEntryCharCount = $_GET['ec'];

// RSS設定読込み
require_once("./Lib/RSS.php");

// 環境設定読込み
$inConfigId = $_GET['f'];
if (!empty($inConfigId)) {
    $inConfigFile = './config_' . $inConfigId . '.php';
} else {
    $inConfigFile = './config_01.php';
}
require_once($inConfigFile);


/*------------------------------------------------------------------------
    関数
------------------------------------------------------------------------*/

// 日付ソート
function cmp ($a, $b) {
    $a = (isset($a['pubdate'])) ? strtotime($a['pubdate']) : strtotime(str_replace("T", " ", substr($a['dc:date'], 0, 19)));
    $b = (isset($b['pubdate'])) ? strtotime($b['pubdate']) : strtotime(str_replace("T", " ", substr($b['dc:date'], 0, 19)));
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}


/*------------------------------------------------------------------------
    処理
------------------------------------------------------------------------*/

// パラメータ(RSSフィードURL)に値がある場合、優先する
if (!empty($inRss_url)) {
    $RSS_URL = array();
    $RSS_URL[] = $inRss_url;
}

// RSSフィードURL数取得(0:単一 1:複数)
if( count($RSS_URL) > 1 ) {
    $rss_Flg = 1;
} else {
    $rss_Flg = 0;
}

// RSS取得・解析
$ch = array();
$items = array();
$Rss_Count = 0;
foreach ($RSS_URL as $k=>$url) {

    $r =& new XML_RSS($url);
    if (PEAR::isError($r)) continue;
    $r->parse();
    if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
    $ch[$k]['items'] = $r->getItems();

    // RSS操作
    if (( $rss_Flg == 0 ) || ( $RSS_TYPE == 1 )) {
        $items = array_merge($items, $ch[$k]['items']);
    } else {
        $items = array_merge($items, array_slice($ch[$k]['items'], 0, 1));
    }
    for ($j=$Rss_Count; $j<count($items); $j++) {
        $items[$j]['btitle'] = $ch[$k]['title'];
        $items[$j]['bdescription'] = $ch[$k]['description'];
        $items[$j]['blink'] = $ch[$k]['link'];
        $Rss_Count = $Rss_Count + 1;
    }

}

// 日付ソート・記事数取得
$entry_Count = count($items);
if( $rss_Flg == 1 ) {
    usort($items, "cmp");
}

// マーク画像タグ設定
if( $MARKIMG != "" ) {
    $markimg_Tag = '<img src="' . $MARKIMG . '" class="rss_markimg">';
} else {
    $markimg_Tag = "";
}

// 出力データ設定(全体)-Start
$str = "\n" . '<div class="blogrss_data">' . "\n";

for ($i=0; $i<$inNum; $i++) {

    // ブログ名称
    $v = strip_tags($items[$i]['btitle']);
    $blog_Title = mb_convert_encoding($v, $CODE, "UTF-8,EUC-JP,SJIS");
    if(( mb_strlen($blog_Title, $CODE) > $inBlogNmCharCount ) && ( $inBlogNmCharCount != 0 )) {
        $blog_Title = mb_substr($blog_Title, 0, $inBlogNmCharCount, $CODE);
        $blog_Title .= "...";
    }

    // ブログ説明
    $v = strip_tags($items[$i]['bdescription']);
    $blog_Desc = mb_convert_encoding($v, $CODE, "UTF-8,EUC-JP,SJIS");

    // ブログURL
    $blog_Url = htmlspecialchars($items[$i]['blink']);

    // 記事タイトル
    $v = strip_tags($items[$i]['title']);
    $entry_Title = mb_convert_encoding($v, $CODE, "UTF-8,EUC-JP,SJIS");
    if(( mb_strlen($entry_Title, $CODE) > $inTitleCharCount ) && ( $inTitleCharCount != 0 )) {
        $entry_Title = mb_substr($entry_Title, 0, $inTitleCharCount, $CODE);
        $entry_Title .= "...";
    }

    // 記事内容
    $v = strip_tags($items[$i]['description']);
    $entry_Desc = mb_convert_encoding($v, $CODE, "UTF-8,EUC-JP,SJIS");
    $delList = array(" ", " ", "\n",);
    $entry_Desc = str_replace($delList, "", $entry_Desc);
    if(( mb_strlen($entry_Desc, $CODE) > $inEntryCharCount ) && ( $inEntryCharCount != 0 )) {
        $delList = array("...");
        $entry_Desc = str_replace($delList, "", $entry_Desc);
        $entry_Desc = mb_substr($entry_Desc, 0, $inEntryCharCount, $CODE);
        $entry_Desc .= "...";
    }

    // 記事URL
    $entry_Url = htmlspecialchars($items[$i]['link']);

    // 記事投稿日
    $v = (isset($items[$i]['pubdate'])) ? strtotime($items[$i]['pubdate']) : strtotime(str_replace("T", " ", substr($items[$i]['dc:date'], 0, 19)));
    $entry_Chk_Date = date("Ymd", $v);
    $entry_Date = date($DATETYPE, $v);

    // NEW画像タグ設定
    if(( $VISDAY <= $entry_Chk_Date ) && ( $NEWVISPERIOD != "" ) && ( $NEWIMG != "" )) {
        $newimg_Tag = '<img src="' . $NEWIMG . '" class="rss_newimg">';
    } else {
        $newimg_Tag = "";
    }

    // ウインドウサイズ設定
    if( $inWindowSize == 0 ) {
        $windowsize1_Tag = "";
        $windowsize2_Tag = "";
    } else {
        $matches = explode( "/", $inWindowSize );
        $windowsize1_Tag = "target=\"_blank\" ";
        $windowsize2_Tag = "target=\"_blank\" onclick=\"window.open('" . $blog_Url  . "', '', 'width=" . $matches[0] . ",height=" . $matches[1] . ",scrollbars=yes,menubar=yes,status=yes,titlebar=yes,toolbar=yes,location=yes,resizable=yes');return false;\"";
    }

    // 記事数が表示記事数に満たない場合
    if( $entry_Count > $i ) {

        // 出力データ設定(アイテム)-Start
        $str .= '<div class="rss_items">' . "\n";

        // 出力データ設定1(D:記事投稿日 T:記事タイトル)
        $str .= '<div class="rss_items_box">' . "\n" . $markimg_Tag . "\n";
        $matches = explode( "/", $inOutData );
        foreach( $matches as $entry_Data ) {
            switch( $entry_Data ) {
            case "D":
                $str .= '<div class="rss_items_date">' . $entry_Date . '</div>' . "\n";
                break;
            case "T":
                if (( $rss_Flg == 1 ) && ( $VISBLOG == 1 )) {
                    $str .= '<h2 class="rss_items_title"><a href="' . $entry_Url . '" title="' . $entry_Desc . '" ' . $windowsize1_Tag . ' >' . $entry_Title . '</a></h2><p class="rss_blog_title"> - <a href="' . $blog_Url . '" title="' . $blog_Desc . '" ' . $windowsize2_Tag . ' >' . $blog_Title . '</a></p>'. $newimg_Tag . "\n";
                } else {
                    $str .= '<h2 class="rss_items_title"><a href="' . $entry_Url . '" title="' . $entry_Desc . '" ' . $windowsize1_Tag . ' >' . $entry_Title . '</a></h2>'. $newimg_Tag . "\n";
                }
                break;
            }
        }
        $str .= '</div>' . "\n";

        // 出力データ設定2(S:記事内容)
        $matches = explode( "/", $inOutData );
        foreach( $matches as $entry_Data ) {
            switch( $entry_Data ) {
            case "S":
                $str .= '<p  class="rss_items_desc">' . $entry_Desc . '</p>' . "\n";
                break;
            }

        }

        // 出力データ設定(アイテム)-End
        $str .= '</div>' . "\n";

    }

}

// 出力データ設定(全体)-End
$str .= '</div>' . "\n";

// データ出力
echo mb_convert_encoding($str, $CODE, "UTF-8,EUC-JP,SJIS");


?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2016/02/12 13:12

    収集したRSSに54文字までしか含まれていないのではないですか?

    キャンセル

  • hio

    2016/02/12 13:45

    100文字以上あるものを収集しております。
    54文字以降は「[…]」となって省略されてしまいます。

    キャンセル

  • m6u

    2016/02/12 15:45

    blogrss.phpは一般的な配布物ですか? それとも自作ですか? 他の人が同じものを試すのに必要な情報を追記してください。

    キャンセル

  • hio

    2016/02/12 16:09

    現在使用しているblogrss.phpの内容を追記いたしました。何分初心者なもので必要な情報に洩れがあると思いますが、他にも必要なものがあればお知らせいただければと思います。

    キャンセル

回答 1

checkベストアンサー

+1

ブログ記事本文でなく要約箇所(Excerpt)を引用しているから54文字になっているのだと思います。
通常特にいじっていなければ、ブログ記事本文の冒頭54文字が設定されてしまうはずで、そこはどうしようもない気がします。
(先方のブログの仕組みの問題で。)

尚、自前のブログの場合なら、feed用のテンプレートを改変してExcerptじゃなくBodyから引用するなどとカスタマイズできます。

参考:WordPressでフィードのテンプレートをカスタマイズする | cms helog - CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています
http://cms.helog.jp/wordpress/hook/wordpress-feed-custom/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/22 14:27

    お返事が遅れまして申し訳ございません。

    フィードのテンプレートをカスタマイズすることが出来るのですね。
    大変参考になりました。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る