リンクをカードにするプラグインを作ろう!(4)OGP情報を取得する

PHP
この記事は約4分で読めます。

取得したHTMLからリンク先のタイトルと概要文を抜粋します。

前回まで

リンク先サイトからHTMLを取得しました。

今回もコードを書いていく

OGPを取得する

metaタグからOGPの情報を取得します。

get_meta_tags()を使うと簡単そうですがget_meta_tags()はnameとcontentの組み合わせしか拾ってくれません。

OGPのmetaタグはpropertyとcontentなので正規表現で取りに行きます。

        $html = curl_exec($ch);
        if (curl_errno($ch ) ) {
            $site_name = '';
            $title = $url;
            $excerpt = '';
        } else {
            if (preg_match('/property="og:title"\s*content="([^"]*)/si', $html, $m ) ) {
                $title = esc_html($m[1]);
            }
            if (preg_match('/property="og:description"\s*content="([^"]*)/si', $html, $m ) ) {
                $excerpt = esc_html($m[1]);
            }
            if (preg_match('/property="og:site_name"\s*content="([^"]*)/si', $html, $m ) ) {
                $site_name = esc_html($m[1]);
            }
        }
        curl_close($ch );
    }

取得結果を表示する

とりあえず取得結果を返却してみましょう。

        } else {
            if (preg_match('/property="og:title"\s*content="([^"]*)/si', $html, $m ) ) {
                $title = esc_html($m[1]);
            }
            if (preg_match('/property="og:description"\s*content="([^"]*)/si', $html, $m ) ) {
                $excerpt = esc_html($m[1]);
            }
            if (preg_match('/property="og:site_name"\s*content="([^"]*)/si', $html, $m ) ) {
                $site_name = esc_html($m[1]);
            }
        }
        curl_close($ch );
        $html = '<DIV class="popo_bc_site_name">'.$site_name.'</DIV><DIV>'.$title.'</DIV><DIV>'.$url.'</DIV><DIV>'.$excerpt.'</DIV>';
        return $html;
    }

確認してみる

記事中にショートコードを書いてみる

ちゃんと取得できているか確認してみましょう。

記事中に、

リンクをカードにするプラグインを作ろう!
リンクをカード形式で表示させるWordPressプラグインを作成していきます。 (1)機能を考える まずはどんなことをしたいのか考えます。 完成予想 (2)クラスの記述をする プラグインの器を用意し...

と書いてプレビューしてみましょう。

結果をプレビューで確認する

こんな感じで表示されたと思います。

ぽぽづれ。 ←サイト名称
リンクをカードにするプラグインを作ろう! ←タイトル
https://popozure.info/popo-blogcard-test ←URL
リンクをカード形式で表示させるWordPressプラグインを作成していきます。 ←概要文

ちゃんと取得できたみたいです。

今回のコード

今回はここまでです。

<?php
/*
Plugin Name: popo-Blogcard
Plugin URI: https://popozure.info/20180808/13142
Description: Blogcard
Version: 0.0.1
Author: poporon
Author URI: https://popozure.info
License: GPL2
*/
class popo_blogcard {
    function __construct() {
        add_shortcode('blogcard', array($this, 'shortcode' ) );
    }
    function shortcode($opt , $content = null ) {
        $url = $opt&#91;'url'&#93;;
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt($ch, CURLOPT_TIMEOUT, 8 );
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
        curl_setopt($ch, CURLOPT_MAXREDIRS, 8 );
        curl_setopt($ch, CURLOPT_AUTOREFERER, true );
        curl_setopt($ch, CURLOPT_COOKIESESSION, true );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
        $html = curl_exec($ch);
        if (curl_errno($ch ) ) {
            $site_name = '';
            $title = $url;
            $excerpt = '';
        } else {
            if (preg_match('/property="og:title"\s*content="(&#91;^"&#93;*)/si', $html, $m ) ) {
                $title = esc_html($m&#91;1&#93;);
            }
            if (preg_match('/property="og:description"\s*content="(&#91;^"&#93;*)/si', $html, $m ) ) {
                $excerpt = esc_html($m&#91;1&#93;);
            }
            if (preg_match('/property="og:site_name"\s*content="(&#91;^"&#93;*)/si', $html, $m ) ) {
                $site_name = esc_html($m&#91;1&#93;);
            }
        }
        curl_close($ch );
        $html = '<DIV class="popo_bc_site_name">'.$site_name.'</DIV><DIV>'.$title.'</DIV><DIV>'.$url.'</DIV><DIV>'.$excerpt.'</DIV>';
        return $html;
    }
}
$popo_blogcard = new popo_blogcard;

次回は・・・

今回の取得方法で記事内容が取得できないサイトに対応しようと思います。

では、この辺で。(^-^)o

コメント

タイトルとURLをコピーしました