web関連

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

2020/05/08

2020/05/10

file_get_contentsを使って外部サイト情報を取得していたけど、cURLを使ったほうが処理が早いらしいのでそれを使って外部サイトのタイトル取得したときの備忘録

cURLを使って外部サイトtitleを取得してリンクを生成するショートコード

file_get_contentsよりcURLを使ったほうが読み込みが早くなるとのことだったので試しに使ってみた

function outbound_link_comment( $atts, $content = null ) {
  // 「cURL」を使ってurlから外部コンテンツ情報を引っ張ってくる
  $ch = curl_init();//初期化
  curl_setopt($ch, CURLOPT_URL, $atts['url']);//URLの指定
  curl_setopt($ch, CURLOPT_HEADER, false);//ヘッダーの有無
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//データを文字列に変換
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//SSL証明書の検証
  curl_setopt($ch, CURLOPT_TIMEOUT, 30);//タイムアウトする時間
  $html = curl_exec($ch);//処理実行
  curl_close($ch);//処理終了

  // 文字コード「utf-8」に変換する
  $html = mb_convert_encoding($html,"utf-8","ASCII, JIS, UTF-8, SJIS");
  // metaタイトルの中身を正規表現で取得
  $pattern = '/<title>(.*)<\/title>/';

  // 置換
  // ※preg_match(検索するパターン、検索される文字列、検索結果代入)
  if( preg_match($pattern, $html, $result) ){
    return '<div class="ex_linkbox"><a href="'. $atts['url'] .'" target="_blank">'. $result[1] .'</a><div class="comment">' . $content . '</div></div>';
  }else{
    // エラーの時
    return 'No match' . PHP_EOL;
  }
}
add_shortcode('oblink_comment', 'outbound_link_comment');
oblink_comment url=""][/oblink_comment
※[]が最初と最後に入る

コメント入れられるようにしてみた
↓実際に使ってみた

utf-8以外だと文字化けするので対処

utf-8以外だと文字化けをするのでその処理

mb_convert_encoding($html,"utf-8","ASCII, JIS, UTF-8, SJIS");

文字コードが不明なとき第三引数にautoを設定することで「ASCII→JIS→UTF-8→EUC-JP→SJIS」って順番に処理をしてくれるみたいだけどエラー吐いたので上記のように設定

 

前回作成したショートコードからコメントを入れられる様にしたのと「cURL」というのを使ってみた
今度はショートコード複数使ってたらそれらをまとめて1回で処理するように書き直そうかな
多分ショートコードがあるたびに関数呼び出していると思うし、「file_get_contents」「cURL」の他に「curl_multi」っていうのもあるみたいなので