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[^>]*?>)|( )|( <div[^>]*?>)|( )'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!ブログなど、クセのあるブログシステムでは成功率が低いですが、まずまず使えるレベルではないかと。
それと、正規表現はもっといい方法があると思います。
1 月 31st, 2008 at 15:44:22
画像抽出のヒット率低いすね(泣)
現在6~7割といったところでしょうか。
もちょっと見直します