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

NoGoodの日記: TopThirty Nikky Kiddy #4(Code:rookie.rb) 1

日記 by NoGood
Cookie を使って状態を保持するようにした。
さらに、HTTP_USER_AGENT を参照して、AH-J3002V の時のみ 5KB を超える部分の日記エントリは表示しないようにした。
# ココは各自端末毎の UA & データサイズに変更されたし。

Cookie に記録しているのは、ある時点の Top30 における最新エントリまでの uid リスト(rookie_uids)と、その時点での最新エントリが保存された日時(rookie_last)の二つ。

Top30 を再度取得した場合、保持している最新エントリ時間よりも新しい日記エントリだけを uid リストに追加するようにしてある。
従って、Top30 を再度取得した場合に、古い方に既読分のエントリが残っていてもパスされる。
とりあえず、これでパケット量の観測を実施するので、少なくともロジックの変更や機能の追加は当面無し。
# でもブラウザの限界までっていうのはなんとかしたいなぁ…

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

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • #!/usr/bin/ruby
    require 'net/http'
    require 'cgi'

    fqdn = "slashdot.jp"
    path = "/journal.pl"
    queryTop = "?op=top"
    queryUser = "?op=display&uid="
    queryTandL = "&theme=slashdotjp&light=1"
    journalTopSeparator = "ID 58, journaltop"
    now = Time::now
    limit = now + 60 * 60 * 24 * 365

    $counter = 0
    $output_limit = 0
    if ENV["HTTP_USER_AGENT"] =~ /AH-J3002V/
            # </body>\n</html> の分を考慮してあります。
            $output_limit = 50 * 1024 - 15
    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

    cgi = CGI::new

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

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

    if uids.length < 1
            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
                    min = $4
                    if $5 =~ /PM/
                            hour = hour.to_i + 12
                    end
                    entrytime = Time::local(now.strftime("%Y"), month, day, hour, min)
                    if entrytime > now
                            year = now.strftime("%y").to_i - 1
                            entrytime = Time::local(year, month, day, hour, min)
                    end
    --
    mobile ID portable_NoGood [slashdot.jp] 併用中
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...