[Pz-LkC][1.6.0]リンクをカード形式で表示するプラグイン更新。スケジュールによる取得など

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

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

最新版ver1.6.0を公式プラグインディレクトリで公開しました。

(2015/11/19)ver1.6.1…ツイート数の取得をしなくしたものの、現在まだ取得できているので制限がかかるまでの時間を延長しました。
(2015/11/20)ver1.6.2…現地時刻で11月20日になりましたが、まだ取得できているので、一時的に制限をはずしました。

このプラグインはなんだ?Σ(゚ロ゚)o゙

この「Pz-LinkCard」は、リンクをカード形式で表示するWordPress用プラグインです!Σ(゚ロ゚)o゙

インストール方法や使い方は下記ページに用意させていただいています。

WordPressでリンクをブログカード形式で表示させたいけど、プラグインとかで手軽にやりたーい!Σ(゚ロ゚)o゙

見た目、外観、外見、デザインも自分なりに変更したーい!Σ(゚ロ゚)o゙

そんな方にお勧めです。

ver1.1.1→1.6.0変更点など

「Pz-HatenaBlogCard ver1.2.7」とバージョン番号が近いと、ぼくがどっちがどっちだか混乱しそうなので、とりあえずバージョン番号を飛ばしてみました。

ソーシャルカウントの取得にwp-cronを使用するようになり、スケジュールされるようになりますが、細かい指定ができないので改善の余地ありです。

記事内容の取得もスケジュールできるようになったらメジャーバージョンを上げようと思っています。

リンク先の取得をcURLに変更

リンク先の記事内容(タイトル、抜粋文)を取得するのに wp_remote_get() を使用していたのですが、cURLを使用するように変更しました。

タイムオーバーやユーザーエージェントの指定、リダイレクトも追いかける機能があるためです。

たとえば短縮URLを指定した場合も、その先のタイトルと抜粋文が取得できます。(ドメインは短縮URLのドメインになってしまうので、お勧めはしません)

cURLはサーバーによってはサポートしていないようなので、cURLがサポートされていない場合には今までどおり wp_remote_get() を使用します。

文字セットの取得方法を変更

変換してみた結果で文字セットを自動判断するというのをやっていましたが、「charset」指定を見るようにしました。

metaタグの内容を見ようと思ったものの、書き方に「幅」があって、まともに判断すると大変そうでした。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta charset="utf-8">

シングル/ダブルクォートがあったりなかったり、パターンもあって、あれこれやった内に諦めて、head の中にある charset を探して取得することにしました。

if (preg_match('/charset\s*=\s*([^>\/\s]*).*<\/head/si', $html, $m)) {
$m[1] = trim(trim($m[1]), '\'\"');
$charset = $m[1];
}

charset が指定されていない場合は、今までどおり文字化け確認して設定します。

ソーシャルカウントの取得方法をスケジュールするように変更

リンクカード表示の初回に記事内容の取得と、ソーシャルカウントの取得をしていました。

ソーシャルカウントの取得を wp-cron を使用して、スケジュール取得するようにしました。

初回表示時にスケジュール登録するので、最初はソーシャルカウントが表示されません。

10秒後にスケジュールするので、15~20秒後くらいにはソーシャルカウントが表示されるようになります。

ソーシャルカウントの再取得もスケジュール

一定時間ごとにソーシャルカウントの再取得をスケジュールして、最後のソーシャルカウントの取得から一定時間が過ぎているものを再取得します。

今のところ1時間ごと(hourly)に実行するようにスケジュールしています。

12時間ごと(twicedaily)の方が負荷が少ないかとも思ったのですが、リンクが増えてきて12時間ごとに一気に再取得するよりも、1時間ごとに少しずつ再取得する方が良いと考えました。

一回の再取得は10件まで行い、続きは30秒後にスケジュールすることで、カウント取得APIへのアクセス負荷を緩めているつもりです。

疑似cron(wp-cron)はアクセスが無いと実行されないので、テストサイトとかだとなかなか実行されない場合があります。

※Twitterのツイート数取得は2015年11月20日から使えなくなります。設定画面でチェックを入れておくことで表示はされますが更新されません。→ver1.6.9から再度取得できるようになりました。

カード内部の余白設定を追加

カード内部の余白がもう少し広い方が良いという要望があったため、余白を調整できるように修正しました。

ver1.6.0→1.6.1変更点など

「ツイート数取得をしなくする日」を一日延ばしました

「ツイッターのツイート数取得APIが11月20日までに閉鎖する」ということだったので、11月20日以降はAPIにアクセスしないように修正済みです。

なぜか本日、11月20日を超えた処理になっていたため、一日伸ばしました。

current_time() で現在時刻を取っているので、今晩まで大丈夫だと思ったのですが…(^-^;

他のサーバーや環境では問題無いのかも知れませんが、一日延ばしました。

その他

ソーシャルカウントをスケジュール取得

カードの表示速度そのものを上げるため、ソーシャルカウントの取得をバックグラウンド処理にしました。

wp-cronを使用しているので、wp-cronを止めている場合、ソーシャルカウントが更新されません。

ソーシャルカウントの表示位置を「なし」に設定している場合、カウントの取得は行いません。(スケジュール実行そのものはされますが、何もせず終わります。)

しばらく表示されていない古い記事に貼られたカードのソーシャルカウントも取りに行ってしまうので、「スケジュールで取得」「表示されたときに一定期間過ぎていたら取得」みたいな設定項目を作って、表示されないカードのカウントは取らないようにできるようにしたいとは考えています。

タイトルの取得をOGPよりtitleタグを優先するように変更しようとしてやめた話

og:title にはサイト名が入っていないことが多く、titleタグにはサイト名も入っていることが多いと思います。

サイト情報を表示しない場合、サイト名が無いので title から取った方が良いと思い、こっちを優先しようと考えました。

ツイートのURLをリンクカードにしたときに、OGPを優先にした方が見栄えが良かったのでやっぱりこのままにしました。

ツイートのURLをリンク先にした例。
↓このツイートが無かったら未だPz-LkCは公開していなかったかも…

パラメータでOGP情報を優先して取得するかどうか選べた方が便利そうでしょうか?

cURLを使うようにとか

wp_remote_getでは取得できないサイトさんがあって、cURLを優先的に使用するようにしましたが、「あまり状況は変わらなかった」というのが正直なところです。

リダイレクトされているサイトさんなんかは取得できるようになりましたが、SSLを使用している一部サイトさんは取得できないことがあります。

SSL検証を無効にする機能を付ければ取得できるのかも知れませんが…悩ましいです。

不具合、というほどでもないけど

内部リンクの取得には get_post() を使用しているため、「非公開」や「パスワード付」記事のリンクカードを設定した場合にタイトルや抜粋文が取得できてしまいます。

投稿を不特定多数に許していて、かつ非公開記事がある場合には注意が必要です。

単純に非公開記事やパスワード付記事をはじくと、「非公開記事の中で、他の非公開記事へリンクする」といった使い方はできなくなります。

タイトルと抜粋文(通常100文字程度。最大500文字)が見えてしまう可能性がありますが、記事そのものが開けるわけではありません。

 その他

不具合やご要望などありましたら、コメントもしくはツイッター(@popozure)のDMなどでお気軽におたずねくださいませ。

コメント

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