日記/2017-02-15 の変更点

お名前:


#pageinfo

**Pukiwiki:トラックバックの検討、その2。 [#rb648d0c]


つーわけで、少しずつやってます。

とりあえず、
一度作ったきり放置状態の「はてなblog」を対抗機にして、
まずは『依頼する』側からやってます。~
これができれば、『変なリクエストに対するレスポンス』の実動作も見られるので。
#region(→続きを読む。)





***方針としては? [#bf51cdfb]
「送信ボタン」を押したらトラックバック送信する、プラグイン。~
書式は以下のような感じ。

 &tbsend(URL,text,flg);

pukiwiki プラグイン的には 〜inline()とか 〜convert() とかの動きでいうと。~
URLが、接続先の記事URL。~
text が表示用テキスト。これは省略可能で、その場合 URL文字列が指定されているとみなして動く。~
flg はプラグインが勝手につけるもので、ユーザは意識しなくて良い。

上記のように書くと、wiki記事ページ上には以下の2要素が表示される。
-「text」というホットスポット。クリックすれば URL のページが開く。
--pukiwikiの下記記載と同じように見えるはず。
 [[text>URL]]
-「Send Trackback」というボタン。押すとトラックバック送信する。
一度ボタンを押してトラックバック送信すると、プラグイン自身が自分の flgパラメータを「送信済み」状態に変更、ページをリロードする。~
「送信済み」であれば、上記「textのホットスポット」は表示されるが、「Sendボタン」は表示されなくなる。~
結果、普通に触っている限りにおいては、1つの&tbsend からは1回しかトラックバック送信しない。

トラックバックスパムの対策として、管理者認証が必要に思う。~
自由編集できる wiki で「攻撃者が &tbsendを書いてping送信」できてしまうと、攻撃用に悪用されてしまうため。~
管理者認証ができるかは要調査。

具体的な設計としては、既存の voteプラグインあたりを参考にしてます。~
1つのページに複数置かれるとか、ボタンを押すと元画面を書き換えるとか、そういう振る舞いが近い。
***ボタンを押したあとの動き詳細。 [#c0ada35d]
「送る」ボタンを押したあとの処理。~
pukiwiki プラグイン的には 〜action() の処理。

こんなアルゴで実装中。

+プラグインで指定された「リンク対象のURL」を取得。~
+上記URL先に接続、対象記事 Get。
--もし当該記事がなければ、エラー。
+取得した記事内を解析し、rdf領域内にある「trackback:ping=xxxx」で指定されるURLを取り出す。
--もしなければ、トラックバック未対応と判断して送らない。
+trackback URL にtrackback ping送信。
+ping 結果のレスポンス解析、OKかどうかチェック。
--Okなら、前述の通り、プラグイン部分に「送信済み」フラグを反映する。
--エラー動作は未定。

***というわけで、現時点での進捗。 [#y3cf3248]
実は、基本的なメカニズム部分は作成・テスト済みで、以下のようなことはできています。
-最初の表示(URLリンクとボタン表示)処理。
-ボタンを押したあと、フラグを書き換えて「ボタン表示しない」状態になる仕組み。
--ただ voteプラグインベースで作ったので inline ではなくブロックプラグインになっている。~
「どの位置のプラグインか」の特定処理は attachref()を参考に見直したほうがよい。
-送信処理の基本メカニズム。
--実際に「はてなブログ」へのトラックバック送信には成功してます:~
そちらの記事で「トラックバック受領、承認待ち」の状態になったことを確認できた。
--具体的な実装としては:rdfの(簡易)解析→URL取得実施と、上記URLへの送信。~



以下、いくつかは前述とかぶりますが、今後のToDo。
-プラグイン自体の inline()化。
--これができないと、1行に複数のURLを書けない。
-「送信」を管理者のみ実施可能にする。
--これがないと、トラックバックスパムへの悪用ができてしまう。
--別の言い方をすると、このプラグインを置く場合には、少なくとも「特定の管理者」の定義を必須にするつもり。
-ページをincludeされた状態でのトラックバック送信への対処仕様の検討・決定
--例えば友瀬の日記ページのように『複数の日記をまとめて表示』するような画面がある。~
ここにおいてトラックバック送信がどう動くべきか。
--本質的には「元ページのURL」で送信するのが筋。~
だがたぶん「まとめたページのURL」で送ってしまうと思う。~
---正直ここについては、管理者の人的責務でやるしかないと思っている。~
-相手サーバの trackbackping URLの解析方法の追加改善
--仕様上は 
 『<.... trackback:ping="http://---"; ....>』
となっているが。~
「はてな」では
 『< .... trackback:ping="http://---" ....>』
となっていて、多少緩い。~
検索正規表現だけの話なので、やればいいだけではあるかも。
-トラックバックping 仕様自体の隙間に関わる部分への対応決定
--明確な定義がないので、「自分ルール」でもできちゃうけど・・・という部分。~
実際、2/15時点でのテスト版では、自分のブログ対象なのをいいことに、わりといい加減な内容で送っている。
--「記事概要」の文字コードについて。統一された仕様がないっぽい。
---例えば EUC で送っていいのか。UTF-8 MUSTなのか。~
現状友瀬の wiki がEUCなので、ちょっと悩む。~
RSSなど UTF-8で作るのが前提なので、それにあわせるのが筋っぽくはある。
--「記事概要」の内容。
---本文を250文字くらいでぶった切るのがデファクトっぽいけど、それもどうよ。
-トラックバックURLを利用者が直接指定する方式は必要か。
--「はてな」ではそんな感じの機能があった。
--パラメータを指定すれば実現は簡単なので、決めるだけではある。
-「Blog Name」の内容。
--pukiwiki開発室談義のメモでは「システム名でいいんじゃね」的なことがあるが、ほんとにそれでいい?~
素直に「呼び出すブログの名前」じゃないのか。~
もしシステム名でよいとしても、「3rdベンダー製」であるプラグインが「pukiwiki」を名乗るのはまた問題。
-各種通信エラーの扱い
--捨てちゃってもいいんだけど、残す意味があるかな。~
意味があるなら、例えば元ページのソース内にコメント形式で残す、という手は使えないこともない。
--「トラックバック未サポートでした」は残す意味があるかもしれない。
---前述の「トラックバックpingURLを直指定」の機能との兼ね合い。~
少なくとも「はてな」は(理由不明だが)rdfの自己解析をしていない節がある。~
rdf 記載なしand/or rdf解析でトラックバックpingが読み取れないようなときに、という可能性は・・・あるのかなぁ。



----
ご意見などがあれば。
#comment2(below)

#endregion
お名前: