パスワードを忘れた? アカウント作成

NoGood (6817) の日記

2004 年 07 月 09 日
午後 08:07

TopThirty Nikky Kiddy #8 newly Library&continuity Commen

Safari が異常終了したので詳細な説明はヤメってことで(ぉ
共通ライブラリ部分と日記エントリ表示部分とコメント表示部分の三つにファイルが増えました。
ファイル名をハードコードしちゃってるので、三つともファイル名は固定というか、変更するときは中に記述されたファイル名も連動させる様にして下さい。

以下、大きな変更点について

  • 日記へのコメントも軽量化表示します
    こんな感じ。

    サブジェクト
    nick のコメント: コメント日時 (スコア:1) (#cid)
    (ユーザ #uid の情報) “ホームページ”設定へのリンク

    本文

    署名

    なお、以前調査した時と同様、署名が強制表示されてしまうので、コメントする際には御注意下さい。

  • journal.rb?l=4 とか指定すると、各日記エントリを最大 4 エントリまでしか表示しなくなります
    Cookie で保持するので、再入力が必要なのは変更時のみです。
    なお、この処理だけはユーザに ?l=5 とか &l=10 とか任意入力してもらう必要があるので、もう少し解説を…
    現行の最新日記表示にあわせ、1~25 までを指定可能です。
    to_i メソッドを使用して強制数値変換を行っているので、数値と解釈できない場合や、上の範囲を超える数値が指定された場合等にはデフォルト値として 25 を使用します。
  • Top30 を取得した場合には最新エントリの日時と共に更新メッセージを表示するように変更しました

───────────
↓前次↑

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • class Limiter
            def initialize()
                @warnmsg =<<EOF
    <hr>
    Data size over.
    EOF
                @footermsg =<<EOF
    </body>
    </html>
    EOF
                @counter = 0
                @output_limit = 0
                if ENV["HTTP_USER_AGENT"] =~ /AH-J3002V/
                @output_limit = 50 * 1024 - @footermsg.length
                end
                ObjectSpace.define_finalizer(self) do
                puts @footermsg
                end
            end

            def cntprint(string)
                flag = false
                counter = @counter + string.length
                if @output_limit < 1 || counter < @output_limit
                @counter = @counter + string.length
                print string
                flag = true
                end
                return flag
            end

            def put(string)
                flag = self.cntprint(string)
                if flag != true
                self.cntprint(@wrnmsg)
                end
                return flag
            end
    end
    --
    mobile ID portable_NoGood [slashdot.jp] 併用中
  • #!/usr/bin/ruby
    require 'net/http'
    require 'cgi'
    require "Lib.rb"

    fqdn = "slashdot.jp"
    path = "/journal.pl"
    commentScript = "comments.rb"
    queryTop = "?op=top"
    queryUser = "?op=display&uid="
    queryTandL = "&theme=slashdotjp&light=1"
    journalTopSeparator = "ID 58, journaltop"
    entryMax = 25
    journalMax = 30
    now = Time::now
    limit = now + 60 * 60 * 24 * 365
    output =<<EOF
    Content-Type: text/html

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
    EOF

    counter = Limiter::new
    cgi = CGI::new

    if cgi.cookies.key?("last")
            cookie_last = cgi.cookies["last"]
            (year, month, day, hour, min) = cookie_last.value
            lastreadtime = Time::local(year, month, day, hour, min)
    else
            cookie_last = CGI::Cookie::new
            cookie_last.name = "last"
            lastreadtime = Time::at(0)
            cookie_last.value = lastreadtime.strftime("%Y,%m,%d,%H,%M").split(",")
            cookie_last.expires = limit
    end

    if cgi.cookies.key?("limit")
            cookie_limit = cgi.cookies["limit"]
            entryLimit = cookie_limit.value[0].to_i
    else
            entryLimit = entryMax
    end

    if cgi.cookies.key?("uids")
            cookie_uids = cgi.cookies["uids"]
            uids = cookie_uids.value
    else
            cookie_uids = CGI::Cookie::new
            cookie_uids.name = "uids"
            cookie_uids.value = []
            cookie_uids.expires = limit
            uids = []
    end

    if cgi.key?("j")
            journalNo = cgi["j"].to_s.to_i
            if journalNo < 1 or journalNo > journalMax or journalNo > uids.length
            journalNo = 0
            end
    else
            journalNo = 0
    end

    if cgi.key?("l")
            entryLimit = cgi["l"].to_s.to_i
            if entryLimit < 1 or entryLimit > entryMax
            entryLimit = entryMax
            end
            cookie_limit = CGI::Cookie::new
            cookie_limit.name = "limit"
            cookie_limit.value = entryLimit.to_s.split
            cookie_limit.expires = limit
            output =<<EOF + output
    "Set-Cookie:#{cookie_limit}"
    EOF
    end

    if journalNo < 1
            uids = []
            connection = Net::HTTP.new( fqdn )
            status, source = connection.get( path + queryTop + queryTandL )
            latest = source.split( journalTopSeparator )
            uidlist = latest[1].split("<\/TR>")
            uidlist.shift
            uidlist.each do |uidentry|
            tdlist = uidentry.split("<\/TD>")
            if tdlist[0] =~ /uid=(\d+)/
                    uid = $1
                    if tdlist[2] =~/(\d+)月(\d+)日 (\d+):(\d+) ([AP]M)/
                    month = $1
                    day = $2
                    hour = $3.to_i
                   
    --
    mobile ID portable_NoGood [slashdot.jp] 併用中
  • #!/usr/bin/ruby
    require 'net/http'
    require 'cgi'
    require "Lib.rb"

    journals = "journal.rb"
    fqdn = "slashdot.jp"
    path = "/comments.pl"
    query = "?threshold=-1&mode=flat&commentsort=0&light=1&sid="
    commentsSeparator = "ID 153, printCommComments;misc;default -->"
    journalMax = 30

    counter = Limiter::new
    cgi = CGI::new

    if cgi.key?("n")
            journalNext = cgi["n"].to_s.to_i
            if journalNext < 1 or journalNext > journalMax
            journalNext = 0
            end
    else
            journalNext = 0
    end

    if cgi.key?("sid")
            sid = cgi["sid"].to_s
    else
            sid = 0
    end

    connection = Net::HTTP.new( fqdn )
    status, source = connection.get( path + query + sid )
    list = source.split( commentsSeparator )
    commentlist = list[1].split("<TR><TD>")
    comments=[]
    commentlist.each do |comment|
        if comment =~ /<TD>(.*)<\/TD>/m
            comments.push($1)
        end
    end

    counter.put <<EOF
    Content-Type: text/html

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
    <title>#{sid}</title>
    </head>
    <body>
    <a href="#{journals}?j=#{journalNext + 1}">戻</a>:<a href="#{journals}?j=#{journalNext}">次</a>
    EOF

    if comments.length > 0
            comments.each do |comment|
            comment = "<hr>" + comment
            if counter.put( comment ) != true
                    break
            end
            end
    else
            counter.put <<EOF
    【#{lastreadtime.strftime('%Y/%m/%d %H:%M')} 時点ではコメントがありません】
    EOF
    end
    --
    mobile ID portable_NoGood [slashdot.jp] 併用中

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

処理中...