テキスト内にある短縮されたURLを抜き出して、そのURLを展開した結果のページタイトルを取得剃る方法です。
PHPというか試したのはCakePHPですが、基本的には同じはず。
以下がサンプル。
httpしか取得していないので正規表現は適当に変更してください。
タイトル取得の時に、先頭に改行が入っているケースがあるので、ltrimしてます。
function main() { $txt = 'サンプル http://test.com サンプル'; preg_match_all("/http:\/\/[a-z0-9\/\-_\.]+/i",$txt,$match); foreach($match[0] as $match_url){ $URL = $this->getSquare($short_url = $match_url); $data['favo_title'] = $this->getPageTitle($URL); } } // URL取得 public function getSquare($short_url){ $h = get_headers($short_url,true); if(isset($h['Location'])){ $long_url = $h['Location']; if(is_array($long_url)){ $long_url = end($long_url); } } return $long_url; } // タイトル取得 function getPageTitle( $url ) { $html = file_get_contents($url); $html = mb_convert_encoding($html, mb_internal_encoding(), 'auto' ); if ( preg_match( "/<title>(.*?)<\/title>/is", $html, $matches) ) { return ltrim($matches[1]); } else { return false; } }
file_get_contentsは遅いね。
もっと良いやり方があったら教えて頂けると幸いです。