Thu, 23 Feb 2006

Unofficial - ALPSLAB clipのリクエストパラメータ

リクエストパラメータの解説とかなくて、MT/tDiary/Hikiのプラグインを用意 したからそれ見てねってな感じだったので、昼休みにプラグインを見てみた。

perl/ruby使いではないのでフィーリングで理解したパラメータ仕様は、 以下のようなもの。

link

  • ALPSLABのサイトへのリンク
  • 画像ファイルを指定する
    • base URI: http://clip.alpslab.jp/bin/map
    • 例: (base uri)?(地図のポイント指定)&(オプション)&(trackbackの有無)
      • オプション、trackbackの有無はなくてもよい
  • 地図のポイント指定
    • adr: 住所指定(文字コード: EUC-JP)
      • 例) 愛知県名古屋市千種区東山通5-65
    • pos: 緯度, 経度指定
      • 例) 35/9/23.017,136/58/33.873
  • オプション(opt)
    • サイズ指定: L/M/S
    • 縮尺指定: D(詳細)/N(中域)/W(広域)
    • 例) opt=LD
  • trackback済みであることを示す
    • tb=yes

trackback

  • base uri
  • (trackback base uri)/(緯度を変換した値)/(経度を変換した値)
    • 住所指定では地図ポイントを指定できないようだ。そのためbase uriに対してtrackbackする
    • 緯度/経度の変換式に関してはpluginコードのto_msec()関数を参照のこと
my @tmp = split(/\//,shift);
for(my $i=0;$i<@tmp;$i++){
    $r += $tmp[$i]/(60.0**$i);
}
int($r*3600000.0);
  • 文字コード: EUC-JP

思ったこと。

文字コードがEUC-JP固定ってのがもひとつかな。UTF-8固定か、ユーザーが 使う文字コードを指定できるといいな。

画像指定するときには、住所か緯度/経度で指定できるのに、 トラックバックの時には緯度/経度指定じゃないと場所指定ができないのが もひとつかな。あと緯度/経度指定の場合でもユーザ側で変な計算式で変換 しないといけないけど、画像指定の時と同じく、住所もしくは緯度/経度情報 そのままで通知してサーバ側で変換してくれた方がありがたい。

住所指定の時って、表示できない場合とかあるんじゃないかな? ALPSLAB baseであらかじめ確認できるのかな?ちょっと見たところでは わからなかった。

プラグイン内で自動トラックバックの機構を入れなくてもブログツール付属の トラックバックの機構を使ったらいいんじゃないかな?一瞬釣られてpyblosxom 用のプラグインを作ろうかと思ったんだけど(だからこそ調べたんだけど) トラックバックの機構を入れるのがちょっと面倒くさい。無いほうがいろんな ツール用のプラグインをみんなが作ってこのサービスが普及するような気がするな。


trackback spam

trackback spamが来た。

COREBlogな人々がトラックバックスパムだって大騒ぎしてるのを横目に、 これまでトラックバックスパムは一通も来たことが無かったので、 特に対策をするでもなく放っておいたのですがとうとう来るようになってしまいました。

どうしようかなーと思ってたのですが、先人の知恵を拝借しようと setomitsさん の所を検索したらありましたありました。blogツールは違っても 結構そのまま使えました。ありがとうございます。これで無事解決するかな。

comments.py のwriteComment()の中を下記の様にしました。

***************
*** 308,319 ****
      cdir = os.path.normpath(cdir)
      if not os.path.isdir(cdir):
          os.makedirs(cdir)
!     cfn = os.path.join(cdir,entry['fn']+"-"+comment['pubDate']+"."+config['comment_draft_ext'])

      argdict = { "request": request, "comment": comment }
!     reject = tools.run_callback("comment_reject",
!                                 argdict,
!                                 donefunc=lambda x:x)
      if reject == 1:
          return "Comment rejected."

--- 284,312 ----
      cdir = os.path.normpath(cdir)
      if not os.path.isdir(cdir):
          os.makedirs(cdir)
!     cfn = os.path.join(cdir,entry['fn']+"-"+comment['pubDate']+"."+config['comment_ext'])

      argdict = { "request": request, "comment": comment }
!
!     if comment['author'].find('Trackback from') != -1:
!         # This is trackback.
!
!         import urllib
!         my_url = config['base_url']
!
!         f = urllib.urlopen(comment['link'])
!         content = f.read()
!         f.close()
!
!         if content.find(my_url) == -1:
!             reject = 1
!         else:
!             reject = 0
!
!     else:
!         reject = tools.run_callback("comment_reject",
!                                     argdict,
!                                     donefunc=lambda x:x)
      if reject == 1:
          return "Comment rejected."