「最近投稿された画像」を表示する機能を追加 ラリノサウラがAutoPagerizeに対応しました
1 月 23

先日追加した「最近投稿された画像」ですが、画像を表示できるブログがあまりに少なくて個人的にがっかりしたので、がんばって記事本文中の画像を取得するようにしてみました。

PHPでブログの記事本文を抽出するにあたっては、zuzara : ブログの記事本文を抽出するスクリプトをつくってみた を参考にさせていただきました。そちらのコメントにあった「 RSSのdescriptionを利用しては?」というご意見をもとに改造したものです。

「tdかdivで囲まれた文字列で、RSSのdescriptionにマッチする文章を含むのが記事本文」というアルゴリズムです。

/**
 *  ブログから記事本文を取得したい(サマリー利用バージョン)
 *
 *  @author     Nob Funaki
 *              rallynasaura.net
 *  @license    This file is entirely BSD licensed.
 *
 *
 *  @param      string  HTML全文
 *              string  RSSのサマリー
 *  @return     string  ブログの記事本文(HTMLあり)
 */
function getBlogEntryBody($buf, $desc)
{
 
    $buf = substr($buf, strpos($buf, ''));
    $res = '';
    $match = preg_split("'(
<td[^>]*?&gt;)|(
 
)|(
<div[^>]*?&gt;)|(
 
)'i", $buf, -1, PREG_SPLIT_NO_EMPTY);
    foreach ($match as $val) {
 
        $search = array("rn", "n", "r", "t", " ");
        $val_nude = str_replace($search,"",strip_tags($val));
        $desc_nude = str_replace($search,"",strip_tags(mb_substr($desc, 0, 40)));
        if (mb_eregi ($desc_nude, $val_nude) ) {
            $res = $val;
        }
    }
    return $res;
}
</div[^></td[^>

実行は次のようにします。$descにはRSSのdescriptionを渡します。

$buf = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto');
echo getBlogEntryBody($buf, $desc);

これで、9割以上の成功率でブログ内の本文がタグ付きで取り出せました。あとはそこにあるimgタグを取得してサムネイル画像を生成するという流れです。Yahoo!ブログなど、クセのあるブログシステムでは成功率が低いですが、まずまず使えるレベルではないかと。

それと、正規表現はもっといい方法があると思います。

One Response to “「最近投稿された画像」がより多くのブログに対応しました”

  1. ラリノサウラ開発者 Says:

    画像抽出のヒット率低いすね(泣)
    現在6~7割といったところでしょうか。
    もちょっと見直します