class Nicos::Mylist

Attributes

author[RW]

作成者の名前

@return [String] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

available[RW]

このインスタンスがgetInfo等によって正常に情報を取得できている場合、trueとなる。 各種メソッドの実行には、これがtrueであることが要求される。

@return [Boolean]

create_time[RW]

マイリスト作成日時

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

default_sort[RW]

ソート順の設定

ソート順の設定 @return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

description[RW]

マイリストの説明文

@return [String] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

icon_id[RW]

アイコンの色?

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

movies[RW]

マイリストが含む動画インスタンスの配列

getInfo等のメソッドを利用した際に、そのマイリストが含む動画の インスタンスが配列として自動的に作られ、moviesに収められる。 @return [Array<Movie>]

mylist_id[RW]

マイリストID

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

public[RW]

公開設定

調査中 @return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

sort_order[RW]

現在のソート順

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

title[RW]

マイリストのタイトル

@return [String] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

update_time[RW]

マイリストの更新日時

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getInfo}

{Nicos::Movie#getInfo Mylist::getHtmlInfo}

user_id[RW]

ユーザID

@return [Fixnum] 取得可能なメソッド {Nicos::Movie#getInfo Mylist::getHtmlInfo}

Public Class Methods

new(mylist_id) click to toggle source
# File lib/classes/mylist.rb, line 13
def initialize (mylist_id)
  @mylist_id  = mylist_id    
  @movies     = []
  @available  = false
end

Public Instance Methods

getHtmlInfo() click to toggle source
# File lib/classes/mylist.rb, line 133
def getHtmlInfo
  @available = false

  res = connect( 
    Nicos::Connector::MylistHtml.new(),
    :html )
  parsed = parse(res[:result]) do |result|
    Nicos::Parser::Html::mylist(result[:body])
  end

  { 
    :parsed  => parsed, 
    :status  => res[:status][:status],
    :retry   => res[:status][:retry]
  }      
end
getInfo() click to toggle source

マイリストのAtomフィードから、マイリストとそれに含まれる動画の情報を取得する。

@return [Fixnum] Trigram法による、

# File lib/classes/mylist.rb, line 116
def getInfo
  @available = false

  res = connect( 
    Nicos::Connector::MylistAtom.new(), 
    :atom )
  parsed = parse(res[:result]) do |result|
    Nicos::Parser::Xml::mylistAtom(result[:body])
  end

  { 
    :parsed  => parsed, 
    :status  => res[:status][:status],
    :retry   => res[:status][:retry]
  }      
end
getSimilarity() click to toggle source

自分に含まれている動画のタイトルをすべての組み合わせにおいて比較し、 類似度の平均を返す。

@return [Fixnum] 編集距離に基づく類似度。上限は1、下限はなし。

# File lib/classes/mylist.rb, line 73
def getSimilarity
  l = @movies.length - 1
  sim = 0.0
  simAry = []
  count_o = 0
  count_i = 0
  
  @movies.each do |movie|
    puts "\s" + movie.title
  end

  if @movies.length >= 2 
    while count_o <= l do
      count_i = count_o + 1
      while count_i <= l do
        simAry.push(
          sim(
            @movies[count_i].title, 
            @movies[count_o].title,
            3
          )
        )
        count_i += 1
      end
      count_o += 1
    end
  
    t = 0
    simAry.each { |_sim| t += _sim }
    similarity = t / simAry.length
  elsif @movies.length == 1
    similarity = 1
  else
    similarity = 0
  end
      p similarity
  ( similarity * 100 ).round / 100.0 
end
set(paramObj) click to toggle source

{Movie#set} を参照。

# File lib/classes/mylist.rb, line 151
def set(paramObj)
  paramObj.each_key do |key|
    param = paramObj[key]
    case key
    when "mylist_id",  :mylist_id     then @mylist_id = param.to_i
    when "user_id",    :user_id       then @user_id = param.to_i
    when "title",      :title         then @title = param
    when "description",:description   then @description = param
    when "public",     :public        then @public = param.to_i
    when "default_sort",:default_sort then @default_sort = param.to_i
    when "create_time",:create_time   then @create_time = param.to_i
    when "update_time",:update_time   then @update_time = param.to_i
    when "icon_id",    :icon_id       then @icon_id = param.to_i
    when "sort_order", :sort_order    then @sort_order = param.to_i
    when "movies",     :movies        then @movies = param
    when "updated",    :updated       then @update_time = param
    when "author",     :author        then @author = param
    end
  end   
end

Private Instance Methods

connect(connector, type) click to toggle source
# File lib/classes/mylist.rb, line 39
def connect(connector, type)
  host = 'www.nicovideo.jp'
  entity = "/mylist/#{@mylist_id.to_s}"
  param = (type == :atom ? '?rss=atom&numbers=1' : '')

  result = connector.get(host, entity, param)
  status = connector.getStatus

  { :result => result, :status => status }
end
ngram(data, n) click to toggle source
# File lib/classes/mylist.rb, line 21
def ngram(data, n)
  ret = []
  data.split(//u).each_cons(n) do |a|
    ret << a.join
  end
  ret
end
parse(result, &block) click to toggle source
# File lib/classes/mylist.rb, line 50
def parse(result, &block)
  if result[:order] == :afterTheSuccess
    parsed = block.call(result)
    
    parsed[:entry].each do |e|
      movie = Nicos::Movie.new(e[:video_id])
      e[:available] = true
      movie.set(e)
      @movies.push(movie)
    end if parsed[:entry] != nil

    set(parsed[:mylist])
    @available = true
    parsed
  end 
end
sim(a, b, n) click to toggle source
# File lib/classes/mylist.rb, line 29
def sim(a, b, n)
  agram = ngram(a, n)
  bgram = ngram(b, n)

  all  = (agram | bgram).size.to_f
  same = (agram & bgram).size.to_f

  (same / all).nan? ? 0 : (same / all)
end