web関連

【php】URLから外部サイトtitleを取得してリンクを生成するショートコード

2020/05/04

2020/05/05

/

毎度、参照した記事のURLとタイトルをコピペしてリンク作るのが面倒くさいからphpでURLから自動で取得できるようにした

URLから外部サイトtitleを取得してリンクを生成するショートコード

function outbound_link( $atts ) {
  // urlからコンテンツを引っ張ってくる
  $html = file_get_contents($atts['url']);
  // metaタイトルの中身を正規表現で取得
  $pattern = '/<title>(.*)<\/title>/';
  // 置換
  // ※preg_match(検索するパターン、検索される文字列、検索結果代入)
  if( preg_match($pattern, $html, $result) ){
    return '<a href="'. $atts['url'] .'" target="_blank">'. $result[1] .'</a>';
  }else{
    // エラーの時
    echo 'No match' . PHP_EOL;
  }
}
add_shortcode('ob_link', 'outbound_link');
ob_link url='URLが入る'
※[]が最初と最後に入る
エスケープかけてもショートコードが発火しちゃう(上のコード)
しかも文字列がURLじゃないからかエラー吐く…
記事タイトルの下にエラーでるんだけど一緒に「No match」がそこに出る…
直さないと

php_eolはブラウザに反映されない改行コード

とりあえず、↓のリンクで使ってみた

参考

PHPで正規表現を使ってHTMLを強引にほじるコツ - Qiita

↓心なしかサイトの読み込みが遅くなった気がしたので、file_get_contentsで読み込むデータの最大バイト数指定できるので後で指定しようかな

PHPのfile_get_contentsでファイル・URLの情報を取得する | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

日本語がURLに入ってるサイトは行けるっぽいけど、文字コードがShift_JISとかUTF-8じゃないと文字化けするね

file_get_contents()で文字化けさせない方法 - とりあえず何でも書く

 

正規表現についてちゃんと勉強したことなかったから凄い勉強になった(わかったとは言ってない)
classとかつけてデザイン調整とかしようとか考えていたけど、外部リンクの時だけをcssとかで指定できたりするからいらなくね?って作ってて思った
参考記事に一言コメントつける時に使おうかな(再修正予定)