[Pz-LkC]「WordPress」と「紙がめくれた効果」と「リンクカード」

「紙がめくれた効果」というのがあって、右下にナナメの影を入れることで「紙の右下が持ち上がっているように見える」というものです。

「Pz-HatenaBlogCard」とか「Pz-LinkCard」にこの効果を実装したかったのですが、これがなかなか厄介でした。

CSS3のbox-shadowを使ってdiv要素に影をつけ、紙がふわりと浮かんだようなエフェクトをつけるスタイルシートを紹介します。
[link url=”http://coliss.com/articles/build-websites/operation/css/css3-box-shadows-effects-by-paulund.html”]

自分でもHTMLとCSSのファイルをローカルで用意して実験してみると、ちゃんと右下に影ができるのですが、いざWordPress上でやってみると「背景より下」に影が表示されてしまっているようです。

z-index をあれこれいじってみても表示されません。

というか、z-index を0とか1とかにすると、本体のボックスそのものよりも上に影が表示されてしまいます。

 

テーマの背景をいじってみるとちゃんと影は表示されるのですが、背景が無いのではカードの見栄えどうこうでは無いですね(^-^;

 

とりあえず、諦めていたのですが。

もう一度チャレンジです。

「ボックスの上に影が出ちゃうなら、その上にもうひとつボックス置けばいいんじゃ?Σ(゚ロ゚)o゙」

とは思っていたので、それをやってみます。

※最初はHTMLで直接書いていたのですが、ビジュアルエディタで編集するとHTMLタグが消えちゃうので画像にしました。

curling

「できたっΣ(゚ロ゚)o゙」

外側を class=”box1″ にして position: relative の影部分が飛んでいかないように囲っています。 class=”box2″ が影を作るための空っぽの div 。一番内側が class=”box3″ 、枠付けて色塗って、z-index を高くしているので、影よりも上位に表示されています。

[html decode=”true”]<div class=”box1″>
<div class=”box2″>
<div class=”box3″>
紙がめくれた効果
</div>
</div>
</div>[/html]

[css decode=”true”].box1 {
width: 500px;
margin: 16px;
}
.box2 {
position:relative;
}
.box2::after {
position:absolute;
z-index:0;
content:””;height:10px;width:60%;
right:12px;
bottom:14px;
left:auto;transform:skew(3deg) rotate(3deg);
-webkit-transform:skew(3deg) rotate(3deg);
-moz-transform:skew(3deg) rotate(3deg);
box-shadow:0 16px 16px rgba(0,0,0,1);
-webkit-box-shadow:0 16px 16px rgba(0,0,0,1);
-moz-box-shadow:0 16px 16px rgba(0,0,0,1);
}
.box3 {
position:relative;
z-index:1;
height: 150px;
padding: 8px;
border:1px solid #000;
background-color: #fff;
box-shadow:0px 2px 6px rgba(0, 0, 0, 0.8) , 0px 0px 16px rgba(0, 0, 0, 0.1) inset;
}[/css]

でも、影付けたいがために、無駄に <div>~</div> が増えちゃいます(^-^;

ただでさえ、無駄な <div>~</div> が多くて見直さないと…と思っていたのに、もうひとつ増やすのもちょっと抵抗があります。(^-^;

それと、一番外側の div で width と margin を指定して、一番内側の div で height と padding を指定して…という感じになってしまって、なんかもう、普通に CSS がごちゃごちゃになりそうです。

やっぱり、「WordPress」で「紙がめくれた効果」は無理なのかなぁ(^-^;

と思っていたところに、ピンポイントな記事が!Σ(゚ロ゚)o゙

記事「[CSS]box-shadowを使って洗練されたエフェクトを加える二つのテクニック | コリス」等において、紙がめくれたようにするためのCSSが紹介されていますが、私の認識だと、ほとんどのテーマでは適用できません。
[link url=”https://comemo508.wordpress.com/2012/12/23/%E7%B4%99%E3%81%8C%E3%82%81%E3%81%8F%E3%82%8C%E3%81%9F%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8Bcss%E3%82%92-wordpress-com-%E3%81%AE%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%99/”]

そうそう、「ほとんどのテーマでは適用できません」、そのまんまの認識でした。

そして、「親要素に『z-index:1;position:relative;』を追加すれば適用できるように」と書いてありました。

ここでの「親要素」っていうのは、つまりは記事が表示される領域、自分が「背景」と呼んでいたところです。

テーマ「Twenty Eleven」を使っていたら .entry-content と .entry-summary に position: relative; z-index: 1; を与えて、うまく表示されたようです。

んー、これをなるべく開く適用されるように…こんな感じにしてみます。

[css]article {
position: relative;
z-index: 1;
}[/css]

おお、この状態だと、無駄に影用の div と、カード表示用の div とか用意しなくてもちゃんと表示されました!Σ(゚ロ゚)o゙

 

というわけで、定型書式「紙がめくれた効果」を選んだときには、 article の z-index をいじるように変更しました。

定型書式「テープと紙めくれ」も追加しました。

テーマによっては表示に不具合が出る場合があります。その場合、「紙めくれ」とは組み合わせられません。

次回のバージョンアップで「Pz-LinkCard」に実装します。

では(^-^)o

簡単Wi-Fi対応状況を更新しました/追加機種のWPS設定方法

「AndroidのWi-Fi簡単設定(WPS/AOSS/らくらく無線スタート) 対応状況」を更新しました。

追加した機種と、そのWi-Fi簡単設定の方法です。

Samsung Galaxy S6 edge SC-04G (NTT docomo)

2015.04.23発売。[icon name=”android” class=”fw border”]Android 5.0。

WPSでの設定に対応しています。

WPSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. 画面左下の[icon name=”th-large” class=”border fw”]を押して「アプリ一覧」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. 「Wi-Fi」のスイッチ表示がオフ([icon name=”toggle-off” class=”border fw”])だったら押してオン([icon name=”toggle-on” class=”border fw”])にします
  5. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  6. 画面右上の「その他」を選びます。
  7. 「WPSプッシュボタン/WPS PIN エントリ」を選びます。
  8. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンを数秒間押して、WPSのランプが点滅を始めたら離します。
  9. 登録完了まで1分程度待ちます。

arrows Fit F-01H (NTT docomo)

2015.10.07発売。

WPSとAOSSでの設定に対応しています。

また、Wi-Fiテザリングで親機として動作する場合もWPSとAOSSでの設定に対応しています。

WPS/AOSSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. 「アプリ一覧」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. 「Wi-Fi」のスイッチ表示がオフ([icon name=”toggle-off” class=”border fw”])だったら押してオン([icon name=”toggle-on” class=”border fw”])にします。
  5. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  6. 「かんたん接続」を選びます。
  7. 「WPS方式」→「プッシュボタン方式」と選びます。AOSSの場合、「AOSS方式」を選び「AOSSボタン」をタップします。
  8. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンもしくはAOSSボタンを数秒間押して、ランプが点滅を始めたら離します。
  9. 登録完了まで1分程度待ちます。

WPS/AOSSでのWi-Fiテザリング簡単設定

  1. ホーム画面の状態にします。
  2. 「アプリ一覧」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. 「データ通信・機内モード」を選びます。
  5. 「テザリング」を選びます。
  6. 「Wi-Fiテザリングかんたん接続」を選びます。
  7. 登録方式に応じて登録を行います。
    • WPSを使う場合…「WPS方式」→「プッシュボタン報知器」を選んで、子機側でWPS登録の手順を行います。親機側の操作をするように指示されたら「OK」を押します。
    • AOSSを使う場合…「AOSS方式」を選んで、子機側でAOSS登録の手順を行います。親機側の操作をするように指示されたら「OK」を押します。
  8. 登録完了まで1分程度待ちます。

BASIO by KYOCERA (au)

シンプルスマートフォン「ベイシオ」。2015.02.13発売。

ボタンが大きいオリジナルのメニューで、「シンプルスマホ」とか「かんたんスマホ」といわれるタイプのものですが、Google Playに対応しているなど、「シニア向けスマホでは満足できない シニアのためのシンプルスマホ」という位置づけだそうです。

WPSでの設定に対応しています。

WPSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. ホーム画面を左にスライドさせます
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. [icon name=”cog” class=”border fw”]「その他の設定」を開きます。
  5. 「Wi-Fi」のスイッチ表示が OFF([icon name=”toggle-off” class=”border fw”])だったら押して ON([icon name=”toggle-on” class=”border fw”])にします。
  6. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  7. 左下の「Wi-Fiかんたん接続」を押します。
  8. 「WPSボタン」を選びます。
  9. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンを数秒間押して、WPSのランプが点滅を始めたら離します。
  10. 登録完了まで1分程度待ちます。

TORQUE G02 by KYOCERA (au)

とにかく頑丈。耐海水なので、海でも山でも大丈夫な「トルク」。

2015.07.16発売。[icon name=”android” class=”fw border”]Android 5.1。

男子としては、この「ゴツさ」が無意味に欲しくなりますΣ(゚ロ゚)o゙

WPSでの設定に対応しています。

Android 5.x ではWi-Fiから、「メニュー→詳細設定→WPS」と行くのが、スタンダードな設定なのですが、分かりづらいですよね。(^-^;

WPSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. [icon name=”th” class=”border fw”]「アプリ一覧」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  5. Wi-Fi」のスイッチ表示が OFF([icon name=”toggle-off” class=”border fw”])だったら押して ON([icon name=”toggle-on” class=”border fw”])にします。
  6. 右上の[icon name=”ellipsis-v” class=”fw border”]メニューボタンを押して、「詳細設定」を選びます。
  7. 「WPSプッシュボタン」を選びます。
  8. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンを数秒間押して、WPSのランプが点滅を始めたら離します。
  9. 登録完了まで1分程度待ちます。

UABANO V02 by KYOCERA (au)

「美しく強く、スタイリッシュ」な「アルバーノ」。

2015.07.18発売。[icon name=”android”]Android 5.1。

WPSに対応しています。

WPSでのWi-Fi簡単設定

TORQUE G02 と設定方法がまったく同じなので省略。

Samsung Galaxy S6 edge SCV31 (au)

2015.04.23発売。[icon name=”android” class=”fw border”]Android 5.0。

WPSでの設定に対応しています。

WPSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. 画面左下の[icon name=”th-large” class=”border fw”]を押して「アプリ一覧」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  5. 「Wi-Fi」のスイッチ表示がオフ([icon name=”toggle-off” class=”border fw”])だったら押してオン([icon name=”toggle-on” class=”border fw”])にします
  6. 画面右上の「その他」を選びます。
  7. 「WPSプッシュボタン/WPS PIN エントリ」を選びます。
  8. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンを数秒間押して、WPSのランプが点滅を始めたら離します。
  9. 登録完了まで1分程度待ちます。

AQUOS SERIE SHV32 (au)

2015.06.05発売。[icon name=”android” class=”fw border”]Android 5.0。

WPSとAOSSでの設定に対応しています。

テザリングはWPSでの設定に対応しています。

WPS/AOSSでのWi-Fi簡単設定

  1. ホーム画面の状態にします。
  2. ホーム画面を左にスライドさせ、「アプリシート」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. [icon name=”wifi” class=”border fw”]「Wi-Fi」を選びます。
  5. 「Wi-Fi」のスイッチ表示がオフ([icon name=”toggle-off” class=”border fw”])だったら押してオン([icon name=”toggle-on” class=”border fw”])にします。
  6. [icon name=”ellipsis-v” class=”fw border”]メニューボタンを押して、「簡単設定」を選びます。
  7. WPSで登録する場合、「WPSプッシュボタン」を選びます。AOSSで登録する場合、「AOSS」を選びます。
  8. 画面に指示が表示されたら、それに従って無線LAN親機のWPSボタンもしくはAOSSボタンを数秒間押して、ランプが点滅を始めたら離します。
  9. 登録完了まで1分程度待ちます。

WPSでのWi-Fiテザリング簡単設定

  1. ホーム画面の状態にします。
  2. ホーム画面を左にスライドさせ、「アプリシート」を開きます。
  3. [icon name=”cog” class=”border fw”]「設定」を開きます。
  4. [icon name=”ellipsis-h” class=”fw border”]「もっと見る」を開きます。
  5. 「テザリング」を開きます。
  6. 「Wi-Fiテザリング簡単接続」を選びます。
  7. 「WPSプッシュボタン」を選びます。
  8. 子機側でWPS登録の手順を行います。
  9. 登録完了まで1分程度待ちます。

AndroidのWi-Fi簡単設定 対応状況

こちらのリンクからキャリア・メーカー・型番等で検索ができます。

[link url=”https://popozure.info/20130311/3626″]

検索ボックスに「メーカー名」や「型番」を入力すると、Wi-Fi簡単設定の対応状況をささっと見る事が出来ます。

型番検索

[Pz-LkC][1.0.0]リンクをカードにするプラグイン更新。管理画面の機能強化など

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開中です。

このプラグインは何?インストールはどこから?

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

「テキストでのリンクって味気ないなぁ」とか思っていたら、ぜひお試しください。

 

Pz-LinkCardの使い方やインストール方法をまとめたページを用意しています。

ちょっと興味がありましたらどうぞご覧ください。

[link url=”https://popozure.info/pz-linkcard”]

変更点など

なんかもう、直しすぎて、どこ直したんだか…。

自分であまり使っていない設定などは検証が足りていないかも知れません。

ご意見やご報告など、コメントやツイッター(@popozure)などでいただけるとありがたいです。

プログラムのつくりを見直しました

ショートコードの実行部分とカード作成部分とキャッシュ部分とかをようやっと分けました。

これによって、キャッシュを削除せず、更新だけできるようになりました。

あれこれサブルーチン化とかをして、ようやっとプログラムっぽくなってきた気がします(^-^;

URLの判定方法を変更

URLが空欄だったときなど、URLじゃない文字が入っていても処理を通っていたので、早めに抜けるようにしました。

「http://」と「https://」以外は無視するようにするといいような気もするのですが、場合によっては色んなプロトコルにリンクカードとして使って、テキストとかは自分で設定する場合もあるかと思うので、今のところ制限していません。

ショートコードに囲み文字の仕様変更

「ショートコードに囲まれた文字列」を「使用しない」「タイトルに使用」「抜粋文に使用」という設定がありますが、1番目のショートコードにのみ適用されるようになりました。

Pz-HBCでは外部リンクのタイトルや抜粋文を取ってこれなかったので、カードのレイアウトを変更したい方は、ブックマークレットを併用していたと思います。

Pz-LkCでは自前取得できるようになったものの、同一の記事に同一ショートコードが [Shortcode xxx]~[/Shortcode] というように閉じがあったり、[Shortcode xxx] と単体で使ったりすると、綺麗に表示されませんでした。

1個目のショートコードを「bm」にして、「タイトルに使う」に設定。

2個目を「blogcard」にする、などすることで、別のショートコードになるので、閉じありとなしが混在できるようになります。

 

判定するタイミングも変えてしまったので、Pz-HBCとは挙動が違うかも知れません。

あまりに変だったら対応しますが、外部サイトの情報は取得できない Pz-HBC と違うので、同じには出来ないかも知れません。

ショートコード3を解放しました

内部的にはショートコード3が使えるように変更しました。

内部的には4まで設定されているので、要望があれば解放できます。

文字エンコードまわりを修正しました

最初は文字セットを考えていなくて、シフトJISのサイトとかが化け化け。(NTT-Xストアなんですけどね(^-^;)

通信業界最先端のNTTさん、UTF-8にはしないのでしょうか…(^-^;

NTTグループの安心オンラインストア NTT-X Store
[link url=”http://nttxstore.jp/”]

mb_convert_encoding() で自動変換してみたものの、そのサイトは変換されず…サイトそのものは Shift_JIS なのに、広告が utf-8 という状態で、自動変換できなかったようです(^-^;

 

とりあえず、文字セットの変換は落着していた気がしていたのですが、ver0.1.4を公開した後、英語のページで記事中に「’s」(アポストロフィーエス)が化けていたのを発見。

[link url=”https://tweetdeck.twitter.com/”]

そんなわけで、文字セットの判断方法を修正しました。

metaタグから文字コードを取るのが一番確実っぽいのですが、古いサイトだとそもそもcharsetとかちゃんと設定されていない場合もあるので、判定する方向でやりたいと考えていました。

(たとえ指定が間違っていたとしても、 charset 指定を信用するというのが一番の正解のような気はするのですが…(^-^;)

とりあえず一通りコンバートしてみて、一番いいのを見つけるやり方にしてみました。

ちなみに変換先の charset は、UTF-8 でほぼ間違え無しだと思うのですが、get_bloginfo(‘charset’) で取得したものを使用しています。

例えば $str が ‘UTF-8’ だった場合、mb_convert_encoding($str, ‘UTF-8’, ‘UTF-8’) の結果は、元の $str と同じになるはずです。
[link url=”http://dwm.me/archives/3562″]

これでも先ほどの NTT-Xストア は正しく判別できなかったので、今までどおりの判定方法と組み合わせています。

キャッシュまわりを見直しました

とりあえず、少しだけ関数化して、取得と更新が独立して行えるようになりました。

このために、管理画面から「今すぐキャッシュ更新」が出来るようになりました。

DBの読み書きまわりも手を入れたのですが、なかなか難しい(^-^;

返りは Class で返ってくるけど、新規のときに stdClass を作って適当に放り込もうとしたら、array ほど手軽には扱えないようですね(^-^;

とりあえず、DB更新まわりはもうちょっときれいに直したいです(^-^;

ソーシャルカウント部分は手つかず

ソーシャルカウントを取得する部分は今回手つかずです。

最終的にはリンクカードを作成するときには一切ソーシャルカウントは作らず、スケジュールだけするようにしたいです。

閲覧者がページを表示するタイミングとは別に、裏でソーシャルカウントを取得することで、「初回の表示が数秒かかる」というのも改善したいと思っています。

タイトルが取得できていない場合にURLを表示

タイトルが取得できない場合、URLを表示するのですが、設定するタイミングがちょっとおかしかったので修正しました。

特に Pz-HBC のときにはブックマークレット等を使用して、「ショートコードで囲まれた文字列」を「タイトルに使用」で使っていたけど、Pz-LkC に乗り換えたので、「使用しない」にした場合とかに、description パラメータはあるのにタイトルの指定が無くて空欄→URL という感じになっていました。

なお、Pz-LkC では、タイトルと抜粋文を取得して、そのままキャッシュしておくので、タイトルや抜粋文を指定しないのを推奨します。

ただし、タイトルや抜粋文も指定しておくと、他プラグインへ乗り換えるときにスムーズかも知れません。

キャッシュ管理がそれっぽくなりました

キャッシュ管理画面がそれっぽくなってきました。

というか、今回、ほとんどここを修正してました。

  • 今回、phpやWordPress向けプログラムの経験不足を特に感じました。(毎回感じていますが…(^-^;)
  • 画面が凄い「WordPressっぽい」です。なぜなら、WordPressのCSSとかclassに乗っかってるからです…。今後のWordPressの仕様変更により、画面が乱れたり、動作がおかしくなる可能性があります。
  • 見栄えを考慮して、URLとタイトルの列は合わせて2行書きで表示されます。
  • 一覧にインラインメニューを追加。
  • 1個だけ削除する場合にも一括処理を選択していましたが、インラインメニューから単体に対して「編集」「再取得」「削除」ができるようになりました!
  • 「編集」を押すと、取得済のタイトルと抜粋文を修正できます。既に「リンク切れだけど、記録としてどうしても残したい」とか、「相手がブログじゃないから、抜粋文が取れない」といった場合に、手入力できます。
  • 「削除」を押すと、キャッシュ削除できます。どこの記事にも使用されていなくて、要らない場合に削除できます。
  • 内部リンクのURLにリンクを設定しました。(外部リンクの場合、リファラーにあれこれパラメータが乗ってしまうので設定していません。)
  • バッチ選択に「今すぐ再取得してキャッシュしなおす」を追加しました。過去バージョンで抜粋文が取得できなかったものにチェックを入れて、更新できます。
  • 「すべてのドメイン」と書かれているところを押すと、ドメインの一覧が表示され、抽出が行えます。
  • ページング機能(ページャー)が着きました。1ページ10件表示されます。(今までの無尽蔵に表示されていた方が見やすいときがあります。件数を変更できるように検討します。)
  • 項目を押すたびに、降順/昇順が入れ替わります。ソーシャルカウントの項目にもソート機能が付きました。

(追加)変更点など

ver1.0.0→1.0.1

  • 「内部IDに0が入る不具合を修正」
    カードが表示されるたびに、内部では通番が振られています。
    リンク先が 404 エラー のまま取得できているものをカード管理を編集して、その後、記事を表示した場合にIDが0になってしまう不具合がありました。
    この不具合により、同一URLのキャッシュが作成されている場合がありますが、特に問題は無く、気になる場合は管理画面から削除してください。

(追加)ver1.0.1→ver1.0.2

  • プラグインをバージョンアップさせるたび、標準設定が「チェックを付ける」になっているチェック項目が、標準設定で上書きされてしまう不具合を修正。
  • キャッシュ取得、キャッシュ更新(上書き)、キャッシュ削除を関数化。
  • 「Pzカード管理」画面の動作改善。
    • キャッシュの読み書きと削除を関数化した処理を使用するように修正。
    • 一括処理「SNS更新」をフラグを立てるだけでなく、その場で取得するように修正。
    • 編集したときに、内部IDが0になってしまう現象が直ってなかったので、編集にかかる処理を見直し、修正。
  • ソーシャルカウントのチェックを外しても、表示されていたのを修正。
    • ソーシャルカウントを表示する設定をしている場合、すでにカウントを取得していると、個別の表示のチェックを外しても表示がされていたのを修正しました。
      たとえば、ツイート数が「5」と取得されているときに、「ソーシャルカウントは表示する」になっているけど、「ツイッター」のチェックを外した場合、取得はし直さないものの「5 tweets」と表示されていました。

その他

ブックマークレットの使用など

Pz-HBC では、自力で外部サイトのタイトルや抜粋文を取得できなかったので、タイトルや抜粋文を持ってくるブックマークレットの使用を推奨させていただいていました。

Pz-LkC では、登録時(初回表示時)に、リンク先サイトからタイトルと抜粋文を取ってきてキャッシュしてしまうので、ブックマークレットを使う必要がありません。

 

ただし、今後、WordPressを移転した場合に、キャッシュデータが引き継げない場合、取得したテキストは無くなってしまいます。

また、今後、他のプラグインに乗り換えた場合に、ショートコードとともにタイトルや抜粋文があった方が便利な場合があります。

そんなわけで、ブックマークレットを使用していても、Pz-LkC では、「ショートコードに囲まれた文字列」を「使用しない」としておくのが良いかと思います。

スケジュールしたい

wp-cronという疑似スケジュールがあるのですが、「ソーシャルカウントの取得」など、時間のかかるものはスケジュールだけしておいて、閲覧と関係ないタイミングで取得しておく、という仕組みにしたいです。

キャッシュ管理にDBを使うことの不安と安心

「キャッシュ管理」=「Cache manager」。ファイル名は「pz-linkcard-cacheman.php」。キャッシュマンって呼んでます。

DBを使うことそのものはそんなにストレス無いのですが、やはりインジェクションとか怖いです。

一応、「wpdbは1つのテーブルしか扱えない」といった制限があるので、wpdbクラスでアクセスしている限り、ある程度てきとうにSQL発行しても大丈夫そうではあるのですが(^-^;

なんか脆弱性があったら、こっそり教えて貰えると嬉しいです(^-^;

バージョンとか

当初に「ここまでは作らないと!Σ(゚ロ゚)o゙」とか思っていたところまでようやっと作れた気がします。

そんな思いがあって、バージョンもメジャーバージョンを上げて、「0.1.4」から「1.0.0」になりました。

(機能が一部似ている Pz-HBC のバージョンが 1.2.x とかで、まぎらわしいので、Pz-LkC のバージョンは無駄に 2.x.x にあげちゃおうかとも迷っています。)

管理画面、知識量が絶対的に足りてなくて、細かいところが気になりますが(^-^;

とりあえず、タイトルと抜粋文が上手く取れていない場合など、「編集」できる機能は必須だと考えていたので、ここまで出来て良かったです(^-^;

では(^-^)o

[Pz-LkC][0.1.4]リンクをカードにするプラグイン更新。metaタグ解析改善など

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開中です。

このプラグインは何?インストールはどこから?

リンクを紹介するときに、カード形式で表示できちゃうWordPressプラグインです。

 

Pz-LinkCardの使い方やインストール方法をまとめたページを用意しています。

お手数ではありますが、ちょっと興味がありましたら見てみてくださいませ。

[link url=”https://popozure.info/pz-linkcard”]

変更点など

ここ何回かのバージョンアップで、毎回OGP情報とかをパースするところを直している気がします。

これも未熟ゆえ…いやあ、勉強になります(^-^;

 

下記のような修正をしています。興味のある方はお読みください。

 

とりあえず、使う方を考える通常の方は、タイトルや抜粋文が取得できずに空欄になっているリンクがあったら、「ツール」→「Pz カード管理」から、該当のリンクにチェックを付けて「削除」をしてください。

(「抜粋文」順に並べると消しやすいかと思います。)

 

そのページを表示しなおすと、タイトルと抜粋文が取得できるかも知れません。

 

それでも取得できないページは、コメントかツイッター(@popozure)で教えていただけると対処できるかも知れません。

HEADの切り出しに失敗してました…

リンク先のHTMLを取得して、OGP情報とかを取得してくるのですが、毎回毎回 <head>~</head> から、<body>~</body> まで見てると、大きいページだと効率が悪そうなので、<head>~</head> にしてから、metaタグを拾っています。

[php title=”pz-linkcard.php” start-line=”416″ decord=”true”]// HEADタグ
$head = null;
if (preg_match(‘/<head>(.*)</head>/si’, $html, $m)) {
$head = $m[1];
}[/php]

ところが、タイトルが空欄に、抜粋文も空欄に…というサイトが。

HTMLソースを見ると、ちゃんとmetaタグとかあって、og:title も og:description も定義されています。

ぽぽろん「なんでだー?Σ(゚ロ゚)o゙」

[html title=”top.html” start-line=”53″ decode=”true”]<meta property=”og:title” content=”ぽっぽぽぽで!ずっれずれで!ぽぽづれ!Σ(゚ロ゚)o゙”/>
<meta property=”og:type” content=”article”/>
<meta property=”og:url” content=”https://popozure.info”/>[/html]

 

ぽぽろん「なんでだー?Σ(゚ロ゚)o゙」

[html title=”top.html” start-line=”33″ decode=”true”]<head prefix=”og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#”>
<meta charset=”utf-8″/>
<title>ぽっぽぽぽで!ずっれずれで!ぽぽづれ!Σ(゚ロ゚)o゙</title>[/html]

ぽぽろん「OGP情報取れなくても、title もあるのになー?Σ(゚ロ゚)o゙」

 

…Σ(゚ロ゚;o゙

 

[html title=”top.html” start-line=”33″ decode=”true”]<head prefix=”og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#”>[/html]

ぽぽろん「おや…ヘッダのようすが…Σ(゚ロ゚;o゙」

 

どうやら、「og:」というプロパティーを有効にするオマジナイのようです(?)。

[link url=”http://millkeyweb.com/facebook-ogp/”]

とりあえず、 <head> は < h e a d > の6文字しか無いと思い込んでいたので、ちょっと直します(^-^;

[php title=”pz-linkcard.php” start-line=”418″ decord=”true”]if (preg_match(‘/<\s*head\s*[^>]*>(.*)<\s*\/head\s*>/si’, $html, $m)) {
$head = $m[1];
}[/php]

はい、取れましたΣ(゚ロ゚)o゙

空欄のままキャッシュされているので、「ツール」→「Pz カード管理」から、タイトルや抜粋文が空っぽのままキャッシュされているやつにチェックを入れて削除、記事を表示させておいてください。

(別の原因でタイトルや抜粋文が取得できていない場合には、変わりません。)

ダブルクォートの悪夢、ふたたび

パラメータの取得はWordPressにまかせているのですが、URLにダブルクォートが含まれてくることがありました…!Σ(゚ロ゚)o゙

あれこれパターンを調べてみると、抜粋文をパラメータで指定しているときに、「閉じの半角角かっこ ] 」とかがあると、半端でそこで区切られるだけでなく、「閉じのダブルクォート」 が無い状態になるので、「ダブルクォート」もパラメータの一部として返してくれるようです。

(よく分からない日本語ですね(^-^;)

こうだと、

[html decode=”true”]

[/html]

こんな感じでパラメータが入ってくるのですが、

Array
(
[url] => https://popozure.info/pz-linkcard
[title] => 紹介したいプラグインがあるよ!(^-^)o
)

こうだと、

[html decode=”true”]

があるよ!(^-^)o”][/html]

こうなっちゃうんですね。

Array
(
[url] => ”https://popozure.info/pz-linkcard”
[title] => ”紹介したい[プラグイン
)

「”」から始まって、「”」はまだ来ていないですが、「 ] 」が来たところで、パラメータを区切ってしまうようです。

そういえばこれには気付いていて、Pz-HBC専用ブックマークレットでは、半角角かっこ [ ] を全角に変換しています。

 

しかも、format.php を通ってきちゃうんだか、先頭の1文字目も最後の1文字も指定した半角ダブルクォートでは無くて、全角ダブルクォート「”」なんです。

 

まあ、とりあえず、preg_replaceとかで、前後の「半角・全角」の「空白・シングルクォート・ダブルクォート」を除去してみましょう。

[php title=”pz-linkcard.php” start-line=”266″ decode=”true”]$url = preg_replace(‘/^[\s \’\”‘’“”]*(.*?)[\s \’\”‘’“”]*$/u’, ‘\1’, $url);[/php]

はい!(^-^)o

”https://popozure.info/pz-linkcard”

ぽぽろん「取れてなぁぁい!Σ(゚ロ゚)o゙」

 

なんという、がんこな…。

何者なんでしょう、このダブルクォート。

手っ取り早く見てみましょう。

[php title=”pz-linkcard.php” start-line=”267″ decode=”true”]echo mb_strcut($url, 0, 1).'<br>’;
echo mb_strcut($url, 1, 1).'<br>’;
echo mb_strcut($url, 2, 1).'<br>’;
echo mb_strcut($url, 3, 1).'<br>’;
echo mb_strcut($url, 4, 1).'<br>’;
echo mb_strcut($url, 5, 1).'<br>’;
echo mb_strcut($url, 6, 1).'<br>’;[/php]

1文字ずつ表示してみます。

&
#
8
2
2
1
;

ぽぽろん「そういうことかぁぁぁぁぁ!Σ(゚ロ゚)o゙」

 

エンティティ化文字になってたみたいです。

こういうことで、いったんエンティティ解除してから、preg_replace です。

[php title=”pz-linkcard.php” start-line=”266″ decode=”true”]$url = html_entity_decode($url);
$url = preg_replace(‘/^[\s \’\”‘’“”]*(.*?)[\s \’\”‘’“”]*$/u’, ‘\1’, $url);
$url = htmlentities($url);[/php]

どうだぁぁぁぁぁ!Σ(゚ロ゚)o゙

https://popozure.info/pz-linkcard

ぽぽろん「とれたぁぁぁぁぁぁぁ!Σ(゚ロ゚)o゙」

 

無事、取れました。

こんなダブルクォートに悩まされるとは…(^-^;

要望いただいています

Pz-HBCからお乗り換えの方から、要望をいただいています。

(文章はこちらで要約したものになっています。)

increment Log さんのところの「GetLinkCode ブックマークレット」を利用して、ショートコードも bm に変更して利用していますが、Pz-LkCに乗り換えたところ、タイトルが表示されない不具合があります。

そこで、今まで使用していた bm は「ショートコードで囲んだ文字列」を「タイトルとして使用」のまま使用して、もうひとつの blogcard は「ショートコードで囲んだ文字列」を「使用しない」で使いたいのです。

ショートコードごとに設定できるようになりませんか!

という感じ。

 

「ショートコードで囲んだ文字」をショートコード別に設定…!Σ(゚ロ゚)o゙

 

ぽぽろん「その発想は無かった!Σ(゚ロ゚)o゙」

 

自分で設定画面の下の方から、ショートコードの近くまで持ってきておいて、そんなこと考えてもいませんでした(^-^;

確かに、自前取得ができないPz-HBCではブックマークレット使用を推奨していて、Pz-LkCでは自前取得しちゃうのでURLのみ指定を推奨しているわけですが、「過去記事を置き換えないで乗り換えられる」というのは自分が言っていることでした。

 

この対応はしてみたいのですが、「どのショートコードで入ってきたか」はプラグイン本人からは分からないのです(^-^;

[2015/10/10追記](ショートコードのフックで呼ばれてきたとき、第三パラメータに呼ばれたときのショートコード文字が入っていました。これと見比べるだけでした。)

[2015/10/10削除]そこで、ショートコードごとに呼ばれる関数を用意しておいて、共通で使用するリンクカードを作成する処理を関数化(モジュール化?)しておいて、それぞれ呼べば良いのですが。

本当はちゃんと共通パーツを関数化しておくべきなのですが、出来ていないのが現状。

とりあえず、次回バージョンアップまでに出来るかな…。

[2015/10/10追記](ver1.0.0にて、ショートコード1にのみ囲い文字が有効に出来るように修正。設定は一つのままなので、「タイトルに使用」と「抜粋文に使用」は併用できません。)

[Pz-LkC][0.1.3]リンク→カードなプラグイン更新。記事取得改善、区切り線追加など

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開しています。

いつもの前置き

「まだテキストリンクつかってる?」
↓
「カード形式でリンクを表示するWordPressプラグインがあるよっ(^-^)o」

[link url=”https://popozure.info/pz-linkcard”]

そんなわけで、外部リンクをカード形式で表示するWordPressプラグインです。

インストールとか使い方は、Pz-LkCのページをご覧くださいませ(^-^)o

変更したところ

タイトル、抜粋文取得の改善

リンク先のHTMLを取得して、metaタグを取得しています。

そこから OGP情報 やらを取得しているのですが、ダブルクォートと、区切りなしには対応していたのですが、シングルクォートに対応していませんでした(^-^;

やってることは、下記の記事にこっそり追記しました。

[link url=”https://popozure.info/20151003/9288″]

content=”” とか…!Σ(゚ロ゚)o゙

まさかの…

<meta property=”og:description” content=”” />
<meta name=”description” content=”リンク→カードなプラグイン Pz-LkC 更新しました” />

「まさかのOGPの概要文だけ空欄!Σ(゚ロ゚)o゙」

 

自分も含めて、テーマとかプラグインにまかせてOGP情報は作成されている方が多いと思うので、意識されているわけでは無いと思うのですが、まさかのOGPのdescriptionが空欄でした。

OGP情報を優先していたため、この場合、表示される抜粋文は空欄でした。

とりあえず、空欄のときは、name=”description” を概要として採用することにしました。

DBには空欄でキャッシュされています。そのため、「Pz カード管理」画面から、「抜粋文」順で並べて、空欄のカードを「削除」してみると、取り直せるかも知れません。

(metaタグで概要文が無い場合、結果は変わらず空欄のままです。)

パラメータでタイトルや抜粋文を指定した場合もHTMLタグを除去

ショートコードで囲まれた文字列をタイトルや抜粋文として採用する機能がありますが、このときにはHTMLタグの除去などをしていませんでした。

このため、文字数で区切った時にタグを途中で切ってしまい、「<br>」が途中で区切れたり。

こんなこともあるんだって知りました<b

場合によっては、「<div>」とか「<script>」とか書かれてもそのまま表示していたり、「閉じ」までたどり着いていないとレイアウトが崩れたり。

カード表示の直前に、「HTMLタグの除去とか文字数の区切る処理」を追加しました。

DBキャッシュの前にも同じ処理をしているので、DBから取り出した場合は、何も起こらないのに同じ処理を通過します。

「抜け」を心配してのつくりなのですが、パラメータ指定されたときだけ除去しなおすように今後また見直します。

「カード管理」の画面のセキュリティを強化

「強化」というか、wp_nonce_field と check_admin_referer をコメントアウトしたままだったので、戻しました。

プラグインが扱えるログインユーザーが、自分のサイトのPzカード管理のキャッシュを削除するようなURLを踏まされたときに、何個かのキャッシュを削除できる可能性があった、という感じでしょうか。

 

ところで、カード管理画面、リンク先URLにリンクが設定されていなくて不便ですよね。

リンク設定そのものは簡単なのですが、リファラに色々載っちゃいそうなので、当面のあいだ、コピペでお願いします。

定型書式「Pzカード標準書式」を変更しました

青→白のグラデーションという感じで、カード上側が濃い青、下側が白でした。

これに合わせて、サイト情報の文字色は「白」だったのですが、「サイト情報」を「下側」に設定したときに、まったく見えなくなることに気付きました。

下側にしたとき、文字色が黒になります。(あ、設定値を採用するようにすれば良かった…次回こっそり直します)

設定画面の「サイト情報」項目を少し上の方に移動

デフォルト(標準設定)が「上側」なので、項目位置も「上側」に変更しました。

「区切り線」を追加

「記事内容(タイトルと抜粋文)」と、「サイト情報」の間に区切り線を入れられるようにしました。

pz-lkc-separator

特に「サイト情報」を下側にしている場合、抜粋文なんだかサイト名なんだか分かりづらい場合がありました。

「サイト情報」を「上側」に設定しているときに「区切り線」を表示させると、ちょっと位置が変ですが仕様です。

(「CSSが苦手」とも言う。)

抜粋文?概要文?

ところで自分でも気になっているのですが、Pz-LkCのことを書いていると、「抜粋文」と言ってみたり、「概要文」とか言ってみたり、単語に揺れがあります(^-^;

 

サイト側で指定されているのは「description」。「概説」とか「概要」という意味でしょうか。

WordPressでの記事は「content」、「内容」ですね。

それを抜粋して取得してきたものが「excerpt」。「抜粋」とか「引用」という意味です。

 

「description(概要)」として、記事を先頭から「excerpt(抜粋)」した文字列を指定することが多いと思います。

なので、持ってくる前の文字列を「概要文」、文字数とかで切り取って、キャッシュしたり表示したりするときの文字列を「抜粋文」と言っていたりします。

自分でもどっちだか分かんなくなってきて、まざってたりします。

んー、どっちかに統一しちゃいたいなぁ。

公式プラグインディレクトリに登録してみた(ふたたび)(つづき)

前回の続き。

2つめのWordPressプラグインを登録してみたわけですが、今回はReadmeも説明文も「全部日本語」で登録してみました。

すんなり通って、ほっとしたのもつかの間…。

なんか変だよ?

ショートコードを記述するとカード形式でリンクが表示される「Pz-LinkCard」を公式プラグインディレクトリに登録してみました。

完成度は…ちょっと…管理画面とか不満もあるのですが、もんもんとしててても捗らないので、とりあえず上げちゃうことにしました。

 

[link url=”https://popozure.info/20151006/9345″]

さて、SVNチェックアウトして、コミットして、という感じで、ファイルをアップロードします。

 

ぽぽろん「さて、さっそく検索してみよう(^-^)o」

pz-lkc-and-pz-hbc

ぽぽろん「わーい、でたー!(^-^)o」

 

2回目だから、ラクショーです。

 

…Σ(゚ロ゚)o゙

 

って…、

 

who-are-you

「きみ、だれ!?Σ(゚ロ゚)o゙」

 

「Pz-LinkCard」をアップロードしたら「Pz-HatenaBlogCard」が2つになってました。

 

ぽぽろん「似てるプラグインだから、まざっちゃったとか?Σ(゚ロ゚;o゙」

 

ぽぽろん「…いやいやちがうだろΣ(゚ロ゚)o゙」

 

と、あせりまくりましたが、「Readme.txt」の一行目が、「Pz-HatenaBlogCard」からコピーしてきて、そのまんまでした。

そういえば、Readme.txt バリデータにかけたときのスクリーンショット見ても、

readme-ok

しっかり「Pz-HatenaBlogCard」って表示されていました(^-^;

 

バージョン表記とか、インストールしたあとにWordPress管理画面のプラグイン一覧では、メインの .php ファイルから持ってきているので、そちらにばかり意識が行っていました。

 

あまりに焦りすぎて、Pz-HatenaBlogCard の readme.txt の方を Pz-LinkCard に書き換えちゃったり…焦りました(^-^;

というわけで、無事公開

そんなこんなで、外部リンクを「はてなブログカード」を使って表示する「Pz-HatenaBlogCard」(Pz-HBC)に続いて、リンクを簡単に綺麗なカード形式で表示する「Pz-LinkCard」(Pz-LkC)が無事公開されました。

どちらのプラグインも、ショートコードとURLを記述することで、ブログカード形式で表示されるものなので、見た目はよく似ていますが、やってることは全然違います。

Pz-HBCは、比較的単純な仕組みなので安定さがウリですが、「はてなブログカード」というサービスに乗っかっているだけなので、自由度がやや低めです。

Pz-LkCは、カードの外観が自分流にカスタマイズできるのが最大のウリです。そして、リンク先のタイトルや抜粋文、ソーシャルカウントをDBへキャッシュするので、2回目以降の表示が軽いです。

当サイトではPz-LkCで安定稼働中。

管理画面のつくりがちょっと甘いのが気になるところです(^-^;

つまり、こういうこと

プラグイン検索の画面で表示されるプラグイン名→「readme.txt の一行目に書かれている名前」

バージョン→「メインの phpファイルの Version: に書かれている値」

インストール後、一覧に表示されるプラグイン名→「メインの phpファイルの Plugin Name: に書かれている文字」

ということのようです。

公式ディレクトリに公開しようとしたら「あれれ?」となった方がいたときのお役に立てれば幸いです。

[amzn-link asin=”B00M939Y0I”][amzn-link asin=”4800711304″][amzn-link asin=”B0714HYR2P”][amzn-link asin=”B01C6KHDFG”][amzn-link asin=”B01C6KHRHA”]

公式プラグインディレクトリに登録してみた(ふたたび)

前回は初めてだったため苦労したWordPress公式プラグインディレクトリへの登録。

今回は「はじかれてもいいやー」くらいの感じでやってみました。

はじめて登録のとき

知的好奇心として「公式プラグインディレクトリへ登録する」というのはやってみたかったのです。

特にきっかけとなったのは、「WordPressではてブカードを使う Pz-HatenaBlogCard」(以下、Pz-HBC)を公開していたことです。

サイトで公開した場合には、ダウンロードしてもらって、アップロードしてプラグインを有効にしてもらう、という手順を踏んで貰わらないといけないわけですが、慣れない方にとってはストレスでもあるかなと思ったわけです。

公式プラグインディレクトリに登録すれば、修正したときに「更新」に出てくるし、とくに致命的なエラーを出しちゃったときに、「みんな更新してくれるかな(T-T)o」とかいうヤキモキも無くなります。

(WordPress管理の「更新」に出てくるところまでできれば、あとは利用者側がどうするか、なので。)

 

そんなこんなで、「チャレンジ」してみたところ、いくつか「指摘」があり戻されました。

[link url=”https://popozure.info/20150819/8247″]

「必要な修正」を行ってリトライしたら、OKの返事が。

[link url=”https://popozure.info/20150819/8270″]

OK出たので、アップロードしてみたけど、検索で出てこない→Readmeが原因だった!

[link url=”https://popozure.info/20150822/8354″]

という流れで無事、公開できました。

さて、今回は

今回は、外部リンクも内部リンクも、自前でキャッシュして「リンクをカード形式で表示する Pz-LinkCard」(以下、Pz-LkC)を公開してみようと思います。

プログラムやら、言語ファイルやら、Readme.txt やらをZIPファイルにして、自サイトのどこからにアップロードしておきます。

 

と、前回は、審査は通ったものの、Readmeの不備で表示されなかったりしたため、ちゃんとReadmeバリデータにかけておきます。

Pz-HBC のときには「Stable tag:」で引っかかったのですが、ちゃんと「trunk」を指定してあるので大丈夫。

readme-ok

「Notes:」=注意 が出ています。

「『Upgrade notice』と『Screenshots』の項目があるのに空っぽだよ」という感じだと思います。

あとは「寄付リンクが無いよ」っていう感じだと思います。

とりあえず、致命的な警告では無さそうなので、スルーしてみます。(空っぽならば、見出し行も消した方がいいのだと思います。多分。)

 

そして、WordPress.org のプラグイン開発者向けページから、プラグインを追加します。

[link url=”https://wordpress.org/plugins/add/”]

実は、Readme.txt、説明にかかる部分は今回、「すべて日本語で書いてみました」!Σ(゚ロ゚)o゙

add-plugins

というわけで、審査登録画面の概要文も日本語オンリーで行ってみます。

 

前回、「画像オフロードは原則禁止。ちゃんとしたサービスならいいけど。それと、ユーザーが分かるように記述すること。」というような警告があったため、「DBにテーブルを作成すること」「WebAPIを少なくとも1つは使い」「もう1つ設定されているWebAPIは選択式」といった内容も盛り込みました。

でも、全部日本語。

Plugin Name (required)
Pz-LinkCard
Plugin Description (required)
このプラグインはショートコードでURLを指定することで装飾されたカードの形式でリンクを表示させるものです。

もうテキストだけのリンクを使用する必要はありません。
このプラグインは表示の高速化のために、データベースのテーブルを1つ新しく作成して、そこにリンク先のテキストを取得してデータベースへ格納します。

このため2回目以降の表示はとてもスピーディーです。
なお、ソーシャルカウントを取得するためにツイッター、フェイスブック、はてなブログブックマークといったシェア数を返却するAPIを利用しています。

また、サイトアイコン(ファビコン)を取得するために、「Hatena::Favicon」といった外部のサイトアイコン取得WebAPIを利用します。外部のサービスを利用するのが気になる方はオフにすることができます。

サムネイル画像の取得は通常オフになっていますが、こちらも「HeartRails Capture」といった外部のキャプチャ取得WebAPIを利用することができます。こちらも外部のサービスを利用するのが気になる方はオフのまま利用することができます。

Plugin URL (required; must be a link to a ZIP file of the working plugin that includes a completed readme.txt)
http://*******.*******.**/********/pz-linkcard.zip

そもそも「『送信』ボタンを押してもエラーになるんじゃないかなぁ!Σ(゚ロ゚)o゙」と思っていたものの、登録はされ、審査される状態になったようです。

pending-request

Please note: Your plugin request(s) below are currently pending review. You will get an email from us when we approve/reject a plugin, or if we have any questions. Please whitelist the plugins AT wordpress.org email address to ensure you receive our communications. Do NOT email us asking for status updates as that only serves to distract us from reviewing plugins. Sorry, we are unable to provide an estimate as to how long it may take to review a given plugin.
Currently there are 104 plugins in the review queue, 61 of which are awaiting their initial review. We appreciate your patience.
注意:現在、あなたの審査は保留されている。こちらからの拒否や質問があったらメールで連絡をする。ちゃんとwordpress.orgからのメールは受け取れるようにしておいてほしい。現在、104個のプラグインが審査予定だ。忍耐して待ってくれてありがとう。

Pz-HBC を登録したときもこんなメッセージだったと思います。

このあと、「機械審査→変なのは人間審査→ダメだったらメールで個別対応」ということになると思います。

 

全部日本語の場合、日本語が分かるスタッフさんが対応するのか、「ちゃんと英語で書いてよマイディア! >:-(」って返ってくるのでしょうか。

 

そもそも「英語で書かないと絶対いけないハズ!Σ(゚ロ゚)o゙」と思い込んでいたのですが、ほとんど Google翻訳 したような英語です。

つまりは、

このカードはあなただろう、きっと快適に。素敵なプラグインを私たちはそれを使うだけ短い符号。
それはブログカードのそれはWebAPIを利用、向こうから取得するとき。

みたいなのを送っているのじゃなかろうか…!Σ(゚ロ゚)o゙

っていうか、日本語でこんなの送られてきたら、怪しすぎて…!Σ(゚ロ゚)o゙

 

そんなこんなで、「テキトーな翻訳英語」vs「もしかしたら担当が英語にGoogle翻訳するかも知れないから、なるべく一行に一つのことを書いた日本語」と、どっちが良いかと考えて、後者を取ってみました。

登録の画面にも「英語じゃないとダメ!」みたいな表記も見つからなかったので…多分。

すぐにプラグインディレクトリの場所はキープされるらしい

審査中ではありますが、プラグインディレクトリに場所は作成されているようで、「This plugin is requested and not visible to the public yet. Please be patient as your plugin gets reviewed.」と表示されます。

「このプラグインはリクエスト中、そしてまだ公開されていないよ。あなたのプラグインを審査しているのでしばらく待っててほしい。」ということのようです。

there-directory

同じ名前を付けられないので、接頭辞に「wp」(WordPress)とか、「ez」(easy)とか、そういうのを付けている場合、いい名前を付けるのが難しそうです。

ちなみに「Popozure(ぽぽづれ)」から取った「Pz-」を接頭辞に持つプラグインは前回登録時点でありませんでした。

ひたすら待つしか

実は Pz-HBC のときは次の日に返事(というか指摘)が来たのですが、今回は 9月29日 に登録して、10月1日の夜でまだ承認も指摘も来ません。

104個だった審査予定は113個に、61個だったレビュー待ちは81個になり、自分のプラグインが「順調に順番待ち」なのか「DBとか使ってるから審査に時間がかかっている」のか「日本語だから後回し」にされているのか分かりません。

 

やっぱり Google翻訳でオール英語にしておいた方が良かったのだろうか…。

 

ヤキモキしている内に、プラグインの登録~公開までが分かり易くまとまっているサイトを発見。

WordPressではSVNというシステムを採用しています。このページでは初めてSVNを使う方でもわかるように解説します。
[link url=”http://oxynotes.com/?p=9436″]

最近の記事だけあって、情報も新しく、シリーズ構成になっているので「これからプラグインを公式ディレクトリにあげてみたいな!」というときに良さそうです。

そして、承認のメールが…来た!

来ましたメール。承認メールです。

審査登録から約56時間でストレート通過でした。

 

承認メールはテンプレ(定型文)なので、「Readmeと申請文が全部日本語」っていうのが良かったのか悪かったのか全然分かりませんが、一応通りました。

とりあえず、今回の実験結果(?)。

「ReadMe と 審査登録の文書は、全部日本語でもオッケー!Σ(゚ロ゚)o゙」

ということでした。

プラグイン名は半角英字とハイフンのみしか使えなかったり、Readmeの中の見出しは決まった英語じゃないといけないのですが、説明文とかは日本語でも通るっぽいです。

「英語のみ」っていうのは敷居が高いので、大丈夫っていうのは大きい気がします。

 

そして、Pz-LkCのフォルダをチェックアウト。

あとはプラグイン一覧から検索すれば表示され…

 

───このときのぼくは、あんなことがおきるとは、おもってもいなかったんだ───

つづく。

[link url=”https://popozure.info/20151006/9350″]

[amzn-link asin=”B00M939Y0I”][amzn-link asin=”4800711304″][amzn-link asin=”B0714HYR2P”][amzn-link asin=”B01N33HG6H”][amzn-link asin=”B01C6KHRHA”]

[Pz-LkC][0.1.1]リンクをカード形式で表示するWordPressプラグインを公開しました

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開しました。

インストール方法・使い方

インストール方法や使用方法を書いた、「Pz-LinkCard」のページを用意しました。

[link url=”https://popozure.info/pz-linkcard”]

Pz-HBCからお乗り換えの方へ

外部リンクをはてなブログカードで表示するプラグイン「Pz-HatenaBlogCard」(Pz-HBC)を使用していた方は、ほとんど使い方も変わらず乗り換えられると思います。

ただし、Pz-HBCから設定は引き継げませんので、同じ外見にしたい場合は設定などを行う必要があります。

いくつかポイントを。

  • 外部リンクのサムネイル画像が表示されない
    • 標準では外部リンクのサムネイル取得は「なし」に設定されています。
    • 外部リンクのサムネイル画像を表示したい場合、こちらをご覧ください。
      [link url=”https://popozure.info/20151004/9317″]
  • 「背景色」とかが反映されない
    • 「定型書式」という設定で「Pz リンクカード 標準書式」というのが設定されています。
    • これによって、背景画像(グラデーション)や、一部の文字色が固定されます。
    • 背景色や背景画像を設定したい場合には、「定型書式」を「なし」に変更してください。
  • 大文字の「BLOGCARD」でカードが表示されない
    • 標準では「blogcard」のみ指定された状態となりました。
    • 大文字でも機能させたい場合には、「ショートコード 2」に「BLOGCARD」を設定してください。
  • ページの表示が遅い気がする
    • 初めてリンクカードを表示するURLの場合、タイトル、概要文、ソーシャルカウントを取得するため、表示までに時間がかかります。
    • 2回目以降の表示は自サイトのキャッシュから表示するのでPz-HBCと比べると高速に表示されます。
    • 参考までに、のべ38個のリンクカード(外部リンク8個、内部リンク11個)を記述した記事の表示時間が、1回目が約27秒、2回目が約1秒でした。(1回目、誰かが表示すれば、2回目以降は別の人やPCで表示してもこの速度ということになります。)
  • データベースにデータが保存される
    • プラグインを有効化するときに、Pz-LkC用のデータベース テーブルを作成します。
    • リンク先のURLやタイトル、概要文、ソーシャルカウントを取得した後、自サイトのデータベースへ保存します。
    • このデータは「Pz カード管理」画面で削除することができます。削除したあと、そのURLのカードが表示された場合、再取得されます。
    • 記事ごとに保存されるわけでは無く、リンク先URLごとに保存されます。
    • プラグインを停止→削除として、アンインストールするときに、Pz-LkC用のデータベース テーブルは削除されます。
  • リファラ(リンク元)が自サイトになる
    • 「はてなブログカード」はiframeで表示するため、リファラ(リンク元)がhatena(「hatenablog-parts.com」かな?)になります。
    • 当プラグインは自前でリンクを展開するので、ちゃんと自サイトがリンク元になります。(実は自分でメリットがよく分かっていないのですが、リンク先サイトにリンクしてるよアピールできる、ということ?(^-^;)
    • なお、URLはショートコード中に書くだけで、表示時にリンクに展開されるので、WordPressのピンバックは飛びません。ピンバックを飛ばしたい方は、今までどおりテキストリンクをしつつも、リンクカードを併用すると良いかも知れません。
      リンクを!カンタン!キレイ!リンクカード!
      詳細は下記リンクからどうぞ。
      [blocard url=”https://popozure.info/pz-linkcard”]

「はてなブログカード」のように、アクセス時に最新の状態を表示させるのでは無くて、投稿時点(実際には初回表示時点)での内容が表示されるのが、大きな違いだと思います。

当サイトでしばらく運用してからのリリースなので、大きな問題は無いと考えていますが、Pz-HBC は念のため、は停止だけして削除しないで様子を見ていただくと良いと思います。

Pz-HBCからPz-LkCを作り直しているので、色々なところが似ていますが、色々なところで「クセ」が違うので、自分の合う方を使っていただくと良いと思います。

(もちろん、当サイト作成のPzシリーズ以外のプラグインを使う、という選択肢もあります。)

再取得しないことの考え方

リンク先のタイトルと概要文は再取得しません。

これは、「記事中に紹介したいリンク先のタイトルや概要文を記述して、リンク設定する」という手順を置き換えるのを主眼としているためです。

 

相手記事のタイトルなどが誤字などで訂正された場合にも反映されません。(メリットかデメリットかは別として。)

このため、リンク先が閉鎖や移転した場合にも、記事投稿当時のタイトルや概要文が残り続けます。

「(サイト閉鎖時や記事削除時、)リンク切れに気付きづらい」、「(サイト閉鎖・移転後、そのドメインに別サイトが入った場合など、)リンクを開いたら書いてある内容と違うサイトに繋がった」といったデメリットが考えられます。

 

「リンクが切れていても、当時の情報としてタイトルと概要文までは確認できる(移転先が検索で探しやすい)」とか、「意図しないテキストに差し替えられていて、そのテキストが自分の記事のリンクカード内に表示されていた、という状態を防げる」というメリットにも取れます。

 

最初は、一定期間ごとに再取得するつもりで設計していたのですが、自動では再取得せず、「リンク先の訂正などに気付いて再取得したい」場合には、そのURLのキャッシュを削除することで再取得できるようにしました。

「指定した期間ごとに再取得するが、再取得しない設定もできる」というのが広い要望に対応できそうではありますが、最短で何秒以上に設定するようにするか、といった課題も出てきます。

毎回再取得するような設定では、相手サイトへの負担にもなり、また、このプラグインの「キャッシュする」というメリットが消えてしまいます。

キャッシュ管理画面

当プラグインを有効にすると、「ツール」に「Pz カード管理」という項目が追加されます。

tools-manage

お恥ずかしながら完成度の低い画面となります(^-^;

pz-lkc-cacheman

表示の絞り込み

「すべて」を押すと、キャッシュされているすべてのリンクが表示されます。

「内部リンク」を押すと、キャッシュされている内の、内部リンクのみを表示します。

「外部リンク」を押すと、キャッシュされている内の、外部リンクのみを表示します。

なお、ページング(ページャー)機能はありません。

そして、テキストによる検索はありません。

なぜなら、技術力が無いからですΣ(゚ロ゚)o゙

チェックを付けて一括処理

「選択してください」と書かれているメニューを「削除」として「適用」ボタンを押すと、チェックを入れたリンクのキャッシュが削除されます。

select-delete-submit

削除されることによって、次回表示されるときに再取得されます。

 

「選択してください」と書かれているメニューから「ソーシャルカウントを再取得」として「適用」ボタンを押すと、チェックを入れたリンクのソーシャルカウントを「再取得する」状態にして、次回表示するときに再取得します。(この機能は削除するかも知れません。)

見出しクリックで並び替え

見出しをクリックすると、その項目順に並び直します。

ただし、何度押し直しても昇順/降順の切り替えは出来ません。

ソーシャルカウント

「Tw」「f」「B!」という見出しが、取得できているソーシャルカウントで、「ツイッター」「フェイスブック」「はてなブックマーク」の数です。

「いつ取得したか」「次、いつ取得しなおすか」は一覧からは分かりません。

記事IDは、「最初に表示された記事」

記事IDには、そのURLのリンクカードが「最初に表示された記事のID」が入ります。

100番と150番の記事に、同じURLのリンクカードがあった場合、最初に表示された方の記事IDが格納されます。

その記事が削除されたとしても、他の掲載記事のIDには入れ替わりません。

記事IDの数字をクリックすると、その記事が開きます。

結果コードにはHTTPの結果コード

内部リンクの場合には通常「0」が入ります。

外部リンクの場合にはHTTPの結果コードが入ります。「200」であれば、正常に取得できたことになります。

URLが不正だったり、SSLなどの関係で、wp_remote_get()で取得できなかった場合は「999」が入ります。

ひっそり更新

Pz-HBCに「内部リンクをクリックしたときでも新しいウィンドウで開く」という機能を付けました。(Pz-HBC ver1.2.6)

ついでに、Pz-LkCにも「外部リンクをクリックしたときに{新しいウィンドウ|同じウィンドウ}で開く」「内部リンクをクリックしたときに{新しいウィンドウ|同じウィンドウ}で開く」機能を追加しました。(Pz-LkC ver0.1.2)

その他

公式ディレクトリでの公開と同時に当記事を公開したかったのですが、4時間遅れの投稿となってしまいました(^-^;

使用感や気付いたことなど、コメントやツイッター(@popozure)でお知らせいただけると助かります。

[Pz-LkC]Pz-LinkCardで外部リンクのサムネイル画像を表示する方法

リンクをカード形式で表示するWordPressプラグイン「Pz-LinkCard」を公式プラグインディレクトリにて公開しました。

外部リンクのサムネイル画像

外部リンクのサムネイル画像について、インストール・有効化した直後は表示されない設定になっています。

画像ファイルのキャッシュをセキュアに行うのは難しいと判断したため、当プラグインでは画像の取得・キャッシュを行いません。

その代わり、公開されているWebAPIを利用する機能があります。

とにかく設定してみる

まずは、「サムネイル画像の取得API」という項目を設定する必要があります。

WordPress管理画面から、「設定」→「Pz カード設定」と選んでいきます。

「リンクカード設定」という画面になるので、「画像取得APIの指定」のところにある「サムネイル画像の取得API」という項目を探してください。

thumbnail-api

ここに、画像取得APIを使用するURLを記述します。

 

画像取得APIについては、使用するサイトさんが利用者という形になりますので、利用規約などが明らかになっているものについては目を通していただくと良いと思います。

WordPress.comのmshots APIを利用する

キャプチャ画像を取得するWordPressプラグインとして「Browser-Shots(旧・BM-Shots)」が有名かと思いますが、そちらでも使っているAPIを利用する記述です。

thumbnail-mshots

http://s.wordpress.com/mshots/v1/%URL%?w=100

このAPIに利用に関しては、下記リンクが参考になるかと思います。(英語)

[link url=”http://www.binarymoon.co.uk/2010/02/automated-take-screenshots-website-free/”]

HeartRails社の画像APIを利用する

HeartRails社の「HeartRails Capture」という無料のウェブサービスがあります。

[link url=”http://capture.heartrails.com/”]

このHeartRails Captureを利用する記述です。

thumbnail-heartrails-capture

http://capture.heartrails.com/100×100?%URL%

「商用・非商用問わず無料でご利用いただけます」となっていますが、「大規模サイト(月間100万PV以上)」で利用する場合は要相談となっていますので、ヘルプと利用規約、免責事項に目を通してから使用していただけると良いかと思います。

その他の画像APIを利用する

「%URL%」と書いたところをリンク先のURLで置き換えます。

画像URLとして使用できるものなら指定できますが、キャッシュする仕組みなどは無いため、リンク先サイトのURLを直接指定するような使い方は避けてください。

その他

今後も当プラグイン単独で画像を取得するような仕組みは実装しない予定です。

何か良い仕組みがあれば連携できるようにはしていきたいと思います。

phpでmetaタグとかOGP情報とかパースしたりしてみた

近日公開予定のリンクをブログカード形式で表示する「Pz-LinkCard」。

外部サイトのタイトルや概要文(抜粋文)をリンク先から取得するのですが…。

この記事は自分用のメモなので、かなりワケ分かんないと思います(^-^;

一個ずつpreg_matchしていた

リンク先のHTMLを取得したあと、OGPの情報を取得しています。

本当は「OpenGraph.php」とかを使うとラクなんだと思うのですが、「OGP無かったらTITLEタグからタイトル取得したり、最初のPタグから抜粋文取りたい」とか思ったのと、仕様変更とかあったら対応しないといけないので、なるべく自前でやりたいと思いました。

[link url=”http://www.kaasan.info/archives/1982″]

もちろん、脆弱性とか見つかったときに自前じゃなかったら勝手に対策してもらえるメリットとかもあるのですけど。

 

というか、正規表現とかまだ慣れていないので、マッチしたときに「楽しい!Σ(゚ロ゚)o゙」というのが、一番正直なところだったりします。

 

さて、今までは、「og:title」とか「og:description」とか、一個ずつ preg_match() で取得していました。

[php title=”pz-linkcard.php” start-line=”382″ decode=”true”]// OGPパース(タイトル)
if (preg_match(‘/.*<meta\s+(.*property\s*=\s*”og:title”\s*.*?)>/si’, $html, $m)) {
$param = $m[1];
if (preg_match(‘/.*content\s*=\s*”(.*?)”.*/si’, $param, $m)) {
$title = $m[1];
}
} else {
// OGPが無いときは、titleタグから取得
if (preg_match(‘/.*<title\s*.*>\s*(.*)\s*<\/title>.*/si’, $html, $m)) {
$title = $m[1];
}
}

// OGPの概要文
if (preg_match(‘/.*<meta\s+(.*property\s*=\s*”og:description”\s*.*?)>/si’, $html, $m)) {
$param = $m[1];
if (preg_match(‘/.*content\s*=\s*”(.*?)”.*/si’, $param, $m)) {
$excerpt = $m[1];
}
} elseif (preg_match(‘/.*<meta\s+(.*name\s*=\s*”*description”*\s*.*?)>/si’, $html, $m)) {
$param = $m[1];
if (preg_match(‘/.*content\s*=\s*”(.*?)”/i’, $param, $m)) {
$excerpt = $m[1];
}
} else {
// OGPが無いときは、最初の p要素を最初の段落として
if (preg_match(‘/<p>\s*(.*)<\/p>/si’, $html, $m)) {
$excerpt = $m[1];
}
}[/php]

一回「og:title」でマッチさせてから、「content」をマッチさせて…とやっているのは、<meta property=”og:title” content=”タイトルですよ!”> としているサイトと、<meta content=”タイトルですよ!” property=”og:title”> という感じで、contentが先に来ているサイトがあったから。

「出現順がどっちでもマッチさせる(どちらも含む)」表現だと、キーと値の順番が分かんなくなっちゃうので、og:title が含まれていたら、とりあえず metaタグの中身をドーンと持ってきて、content の値を持ってくる方法を取っていました。

 

get_meta_tags を使うと name と content の組み合わせを取得できるので description とかは取得できるのですが、OGP は property と content で指定されているので取得できないので、検索するしか無い気がします。

preg_match_all をつかってみた

まずは、取得してきた HTML からヘッダ( <head>~</head> の間)を抜き出します。

[php title=”pz-linkcard.php” start-line=”384″ decode=”true”]// HEADタグ
$head = null;
if (preg_match(‘/<head>(.*)<\/head>/si’, $html, $m)) {
$head = $m[1];
}[/php]

今度は、そこから preg_match_all() を使って、metaタグをドーンと取ってきて、name をキー、content を値にして、連想配列にしてみました。

[php title=”pz-linkcard.php” start-line=”401″ decode=”true”]// metaタグ パース
$match = null;
preg_match_all(‘/\s*meta\s*name=”?([^>”]*)”?\s*content=”?([^>”]*)”?\s*\/?>/si’, $head, $match);
if (isset($match) && is_array($match) && count($match) == 3) {
for ($i=0, $to_i=count($match[1]); $i < $to_i; $i++) {
$tags[$match[1][$i]] = esc_html($match[2][$i]);
}
}[/php]

空白が入ったり入らなかったりするところは、 \s* で「空白0個以上」。

ダブルクォートはあったり無かったりするところは、 “? で「ダブルクォート0個か1個」。

「ダブルクォート ” 」か「大なり > 」があるところまでを取りたいので、 [^>”]* で、 > と ” 以外 を 0個以上。

もうなんか、正規表現って書いてるとワケ分かんなくなってきますけど、マッチすると気持ちいいです。

慣れてる人なんかだとスラスラ読めちゃうんだと思うんですけど。

マッチしたらけっこうワケ分かんない感じで配列に入ってくるので、for でぶんまわして、うまいことキーと値を連想配列にしています。

ちなみに、「https://popozure.info/pz-hatenablogcard」から property と content の組み合わせの meta タグを取得した配列がこんな感じです。

Array
(
    [0] => Array
        (
            [0] => meta property="og:type" content="article" />
            [1] => meta property="og:title" content="WordPressで「はてなブログカード」を利用する Pz-HatenaBlogCard" />
            [2] => meta property="og:url" content="https://popozure.info/pz-hatenablogcard" />
            [3] => meta property="og:description" content="外部リンクを「はてなブログカード」に置き換えて表示させるWordPressプラグイン「Pz-HatenaBlo…" />
            [4] => meta property="article:published_time" content="2015-08-09T02:04:18+00:00" />
            [5] => meta property="article:modified_time" content="2015-09-26T18:42:27+00:00" />
            [6] => meta property="og:site_name" content="ぽぽづれ。" />
            [7] => meta property="og:image" content="http://mailbox.conohawing.com/popozure/blog/wp-content/uploads/2015/08/pz-hatenablogcard-thumbnail1.png" />
            [8] => meta property="og:image:width" content="279" />
            [9] => meta property="og:image:height" content="280" />
            [10] => meta property="og:locale" content="ja_JP" />
        )

    [1] => Array
        (
            [0] => og:type
            [1] => og:title
            [2] => og:url
            [3] => og:description
            [4] => article:published_time
            [5] => article:modified_time
            [6] => og:site_name
            [7] => og:image
            [8] => og:image:width
            [9] => og:image:height
            [10] => og:locale
        )

    [2] => Array
        (
            [0] => article
            [1] => WordPressで「はてなブログカード」を利用する Pz-HatenaBlogCard
            [2] => https://popozure.info/pz-hatenablogcard
            [3] => 外部リンクを「はてなブログカード」に置き換えて表示させるWordPressプラグイン「Pz-HatenaBlo…
            [4] => 2015-08-09T02:04:18+00:00
            [5] => 2015-09-26T18:42:27+00:00
            [6] => ぽぽづれ。
            [7] => http://mailbox.conohawing.com/popozure/blog/wp-content/uploads/2015/08/pz-hatenablogcard-thumbnail1.png
            [8] => 279
            [9] => 280
            [10] => ja_JP
        )

)

$match[1][1]が「og:title」、$match[2][1]が「WordPressで「はてなブログカード」を利用する Pz-HatenaBlogCard」となっている感じです。

count($match[1]) で、拾ってきた行数が分かるので、for でまわして、$match[1][$i] をキーに、$match[2][$i] を値にしている感じです。

 

このやり方は、PHPマニュアルサイトの get_meta_tags のノートを参考にしました。

[link url=”http://php.net/manual/ja/function.get-meta-tags.php”]

あとは取得するだけ

TITLE タグの内容とかも、一緒に連想配列に放り込んでおきました。

[php title=”pz-linkcard.php” start-line=”390″ decode=”true”]// TITLEタグ
if (preg_match(‘/<\s*title\s*.*>\s*(.*)\s*<\s*\/title\s*>/si’, $head, $m)) {
$tags[‘title’] = esc_html($m[1]);
}[/php]

あとは、取り出すだけです。

[php title=”pz-linkcard.php” start-line=”390″ decode=”true”]// タイトル
if (isset($tags[‘og:title’])) {
$title = $tags[‘og:title’];
} elseif (isset($tags[‘title’])) {
$title = $tags[‘title’];
}[/php]

大分シンプルな感じになりました。

使わないタグもいちいち配列に放り込むので処理時間はちょっと増えているかも知れませんが、2回目の表示からはDBから読み込んじゃうので問題無いと思います。

ファイル分けて、ちゃんと関数にして自分用のライブラリっぽくすると良さそうだなぁ。

引用符がダブルクォートじゃなくてシングルクォートのとき

[2015/10/06追記]

引用符がダブルクォートのときと、引用符が無いときは考えていたのですが、「シングルクォート」のときがありました(^-^;

つまり、ダブルクォートで囲まれていると、

<meta property=”og:title” content=”OGPパースを!正規表現で!”>

これでマッチさせて、

/\s*meta\s*property=”?([^>”]*)”?\s*content=”?([^>”]*)”?\s*\/?>/si

こんな結果になるのですが、

$match[0] meta property=”og:title” content=”OGPパースを!正規表現で!”>
$match[1] og:title
$match[2] OGPパースを!正規表現で!

シングルクォートで囲まれていると、

<meta property=’og:title’ content=’OGPパースを!正規表現で!’>

こんな感じで「’」が付いちゃいます。

 

$match[0] meta property=’og:title’ content=’OGPパースを!正規表現で!’>
$match[1] ‘og:title’
$match[2] ‘OGPパースを!正規表現で!’

これもマッチさせようとすると、こんな感じの正規表現になって、

/\s*meta\s*name=[\’\”]?([^>\’\”]*)[\’\”]?\s*content=[\’\”]?([^>\’\”]*)[\’\”]?\s*\/?>/si

今度はシングルクォートでもダブルクォートでも拾えるようになるけど、

<meta property=”og:title” content=”サマーフェスティバル’98”>

みたいに、「ダブルクォートで囲まれているけど、シングルクォート(というか、アポストロフィー)が入っている」というパターンの場合、途中で区切られてしまいます。

こんな感じで、シングルクォートもダブルクォートも「食う」感じにしておいて、

/\s*meta\s*property\s*=\s*([^>]*)\s+content\s*=\s*([^>]*)\s*\/?>/si

前後のクォートをトリムする!Σ(゚ロ゚)o゙

[php]$match[1][$i] = trim($match[1][$i], ‘\’\”‘ );
$match[2][$i] = trim($match[2][$i], ‘\’\”‘ );[/php]

trim関数は、先頭の1文字目と最後の1文字目の空白やタブを取り除く関数ですが、第二パラメータに取り除きたい文字を書いておくと、先頭の1文字目と最後の1文字目から外してくれるようです。

これで対応できるパターンが増えた気がします(^-^;

 

では(^-^)o