EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

Laravel投稿サイト構築.75 -URLのリンク設定-

■前回

リンクをiframeなどで埋め込むのは諸事情によりやめておいた。

リンクからHTMLを読み込んで、title句を取得してアンカータグを出力するように対応した。

 

■リンクURLのアンカー出力

リンクURLからHTMLを読み込んで取得できる情報はさまざまで、

タイトルや説明、画像などを取得できる。

-----

タイトル: <title>タイトル</title>

説明:<meta property="og:description" content="説明">

画像:<meta property="og:image" content="画像URL">

-----

タイトルは前回取得できているので、画像と説明を以下のように取得する

-----

Modelファイル

// OGP取得(image)
preg_match('/<meta property="og:image" content="(.*?)"/', $html, $result);
foreach( $result as $key => $value ){
  if( $key == 1 ){
    // URLが一定桁数を超える場合は画像なしとする。
    if( strlen($value) < 512 ){
      $thread->link_image = $value;
    }
    break;
  }
}

// OGP取得(description)
preg_match('/<meta property="og:description" content="(.*?)"/', $html, $result);
foreach( $result as $key => $value ){
  if( $key == 1 ){
    $thread->link_description = $value;
    break;
  }
}

 

Qiitaのリンクを設定したところ、画像が正常に取得できていなかった。

直接的な原因は分からないが、とりあえず長すぎる画像URLは画像なしとするようにした。(512文字とした)

 

また、descriptionで説明を取得しているが、実際のところは取得できていない。

設定していないサイトも多いのだろうか。

-----

bladeファイルでは、以下のように出力している。

<a href="{{$thread->link_url}}" target="_blank">
  <div class="border rounded theme_link_inner">
    @if( strlen(trim($thread->link_image)) >= 1 )
      <img src="{{$thread->link_image}}" class="theme_link_image me-2" />
      @else
      <span class="me-2"></span>
    @endif
    <span>参考リンク</span>
    @if( strlen(trim($thread->link_title)) >= 1 )
    <span>:{{$thread->link_title}}</span>
    <span>{{$thread->link_description}}</span>
    @endif
  </div>
</a>

------

titleが取得できない場合は「参考リンク」固定で。

画像が取得できた場合のみサムネイル表示するようにした。

 

画像、タイトルなし

 

タイトルあり、画像なし

 

タイトルあり、画像あり

 

OGPなど突き詰めればもっと詳細な情報が表示できるのかもしれないが、

さしあたりこのスタイルで。

 

 

■次回

  • イイネ機能
  • 返信機能の拡張
  • ダッシュボードから「お題」登録機能

 

 

続く