ページ

2004年1月28日水曜日

USERS GROUP 日記さん

.Text を使った blog サイトの紹介
USERS GROUP 日記


.Text を Multiple で使っていて複数の方の blog が集約されています。それぞれの方の blog へは左側にある "BLOGGERS" のところからいけます。


以下はトラックバックのテストです(^^
http://blogs.users.gr.jp/haramizu/archive/2004/01/28/966.aspx

2004年1月27日火曜日

各個別記事の下に TrackBack URL を表示するようにしてみました

一色さんの #BLOG
青柳臣一blogさん、「.TEXT」のトラックバック対応方法を公開


にてご指摘があったので、各個別記事の下に TrackBack URL を表示するようにしてみました。こんな感じでいかがでしょう?


# たぶんバグってないとは思うんですが...


ちなみに #BLOG さんの Movable Type も Auto-Discovery 用のコメントは入っています。なので、.Text からもちゃんとトラックバックできるはずです。
(この書き込みはそのテストも兼ねてたりします :-) )

すぐ下の記事にトラックバックしてみます

やっぱり言葉でうまく表現できなかったので、サンプルとしてすぐ下の記事にトラックバックしてみます。
http://www.divakk.co.jp/blog/aoyagi/archive/2004/01/27/442.aspx
こんな風にリンクをはるだけです。


で、Excerpt には


これが Excerpt に書いた内容です。どんな風に表示されるかな?

と書いて POST しました。

.Text のトラックバック

あらためて説明しなくとも、Google あたりで 「トラックバックとは」 とかのキーワードで検索するとたくさん出てきます。なので、一般論はそちらにお任せしちゃいます。
ここでは、.Text を使っている場合のトラックバックについて書きます。


.Text でトラックバックするには?


実は何もする必要がありません。記事を書くときに単に PermaLink のリンクを含めるだけで OK です。(PermaLink っていうのは、各記事への URL のことです。たとえば、この記事だと http://www.divakk.co.jp/blog/aoyagi/archive/2004/01/27/442.aspx になります)


PermaLink が含まれた記事を POST すると、自動的にトラックバックを送ります(もちろん、相手がトラックバックを受けれる blog じゃないとダメですが。詳細は後述)。


ただ、1つだけ気をつけたほうがいいことがあります。
トラックバックのときに相手先に送る情報は、



  • title … 記事のタイトルです。たとえば、この記事だったら 「.Text のトラックバック」 です。

  • excerpt … 英単語の意味は引用とか抜粋とかですが、まぁ、コメントだと思ったらいいです。

  • url … 自分の URL です。トラックバックする元、たとえば、この記事が PermaLink を含んでいるとしたら、この記事自身の URL です。

  • blog_name … そのまんま blog の名前です。ここだったら 「青柳臣一 blog」 ですね。

  • (あと "charset=utf-8" も含めようという方向になってます。が、まだ Trackback 仕様書には載ってないです)

があります。ここで、title、url、blog_name は問題ないんですが、excerpt がちょっと問題です。.Text では Excerpt が記入されていない場合は、単にタイトルを送っちゃいます(title と excerpt が同じものになります)。
じゃ、Excerpt はどこで記入するのかというと、POST のページの下のほうにある "Advanced Options" を開くと出てくる Excerpt です。なので、記事中に PermaLink へのリンクがある場合はここにコメントを書きましょう。するとこれが相手先に送られます。


トラックバックするとどうなるのか?


ここでは、トラックバックする相手も .Text だとします。
.Text では、コメントやトラックバックをひっくるめて Feedback と呼んでいます。こちらからある記事にトラックバックすると、相手の記事の Feedback のところに表示されるようになります。見た目はコメントとほとんど区別できません。ただ、Excerpt に書いた内容がコメントとして表示され、自分の記事への URL がリンクされます。(うーん、言葉で書くのが難しい(^^; )


まぁ、結局、トラックバックっていうのは 「自動コメント&自動逆リンク」 なわけです。


ところで、私はトラックバックかどうかを簡単に見分けられたほうがいいかな?と思って "(トラックバック)" と表示されるようにスキンを変更してます。


仕組みは?


ほんとうは、PermaLink の URL とトラックバック用の URL は別物です。ではなぜ PermaLink だけからトラックバックできるんでしょう?


実は各記事にはトラックバックの URL がわかるようにコメントが埋め込んであります。
HTML のソースを見ると


<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.foo.com/archive.html#foo"
dc:identifier="http://www.foo.com/archive.html#foo"
dc:title="Foo Bar"
trackback:ping="http://www.foo.com/tb.cgi/5" />
</rdf:RDF>
-->

なんて感じのが見つかります。これの trackback:ping 属性がトラックバック用の URL です。
このように HTML 中にコメントとしてトラックバックの URL を埋め込んで自動的にトラックバックできるようにすることを Auto-Discovery というようです。
http://www.movabletype.org/docs/mttrackback.html#autodiscovery of trackback ping urls


.Text は記事を POST する処理の中で、



  1. 記事中に PermaLink があるかどうか探す。

  2. あったら、そのリンク先を HTTP GET してみる。

  3. GET できたら、その HTML 中に trackback:ping があるか探す。

  4. あったら、そこへトラックバックする。

  5. 以上を記事中のすべての PermaLink について繰り返す。

といった処理を行っています。
そんなわけで PermaLink へのリンクを含めるだけで、自動的にトラックバックしてくれるわけです。


というように、.Text 自身が Auto-Discovery を使うことを前提にしているので、どこにもトラックバック用の URL が表示されてないんですよね。これは、どっかに表示するようにしようと思います。


ところで、「おいおい 2~4 って HTTP のやり取りだろ。重いんじゃないの?」 とお思いの方もいるかとは思いますが、.Text ではこの部分はちゃんと ThreadPool を使って別スレッドで行うようになっています。

2004年1月26日月曜日

.Text の修正(トラックバック関連)

.Text はトラックバックに対応してるんですが、日本語を使ってるとうまく動きません。
文字化けするとかいう次元じゃなく、トラックバックを送る途中で例外が出て失敗しちゃいます。





Dottext.Framework\Tracking\Notification.cs 81行目付近
    if(entry.HasDescription)
    {
        notify.Description = entry.Description;
    }
    else
    {
        //entry.Description = entry.Title;    
        notify.Description = entry.Title;    
    }
上記のように entry.Description = entry.Title; というのは明らかにおかしいので notify.Description = entry.Title; に修正。





Dottext.Framework\Tracking\TrackBackNotificationProxy.cs 81行目付近
    //string parameters = "title=" + HtmlEncode(title) + "&url=" + HtmlEncode(link) + "&blog_name=" + HtmlEncode(blogname) + "&excerpt=" + HtmlEncode(description);
    string parameters = "title=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(title))
                      + "&url=" + HttpUtility.UrlEncode(link)
                      + "&blog_name=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(blogname))
                      + "&excerpt=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(description))
                      + "&charset=utf-8";
もともとのコードはまったく文字コードのことを考えてない。なので、utf-8 に変換してやるように修正。ここが例外が出る原因で、utf-16 のままだと String.Length と実際に送信するバイト数が違うために失敗してしまいます。
ちなみに、下記のように「トラックバックは utf-8 でいいんじゃないの?」という方向のようですので、とりあえずはこれでいいんじゃないかと思います。

Milano::Monolog 「Trackbackの文字コード指定方法最終(予定)」
http://rebecca.ac/milano/mt/archives/000396.html

BlogX から .Text へのデータインポート

原水さんのところで知ったんですが、BlogX から .Text へデータをインポートするためのツール into .Text っていうのがあります。http://blogs.users.gr.jp/haramizu/archive/2004/01/20/807.aspx
しかし、残念ながら .Text 0.94 用で 0.95 だとデータベースが変わっているためにそのままでは使えませんでした。そこで、0.95 対応に修正してみました。また、ついでにカテゴリも自動的にインポートするようにしてみました。


改造版の into .Text は こちら
ソースとバイナリが両方入っています。


オリジナルの into .Text
ソース http://postback.be/postback/posts/216.aspx
バイナリ http://postback.be/postback/posts/213.aspx

.Text に変更しました

久しぶりの更新です。


今まで BlogX を使ってましたが、.Text に変更しました。