リンクをカードにするプラグインを作ろう!(9)サムネイルの追加

画像生成APIを利用してサムネイルを表示します。

前回まで

DBにタイトルや概要文をキャッシュして読み書きしました。

[link url=”https://popozure.info/20180824/13323″]

サムネイルを取得する

WordPress.comの画像生成APIを利用する

WordPress.comの画像生成APIを利用します。

URLの一部にサムネイルを作りたいURLを組み込み、「w」パラメータで横幅を指定します。

https://s.wordpress.com/mshots/v1/(URL)?w=94

[php title=”popo-blogcard.php” start-line=”70″ mark=”5″] ‘excerpt’ => $excerpt
)
);
}
$thumbnail = ‘‘;
$html = ‘

‘;
return $html;
}[/php]

HTMLにサムネイルを組み込む

サイト名称の次、タイトルの前に組み込みます。
[php title=”popo-blogcard.php” start-line=”70″ mark=”6″] ‘excerpt’ => $excerpt
)
);
}
$thumbnail = ‘‘;
$html = ‘

‘;
return $html;
}[/php]

スタイルシートを追加する

左寄せで表示されるようにスタイルシートを追加します。
[css title=”style.css” start-line=”12″ mark=”5-9″].popo_bc_site_name {
display: block;
font-size: 12px;
}
.popo_bc_thumbnail {
float: left;
padding: 8px;
max-width: 94px;
}
.popo_bc_title {
display: block;
font-size: 18px;
overflow: hidden;[/css]

表示してみる

ブログカードの左側にサムネイルが表示されました。

今回のコード

今回はここまでです。

プラグイン本体

[php title=”popo-blogcard.php”]get_row($wpdb->prepare(“SELECT * FROM “.$wpdb->prefix.”popo_blogcard WHERE url=%s”, $url ) );
if ($data ) {
$site_name = $data->site_name;
$title = $data->title;
$excerpt = $data->excerpt;
} else {
$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 {
$html = mb_convert_encoding($html, ‘UTF-8’, ‘ASCII,JIS,UTF-8,EUC-JP,SJIS’ );
if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$result = $wpdb->insert(
$wpdb->prefix.’popo_blogcard’,
array(
‘url’ => $url,
‘site_name’ => $site_name,
‘title’ => $title,
‘excerpt’ => $excerpt
)
);
}
$thumbnail = ‘‘;
$html = ‘

‘;
return $html;
}
public function activate() {
global $wpdb;
$wpdb->hide_errors();
require_once (ABSPATH.’wp-admin/includes/upgrade.php’);
$sql = “CREATE TABLE “.$wpdb->prefix.”popo_blogcard (
url VARCHAR(2048) DEFAULT ”,
site_name VARCHAR(100) DEFAULT ”,
title VARCHAR(200) DEFAULT ”,
excerpt VARCHAR(500) DEFAULT ”,
) “.$wpdb->get_charset_collate().” ;”;
dbDelta($sql);
}
public function deactivate() {
global $wpdb;
$sql = “DROP TABLE “.$wpdb->prefix.”popo_blogcard”;
$wpdb->query($sql);
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}
}
$popo_blogcard = new popo_blogcard;[/php]

スタイルシート

[css title=”style.css”].popo_bc_wrap {
margin: 16px;
padding: 8px;
width: 96%;
border: 2px solid #8888ff;
background-color: #ffffff;
border-radius: 3px;
}
.popo_bc_link {
text-decoration: none;
}
.popo_bc_site_name {
display: block;
font-size: 12px;
}
.popo_bc_thumbnail {
float: left;
padding: 8px;
max-width: 94px;
}
.popo_bc_title {
display: block;
font-size: 18px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.popo_bc_url {
display: block;
font-size: 12px;
color: #00f;
text-decoration: underline;
}
.popo_bc_excerpt {
height: 32px;
font-size: 12px;
color: #444;
overflow: hidden;
text-overflow: ellipsis;
}[/css]

次回は・・・

最後にサイトアイコン(ファビコン)を追加しようと思います。

[link url=”https://popozure.info/20180826/13339″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”B019GNUT0C”][amzn-link asin=”B01LATWL5G”]

秋葉原で中古パソコン買って来た(次男坊の。)

子ども用に中古パソコンを買ってきました。

秋葉原へ行ってきた!

次男坊に使わせているパソコンは少々パワー不足。

調べものをするにしても、ゲームをするにしても、ちょっと動作が遅かったりします。

もっとパソコンを活用して貰いたくてもう少し良い性能のパソコンを中古で買おうと決めました。

とりあえず行ったのが「PCコンフル 秋葉原店」。

[link url=”http://www.tce.co.jp/pcs/pc_comfull.html”]

ノートパソコンなら例えばディスプレイの方はゲームをしながらノートパソコンで調べものをしたり、いざとなればHDMIやD-Subでディスプレイに繋げて広い画面で使えると思いました。

性能としてはCPUが「Intel Core i5」以上だといいな、と思いました。

けっきょくデスクトップに!

ノートパソコンを中心にしばらく悩んでいたのですが、

  • 同じ値段で見ると、デスクトップの方がCPU性能が高い
  • デスクトップならグラフィックカードも積める

といった点で、デスクトップパソコンに決めてしまいました。

ヒューレットパッカードのビジネス向けパソコン「hp Compaq 8300 Elite SFF」です。(中古、本体のみ)

型番 Compaq 8300 Elite SFF
メーカー hp
CPU Intel Core i5-3470 3.2GHz
OS Windows 7 Professional 64bit
チップセット Intel Q77 Express
メモリ PC3-12800(1600MHz)
4GB (2GBx2)
ハードディスク Serial ATA/600
500GB HDD (7200RPM)
グラフィックス 内蔵(Intel HD Graphics)
LAN Intel 82579LM ギガビット
USB USB3.0x4、USB2.0x6
アプリケーション なし
サイズ 100x378x338mm
重量 7.6kg
外観 [amzn-img asin=”B07CN3FWTV”]

価格は税込みで24,800円。

OSはWindows 10 Pro へアップグレード済み。

メモリを8GBにしようか悩みましたが今回はやめました。

今後の予定

とりあえず、

  • 動作確認。(保証30日)
  • グラフィックボード増設
  • SSD換装
  • Windows10Proのクリーンインストール

こんな感じでやっていこうと思います。

今日は持って帰ってきただけで疲れました。

次回はセットアップします。

[link url=”https://popozure.info/20180825/13467″]

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

[amzn-link asin=”B07F7V49WV”][amzn-link asin=”B072HH2QRC”][amzn-link asin=”B07F7V49WV”][amzn-link asin=”B076Y37MWM”][amzn-link asin=”B07BQV41V5″]

リンクをカードにするプラグインを作ろう!(8)DBテーブルにキャッシュする

DBにテーブルを作ってタイトルと概要文をキャッシュします。

前回まで

スタイルシートを付けてブログカードっぽくしました。

[link url=”https://popozure.info/20180819/13307″]

DBの作成とアクセス

テーブルの項目を考える

DBにテーブルを作成します。

記録する項目としては「URL」、「サイト名称」、「タイトル」、「概要文」です。

Pz-LinkCardではこの他に「登録日」や「ソーシャルカウント」などがあります。

項目名称 項目名 文字数
URL URL VARCHAR(2048)
サイト名称 site_name VARCHAR(100)
タイトル title VARCHAR(200)
概要文 excerpt VARCHAR(500)

有効化したときに呼ぶ関数

プラグインを有効化したときにDBのテーブルを作成します。

まずは有効化(activate)したときに呼ばれる関数を作成します。
[php title=”popo-blogcard.php” start-line=”12″ mark=”4″] function __construct() {
add_shortcode(‘blogcard’, array($this, ‘shortcode’ ) );
add_action(‘wp_enqueue_scripts’, array($this, ‘enqueue’ ) );
register_activation_hook(__FILE__, array($this, ‘activate’) );
}[/php]
[php title=”popo-blogcard.php” start-line=”56″ mark=”4-5″] $html = ‘

‘;
return $html;
}
public function activate() {
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}[/php]

DBのテーブルを作成する

dbDelta()という関数を使ってDBのテーブルを定義します。
[php title=”popo-blogcard.php” start-line=”59″ mark=”2-11″] public function activate() {
global $wpdb;
$wpdb->hide_errors();
require_once (ABSPATH.’wp-admin/includes/upgrade.php’);
$sql = “CREATE TABLE “.$wpdb->prefix.”popo_blogcard (
url VARCHAR(2048) DEFAULT ”,
site_name VARCHAR(100) DEFAULT ”,
title VARCHAR(200) DEFAULT ”,
excerpt VARCHAR(500) DEFAULT ”,
) “.$wpdb->get_charset_collate().” ;”;
dbDelta($sql);
}[/php]

無効化したときに呼ぶ関数

プラグインを停止したときにDBを削除しようと思います。

停止(deactivate)したときに呼ばれる関数を作成します。
[php title=”popo-blogcard.php” start-line=”12″ mark=”5″] function __construct() {
add_shortcode(‘blogcard’, array($this, ‘shortcode’ ) );
add_action(‘wp_enqueue_scripts’, array($this, ‘enqueue’ ) );
register_activation_hook(__FILE__, array($this, ‘activate’) );
register_deactivation_hook(__FILE__, array($this, ‘deactivate’) );
}[/php]
[php title=”popo-blogcard.php” start-line=”69″ mark=”4-5″] ) “.$wpdb->get_charset_collate().” ;”;
dbDelta($sql);
}
public function deactivate() {
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}[/php]

DBのテーブルを削除する

DBのテーブルを削除する記述をします。
[php title=”popo-blogcard.php” start-line=”72″ mark=”2-4″] public function deactivate() {
global $wpdb;
$sql = “DROP TABLE “.$wpdb->prefix.”popo_blogcard”;
$wpdb->query($sql);
}[/php]

DBのテーブルに情報を書きだす

cURLで取得した「URL」、「サイト名称」、「タイトル」、「概要文」をDBのテーブルに書き出します。
[php title=”popo-blogcard.php” start-line=”53″ mark=”5-13″] $site_name = $m[‘host’];
}
}
curl_close($ch );
$result = $wpdb->insert(
$wpdb->prefix.’popo_blogcard’,
array(
‘url’ => $url,
‘site_name’ => $site_name,
‘title’ => $title,
‘excerpt’ => $excerpt
)
);
$html = ‘

‘;
return $html;
}[/php]

DBのテーブルから情報を読みだす

DBにキャッシュがあったらcURLでアクセスしないでDBから読み出します。

DBにキャッシュが無い場合の処理を字下げします。
[php title=”popo-blogcard.php” start-line=”19″ mark=”2-8,55″] $url = $opt[‘url’];
global $wpdb;
$data = $wpdb->get_row($wpdb->prepare(“SELECT * FROM “.$wpdb->prefix.”popo_blogcard WHERE url=%s”, $url ) );
if ($data ) {
$site_name = $data->site_name;
$title = $data->title;
$excerpt = $data->excerpt;
} else {
$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 {
$html = mb_convert_encoding($html, ‘UTF-8’, ‘ASCII,JIS,UTF-8,EUC-JP,SJIS’ );
if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$result = $wpdb->insert(
$wpdb->prefix.’popo_blogcard’,
array(
‘url’ => $url,
‘site_name’ => $site_name,
‘title’ => $title,
‘excerpt’ => $excerpt
)
);
}[/php]

プラグインを有効化する

プラグインを有効化したときにDBのテーブルを作成するので有効化します。

すでに有効化している場合、いったん停止してから有効化をしてください。

見た目には分かりませんがキャッシュから読み出されるようになりました。

今回のコード

今回はここまでです。

プラグイン本体

[php title=”popo-blogcard.php”]get_row($wpdb->prepare(“SELECT * FROM “.$wpdb->prefix.”popo_blogcard WHERE url=%s”, $url ) );
if ($data ) {
$site_name = $data->site_name;
$title = $data->title;
$excerpt = $data->excerpt;
} else {
$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 {
$html = mb_convert_encoding($html, ‘UTF-8’, ‘ASCII,JIS,UTF-8,EUC-JP,SJIS’ );
if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$result = $wpdb->insert(
$wpdb->prefix.’popo_blogcard’,
array(
‘url’ => $url,
‘site_name’ => $site_name,
‘title’ => $title,
‘excerpt’ => $excerpt
)
);
}
$html = ‘

‘;
return $html;
}
public function activate() {
global $wpdb;
$wpdb->hide_errors();
require_once (ABSPATH.’wp-admin/includes/upgrade.php’);
$sql = “CREATE TABLE “.$wpdb->prefix.”popo_blogcard (
url VARCHAR(2048) DEFAULT ”,
site_name VARCHAR(100) DEFAULT ”,
title VARCHAR(200) DEFAULT ”,
excerpt VARCHAR(500) DEFAULT ”,
) “.$wpdb->get_charset_collate().” ;”;
dbDelta($sql);
}
public function deactivate() {
global $wpdb;
$sql = “DROP TABLE “.$wpdb->prefix.”popo_blogcard”;
$wpdb->query($sql);
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}
}
$popo_blogcard = new popo_blogcard;[/php]

スタイルシート

[css title=”style.css”].popo_bc_wrap {
margin: 16px;
padding: 8px;
width: 96%;
border: 2px solid #8888ff;
background-color: #ffffff;
border-radius: 3px;
}
.popo_bc_link {
text-decoration: none;
}
.popo_bc_site_name {
display: block;
font-size: 12px;
}
.popo_bc_title {
display: block;
font-size: 18px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.popo_bc_url {
display: block;
font-size: 12px;
color: #00f;
text-decoration: underline;
}
.popo_bc_excerpt {
height: 32px;
font-size: 12px;
color: #444;
overflow: hidden;
text-overflow: ellipsis;
}[/css]

次回は・・・

だいたい終わりが見えてきました。

少し寂しいので次回はサムネイルを追加しようと思います。

[link url=”https://popozure.info/20180825/13334″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”4797393114″][amzn-link asin=”4774195723″]

リンクをカードにするプラグインを作ろう!(7)スタイルシートを設定する

スタイルシートを設定してブログカードっぽい見た目にします。

前回まで

文字コードをUTF-8にしました。

[link url=”https://popozure.info/20180818/13278″]

スタイルシートのファイルを用意する

ファイルを作成する

プラグインと同じディレクトリに「style.css」という名前でファイルを用意します。

スタイルシートを記述する

こんな感じにしてみました。

文字コードは「UTF-8」です。

[css title=”style.css” mark=”1-35″].popo_bc_wrap {
margin: 16px;
padding: 8px;
width: 96%;
border: 2px solid #8888ff;
background-color: #ffffff;
border-radius: 3px;
}
.popo_bc_link {
text-decoration: none;
}
.popo_bc_site_name {
display: block;
font-size: 12px;
}
.popo_bc_title {
display: block;
font-size: 18px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.popo_bc_url {
display: block;
font-size: 12px;
color: #00f;
text-decoration: underline;
}
.popo_bc_excerpt {
height: 32px;
font-size: 12px;
color: #444;
overflow: hidden;
text-overflow: ellipsis;
}[/css]

スタイルシートを呼び出す

スタイルシートを呼び出す記述をします。

フックを設定する

スクリプト等を呼び出す「wp_enqueue_scripts」というタイミングで「enqueue」を呼び出すように記述します。

[php title=”popo-blogcard.php” start-line=”11″ mark=”3″] function __construct() {
add_shortcode(‘blogcard’, array($this, ‘shortcode’ ) );
add_action(‘wp_enqueue_scripts’, array($this, ‘enqueue’ ) );
}[/php]

呼ばれる関数を記述する

「wp_enqueue_scripts」というタイミングで呼ばれる関数を記述します。

[php title=”popo-blogcard.php” start-line=”54″ mark=”5-6″] curl_close($ch );
$html = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
function enqueue() {
}
}
$popo_blogcard = new popo_blogcard;[/php]

呼ばれる関数を記述する

プラグインと同じディレクトリにあるスタイルシートのファイル「style.css」が呼び出されるように記述します。

[php title=”popo-blogcard.php” start-line=”54″ mark=”6″] curl_close($ch );
$html = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}
}
$popo_blogcard = new popo_blogcard;[/php]

スタイルシートに合わせてHTMLを直す

こんな感じの構造にしました。

popo_blogcard

popo_bc_wrap

popo_bc_site_name
popo_bc_site_content

popo_bc_title
popo_bc_url
popo_bc_excerpt

[php title=”popo-blogcard.php” start-line=”54″ mark=”2″] curl_close($ch );
$html = ‘

‘;
return $html;
}[/php]

ブログカードっぽい表示になった

表示させてみます。


だいぶ「ブログカード」っぽくなってきました。

今回のコード

今回はここまでです。

プラグイン本体

[php title=”popo-blogcard.php”]]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$html = ‘

‘;
return $html;
}
function enqueue() {
wp_enqueue_style(‘popo-blogcard’, plugin_dir_url(__FILE__).’style.css’);
}
}
$popo_blogcard = new popo_blogcard;[/php]

スタイルシート

[css title=”style.css”].popo_bc_wrap {
margin: 16px;
padding: 8px;
width: 96%;
border: 2px solid #8888ff;
background-color: #ffffff;
border-radius: 3px;
}
.popo_bc_link {
text-decoration: none;
}
.popo_bc_site_name {
display: block;
font-size: 12px;
}
.popo_bc_title {
display: block;
font-size: 18px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.popo_bc_url {
display: block;
font-size: 12px;
color: #00f;
text-decoration: underline;
}
.popo_bc_excerpt {
height: 32px;
font-size: 12px;
color: #444;
overflow: hidden;
text-overflow: ellipsis;
}[/css]

次回は・・・

いよいよ要。

データベースにテーブルを作って、データをキャッシュしようと思います。

[link url=”https://popozure.info/20180824/13323″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”4797393157″][amzn-link asin=”4774190640″]

リンクをカードにするプラグインを作ろう!(6)文字コードを変換する

上手くタイトルと概要文が取れないサイトの対応をします。

前回まで

OGPが設定されていないサイトのタイトルと概要文を取得しました。

[link url=”https://popozure.info/20180817/13271″]

UTF-8以外の文字コードのサイト

文字コードがUTF-8以外の場合、正しく文字を扱うことが出来ず、タイトルや概要文が取得できません。

UTF-8に文字コードを変換すると上手く扱うことが出来ます。

文字コードがEUC-JPのサイト

←サイト名称
←タイトル
https://www.4gamer.net/ ←URL
←概要文

文字コードがシフトJISのサイト

←サイト名称
←タイトル
https://nttxstore.jp/ ←URL
←概要文

コードを書いていく

文字コードを変換する

cURLで取得した$htmlの文字コードをUTF-8に変換します。

[php title=”popo-blogcard.php” start-line=”26″ mark=”6″] if (curl_errno($ch ) ) {
$site_name = ”;
$title = $url;
$excerpt = ”;
} else {
$html = mb_convert_encoding($html, ‘UTF-8’, ‘ASCII,JIS,UTF-8,EUC-JP,SJIS’ );
if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}[/php]

タイトルと概要文が取得できた

もう一度試してみます。

文字コードがEUC-JPのサイト

www.4gamer.net ←サイト名称
4Gamer.net ― 日本最大級の総合ゲーム情報サイト。最新ゲームのニュース,レビューはここで! ←タイトル
https://www.4gamer.net/ ←URL
ゲームの最新ニュースをお届けします。また,ゲームのタイトルのユーザーレビューの募集/掲載や,発売スケジュールなども用意。遊びたいゲームを探す時にご活用ください! ←概要文

文字コードがシフトJISのサイト

nttxstore.jp ←サイト名称
NTTグループの安心オンラインストア – NTT-X Store ←タイトル
https://nttxstore.jp/ ←URL
NTTグループが運営する安心・安全の通販ショップNTT-X Store。パソコン、液晶ディスプレイ、デジカメ、デジタル機器、ネットワークカメラ、家電などを激安価格と即納で通信販売!送料無料やクーポンなどお得な商品を多数掲載中です。 ←概要文

今回のコード

今回はここまでです。

[php title=”popo-blogcard.php”]]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$html = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
}
$popo_blogcard = new popo_blogcard;[/php]

次回は・・・

スタイルシートを設定してブログカードっぽい見た目にしようと思います。

[link url=”https://popozure.info/20180819/13307″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”477414164X”][amzn-link asin=”B079VVPN46″]

EasyBotterで日本語の人だけフォローする

Twitterのbot作成によく使われるEasyBotterをカスタマイズしてみます。

phpでTwitter botが作れるEasyBotter

pha氏が作成・公開しているEasyBotterをカスタマイズしてみます。

[link url=”http://pha22.net/twitterbot/”]

日本語の人だけフォローする

autoFollow()をオンにしておくと、フォローしてくれた人を自動でフォローバックしてくれて便利なのですが、異国の方々が一気に増えることがあります。

そこでプロフィールに日本語がある人だけをフォローするカスタマイズを行いました。

まずは autoFollow() を書き換える

こんな感じに差し替えます。

[php title=”EasyBotter.php” start-line=”227″ mark=”4-30″] return $results;
}

//自動フォロー返しする(プロフィールに日本語がある人だけ)
function autoFollow(){
$followers = $this->getFollowers();
$friends = $this->getFriends();
$followlist = array_diff($followers[“ids”], $friends[“ids”]);
if($followlist){
$j =0;
for ($i = 0; $i < count($followlist); $i++ ) { $j++; $user_list[] = $followlist[$i]; if ($j >= 100 or $i == count($followlist)) {
$profiles = $this->getProfiles($user_list);
foreach ($profiles as $user) {
$text = $user[‘name’] . $user[‘description’] . $user[‘status’][‘text’];
if (preg_match(‘/[ぁ-んァ-ヶ]/u’, $text)) {
$response = $this->followUser($user[‘id’]);
if(empty($response[“errors”])){
echo $response[“name”].”(@“.$response[“screen_name”].”)をフォローしました”;
}
}
}
$j = 0;
unset($user_list);
}
}
}
}

//============================================================
//上の5つの関数から呼び出す関数
//============================================================[/php]

未フォロワーリストから100件ずつプロフィールを読み込んで、「ひらがな」か「カタカナ」がある場合のみフォローしに行っています。

100件ずつなのはAPIの制限です。

プロフィールを取得する関数を作成する

こんな感じで getFollowers() の下辺りに追加します。

[php title=”EasyBotter.php” start-line=”570″ mark=”10-22″] function getFollowers()
{
$url = “https://api.twitter.com/1.1/followers/ids.json”;
$response = $this->_getData($url);
if($response[“errors”]){
echo $response[“errors”][0][“message”];
}
return $response;
}
function getProfiles($user_id = NULL)
{
$url = “https://api.twitter.com/1.1/users/lookup.json?”;
if ($user_id) {
$url .= ‘user_id=’ . implode(‘,’,$user_id) .”&”;
}
$url .= “include_entities=true”;
$response = $this->_getData($url);
if(isset($response[“errors”])){
echo $response[“errors”][0][“message”];
}
return $response;
}

function checkApi($resources = “statuses”){
$url = “https://api.twitter.com/1.1/application/rate_limit_status.json”;
if ($resources) {
$url .= ‘?resources=’ . $resources;
}[/php]

完成

これでプロフィールに日本語がある人だけをフォローするようになりました。

日本語といっても漢字だけの人は中国の方と判断が難しいので「ひらがな」か「カタカナ」が1文字でも含まれている人です。

記号としてひらがなを使っている異国の方はフォロー返しをしてしまいます。

言語設定が日本語の人だけフォローする

しばらくしてから気づきましたが、言語設定が「日本語」の人という条件にすれば良い気がしてきました。

こんな感じになります。

[php title=”EasyBotter.php” start-line=”230″ mark=”1,14″] //自動フォロー返しする(日本語設定の人だけ)
function autoFollow(){
$followers = $this->getFollowers();
$friends = $this->getFriends();
$followlist = array_diff($followers[“ids”], $friends[“ids”]);
if($followlist){
$j =0;
for ($i = 0; $i < count($followlist); $i++ ) { $j++; $user_list[] = $followlist[$i]; if ($j >= 100 or $i == count($followlist)) {
$profiles = $this->getProfiles($user_list);
foreach ($profiles as $user) {
if ($user[‘lang’] == ‘ja’) {
$response = $this->followUser($user[‘id’]);
if(empty($response[“errors”])){
echo $response[“name”].”(@“.$response[“screen_name”].”)をフォローしました”;
}
}
}
$j = 0;
unset($user_list);
}
}
}
}[/php]

この方がすっきりして良いですね。

誰でもやりたそうなカスタマイズなのに全然情報が無かったですね。

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

リンクをカードにするプラグインを作ろう!(5)metaタグを取得する

引き続きリンク先のタイトルと概要文を取得します。

前回まで

リンク先から取得したHTMLを見て、OGPの情報を取得しました。

[link url=”https://popozure.info/20180812/13260″]

OGPが設定されていないサイト

OGPが設定されているサイトは上手くタイトルと概要文が取得できましたが、facebookでのシェアを意識していないサイトはOGP情報が設定されていません。

←サイト名称
←タイトル
http://www.metro.tokyo.jp/ ←URL
←概要文

titleタグとmetaタグのdescriptionを設定しているサイトは多いので、そっちを取得してみます。

コードを書いていく

titleを取得する

OGPのタイトルが取得できなかった場合、titleタグに書かれた文字を取得します。

[php title=”popo-blogcard.php” start-line=”31″ mark=”3-6″] if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/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]);
}[/php]

descriptionを取得する

OGPの概要文が取得できなかった場合、metaタグのdescriptionに書かれた文字を取得します。

[php title=”popo-blogcard.php” start-line=”31″ mark=”10-13″] if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
}[/php]

ドメイン名を取得する

OGPのサイト名称が取得できなかった場合、URLからドメイン名を取得します。

[php title=”popo-blogcard.php” start-line=”31″ mark=”17-19″] if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}[/php]

タイトルと概要文が取得できた

もう一度試してみます。

www.metro.tokyo.jp ←サイト名称
東京都公式ホームページ ←タイトル
http://www.metro.tokyo.jp/ ←URL
東京都庁の公式ホームページ。都政に関する最新情報、記者会見、都議会や各局の情報、統計、入札・契約情報、知事への提言など。 ←概要文

OGPが設定されていないサイトでもタイトルと概要文を取得することができました。

今回のコード

今回はここまでです。

[php title=”popo-blogcard.php”]]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”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]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$html = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
}
$popo_blogcard = new popo_blogcard;[/php]

次回は・・・

UTF-8以外の文字コードに対応しようと思います。

[link url=”https://popozure.info/20180818/13278″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”B075S15Y3S”][amzn-link asin=”B079Q31VLZ”]

[Pz-LkC][2.1.7]リンクをカード形式で表示するプラグイン更新。外部リンクのみ変換など。

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」。

最新版ver2.1.7を公式プラグインディレクトリで公開する予定しました。

ver2.1.6→ver2.1.7修正点

2018年8月9日に公開したver2.1.6からのバージョンアップです。

[link url=”https://popozure.info/20180809/13213″]

警告エラーを修正しました

Notice(警告エラー)が出ていたのを修正しました。(ver2.1.6.1修正分)

アンダーラインが表示されてしまうのを修正しました

設定変更するとアンカー文字にアンダーラインが表示されてしまうのを修正しました。(Ver2.1.6.2修正分)

サイト判定の方法を修正しました

外部サイト・内部サイト・同一ページの判断方法を修正しました。

外部サイトのみ変換を追加しました

設定画面に「外部リンクのみ変換」の項目を追加しました。

この設定項目にチェックを入れると「テキストリンク行の変換」および「URL行の変換」が外部リンクに対してのみ機能するようになります。

文字コードの取得方法を修正しました

PHPに文字コードを判断させたとき、キャッシュに記録する文字コードの種別を修正しました。

ver2.1.7→ver2.1.7.1修正点

かんたん書式設定の追加

「かんたん書式設定」に「見出し」を追加しました。

その他

お気づきの点などありましたら、コメント欄や、ツイッターアカウント「ぽぽろん@ぽぽづれ。(@popo68k)」もしくは「ぽぽづれ。(@popozure)」までご報告ください。

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

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

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

前回まで

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

[link url=”https://popozure.info/20180811/13236″]

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

OGPを取得する

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

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

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

[php title=”popo-blogcard.php” start-line=”25″ mark=”6-15″] $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 );
}[/php]

取得結果を表示する

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

[php title=”popo-blogcard.php” start-line=”30″ mark=”13-14″] } 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 = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}[/php]

確認してみる

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

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

記事中に、

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

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

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

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

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

今回のコード

今回はここまでです。

[php title=”popo-blogcard.php”]‘.$site_name.’

‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
}
$popo_blogcard = new popo_blogcard;[/php]

次回は・・・

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

[link url=”https://popozure.info/20180817/13271″]

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

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”4774189642″][amzn-link asin=”B075ZYQDRB”]