レ点腫瘍学ノート

pukiwikiカスタマイズ箇所/自作プラグイン/tweet.inc.php/tweet.inc.php_ver1.0 の履歴差分(No.8)


#author("2021-11-29T07:52:40+09:00;2021-04-29T07:39:47+09:00","default:tgoto","tgoto")
&tag(pukiwiki);#author("2021-07-03T16:24:01+09:00;2021-04-29T07:39:47+09:00","default:tgoto","tgoto")
#author("2021-11-29T08:10:55+09:00;2021-04-29T07:39:47+09:00","default:tgoto","tgoto")
&tag(pukiwiki);
このプラグインには新版があります。最新版についてはこちらのページを参照してください。

#ogpi(https://oncologynote.com/?b723fa4260)

----

#ref(https://oncologynote.com/img/b723fa4260.png,nolink)

PukiwikiにTwitterの単体のツイートを埋め込むだけのプラグインです。

TLの複数のツイートを埋め込んだり検索結果を表示するような高度な機能は備えていません。JavaScriptを利用しているので自分のpukiwikiサーバにはほとんど負荷をかけません。自分のpukiwikiを「はてなダイアリー」的なブログのように利用するために自作して自分だけで使っていたプラグインですが、せっかく作ったので公開しておきます。

#contents

*しくみ [#e912c2a4]

Twitter Publishで発行されるHTMLタグを出力するだけなので単純な構造です。プラグインの第1引数にツイートIDかツイートのURLのどちらかを記載します。

 #tweet(1375069974583074816) // ツイートIDを書く場合
 #tweet(https://twitter.com/m0370/status/1375069974583074816) // ツイートURLを書く場合

上記のように記載すれば、下記のようなツイートが表示されます。

#tweet(1375069974583074816)

**ツイートが読み込めないときのフォールバックを設定できます。 [#yb25cb7d]

[[Twitter Publish>https://publish.twitter.com/]]でツイートを埋め込むためのHTMLを出力させることができるので、これを複数行の第2引数として記載しておくと、ツイートが読み込めなかったときのフォールバックとして表示されます。遅延読み込みが完了するまでの間のスペースホルダとしても利用できます。

> #tweet(94008462){{
> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Installing Twitter!</p>&mdash; レ点.bot💉💊🧬 (@m0370) <a href="https://twitter.com/m0370/status/94008462?ref_src=twsrc%5Etfw">June 7, 2007</a></blockquote>
> }}

上記のように記載しておくと、下記のようになります。

#tweet(94008462){{
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Installing Twitter!!</p>&mdash; レ点.bot💉💊🧬 (@m0370) <a href="https://twitter.com/m0370/status/94008462?ref_src=twsrc%5Etfw">June 7, 2007</a></blockquote>
}}

このフォールバックを利用するためにはpukiwiki.ini.phpで複数行の引数を有効に設定しておく必要があります。具体的には下記のようにPKWKEXP_DISABLE_MULTILINE_PLUGIN_HACKが1であれば0に書き換えます。これはPukiwiki 1.4.6以降で有効な設定項目です。

 define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);

**昔すぎるツイートは読み込めません [#m6057daa]

ツイートのURLでもツイートIDでも使用できるようにしていますが、ツイートIDかどうかを判定するところを暫定的に9桁で判定しているので、非常に昔のツイート(ツイートIDが7桁以下だった時代)のツイートは読み込めません。

ぼくがTwitterを始めた2007年6月の時点ですでにツイートIDは9000万台なので、ツイートIDが8桁と言えば2007年夏頃までの古いツイートでしょうか…(ちなみに当時のTwitterはまだインターフェイスが日本語化されておらず非常にマイナーでした)。

#tweet(1375069974583074816)

**遅延読み込みを有効にするには [#deca4313]

lazysizes.jsを使用しているサイトでは遅延読み込みを使用することができます。遅延読み込みをしない場合のツイート埋め込みは、ページ読み込み速度を評価するPagespeed Insightのスコアが非常に悪くなり、ひいてはSEOにも悪影響を与えるので、lazysizes.jsを使っているサイトでは設定の遅延読み込み部分をTRUEにすることをオススメします。

 define('PLUGIN_TWEET_LAZYLOAD', 'TRUE'); //遅延読み込み有効(lazysizes.jsが必要です)
 define('PLUGIN_TWEET_LAZYLOAD', 'FALSE'); //遅延読み込み無効

なお、この設定をTRUEにする場合のlazysizesは、blockquote要素でも遅延読み込みを有効にするためのunveilhooksプラグインを併用する必要があります。当サイトではJavaScript用CDNのjsdelivrを使っていますので、下記のHTMLタグをスキンに設置しておいて外部からこのjsファイルを読み込ませています。もちろんローカルに設置してもかまいません。

 <script src="https://cdn.jsdelivr.net/combine/npm/lazysizes@5,npm/lazysizes@5/plugins/unveilhooks/ls.unveilhooks.min.js" async></script>

*プラグインの中身 [#d0d59eba]

 <?php
 
 define('PLUGIN_TWEET_LAZYLOAD', 'TRUE'); // lazysizes.jsを使っているサイトはTRUEに、使っていないならFALSEに
 
 function plugin_tweet_convert()
 {
 $amptw = func_get_args();
 preg_match('/[0-9]{8,30}/', $amptw[0], $tweetids); //URLでもツイートIDでも投稿できるように
 $tweetid = end($tweetids);
 
 if (PLUGIN_TWEET_LAZYLOAD) {
 	$twitterjs = '<div class="lazyload" data-script="https://platform.twitter.com/widgets.js"></div>';
 } else {
 	$twitterjs = '<div script="https://platform.twitter.com/widgets.js"></div>';
 }
 
 return <<<EOD
 <blockquote class="twitter-tweet">
    <a href="https://twitter.com/user/status/$tweetid">$amptw[1]</a>
 </blockquote>
 $twitterjs
 EOD;
 }
 ?>

*余談 [#a1a9cb1f]

このプラグインを[[Pukiwiki公式サイト>https://pukiwiki.osdn.jp/]]の自作プラグインのページでも公開しようと思ったのですが、どうもURLなどを含んでいるとスパム投稿と判定されてしまうのか投稿ができないんですよね…。だれでも投稿できるwiki系システムはスパムに悩まされるという運命がついて回るのですが、しかしPukiwiki公式サイトの設定はちょっと厳しすぎるような。CHAPTAではじくような仕組みにできないものなんでしょうか。。。

*新バージョンについてはこちら [#x280e508]

#ogpi(https://oncologynote.com/?b723fa4260)

#description(PukiwikiにTwitterの単体のツイートを埋め込むだけのプラグインです。ツイートが読み込めないときのフォールバックを設定できます。遅延読み込みにも対応しています。)