class Nicos::Connector::Connector

Attributes

result[RW]
waitConfig[RW]

Public Class Methods

new() click to toggle source
# File lib/classes/connector.rb, line 12
def initialize
  # デフォルトのウェイト設定
  @seqTime = 0
  @result = {
    :allDisabled => [],
    :notPublic => [],
    :limInCommunity => [],
    :notFound => [],
    :deleted => [],
    :noMovie => [],

    :deniedSeqReq => 0,
    :serverIsBusy => 0,
    :serviceUnavailable => 0,
    :timedOut => 0,

    :succeededNum => 0
  }
  @waitConfig = @@waitConfig
end

Public Instance Methods

getStatus() click to toggle source

リクエスト結果を格納する変数を、MylistやMovie等の 単一リクエストメソッド用に構造を変換する。

# File lib/classes/connector.rb, line 142
def getStatus
  status = {
    :status => nil,
    :retry  => {}
  }

  @result.each_key do |key|
    if @result[key].instance_of?(Array) && @result[key].length >= 1
      status[:status] = key
    elsif key === :succeededNum && @result[key] >= 1
      status[:status] = :success
    elsif @result[key].instance_of?(Fixnum)
      status[:retry][key] = @result[key]
    end
  end

  status
end

Private Instance Methods

accessDisabled(exception) click to toggle source

再試行しない例外の共通処理

# File lib/classes/connector.rb, line 38
def accessDisabled(exception)
  @result[exception].push(@nowAccess)
  { :order => :skip, :status => exception }  
end
allDisabled() click to toggle source
# File lib/classes/connector.rb, line 43
def allDisabled
  # MylistAtomについて、全ての動画が非公開あるいはその他の理由でRSSフィードに掲載されない時。
  puts "All movies are disabled."
  accessDisabled(:allDisabled) 
end
deleted() click to toggle source
# File lib/classes/connector.rb, line 72
def deleted # マイリストは削除と404の区別がない?
  puts "This movie/mylist is deleted."
  accessDisabled(:deleted) 
end
deniedSeqReq() click to toggle source
# File lib/classes/connector.rb, line 90
def deniedSeqReq
  puts "Denied sequential requests."
  exception(:deniedSeqReq)
end
exception(exception) click to toggle source

共通処理

# File lib/classes/connector.rb, line 80
def exception(exception)
  if @retryCount <= @waitConfig[exception][:retryLimit]
    { :order => :skip }   
  else
    sleep @waitConfig[exception][:wait]
    @result[exception] += 1
    { :order => :retry }   
  end        
end
limInCommunity() click to toggle source
# File lib/classes/connector.rb, line 56
def limInCommunity
  puts "This movie/mylist is limited in comunity members."
  # ex. item_id -> 1294702905
  accessDisabled(:limInCommunity) 
end
noMovie() click to toggle source
# File lib/classes/connector.rb, line 67
def noMovie
  puts "This movie/mylist contains no movie."
  accessDisabled(:noMovie) 
end
notFound() click to toggle source
# File lib/classes/connector.rb, line 62
def notFound
  puts "This movie/mylist is not found."
  accessDisabled(:notFound) 
end
notPublic() click to toggle source
# File lib/classes/connector.rb, line 49
def notPublic
  # マイリスト非公開のときに403になる。
  # http://www.nicovideo.jp/mylist/25479830
  puts "This movie/mylist is not public."
  accessDisabled(:notPublic) 
end
reachedLast() click to toggle source
# File lib/classes/connector.rb, line 110
def reachedLast 
  # TagAtom専用。MylistAtomは、allDisabledと結果が被ってしまう。
  puts "Reached the last page."
  { :order => :terminate } 
end
serverIsBusy() click to toggle source
# File lib/classes/connector.rb, line 95
def serverIsBusy
  puts "The server is busy."
  exception(:serverIsBusy)
end
serviceUnavailable() click to toggle source
# File lib/classes/connector.rb, line 100
def serviceUnavailable
  puts "Service unavailable."
  exception(:serviceUnavailable)
end
succeeded(resBody) click to toggle source
# File lib/classes/connector.rb, line 116
def succeeded(resBody)
  @result[:succeededNum] += 1
  sleep @waitConfig[:each]
  @seqTime += 1
  
  if @seqTime >= @waitConfig[:seqAccLimit]
    sleep @waitConfig[:afterSeq]
    @seqTime = 0
  end
  
  { 
    :status => :success,
    :order => :afterTheSuccess, 
    :body => resBody
  } 
end
timedOut() click to toggle source
# File lib/classes/connector.rb, line 105
def timedOut
  puts "Request timed out."
  exception(:timedOut)
end
wait(status) click to toggle source
# File lib/classes/connector.rb, line 133
def wait(status)
  puts "Wait for " + waitTime + " second."
  sleep @waitConfig[status.to_s]
end