Class: Nicos::Searcher::ByTag

Inherits:
ByTagSuper show all
Defined in:
lib/classes/searcher.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Connector::SetWait

#setWait

Methods inherited from Connector::Config

setWait, setWaitDefault

Constructor Details

#initializeByTag

Returns a new instance of ByTag.



152
153
154
155
156
157
# File 'lib/classes/searcher.rb', line 152

def initialize
  @numOfSearched = 32
  @incrAmt = 0.2
  @connector = Nicos::Connector::TagAtom.new()
  @waitConfig = @@waitConfig
end

Instance Attribute Details

#waitConfigObject

Returns the value of attribute waitConfig.



158
159
160
# File 'lib/classes/searcher.rb', line 158

def waitConfig
  @waitConfig
end

Instance Method Details

#execute(tag, sortMethod, &block) ⇒ Object

タグ検索を実行し、ブロックに結果を渡します。

基本的な使い方

require 'nicoscraper'

searcher = Nicos::Searcher::ByTag.new()
searcher.execute('VOCALOID', :view_many) {
  |result, status|

  result.each { |movieObj|
    puts movieObj.title 
  }  
}

result ----

【初音ミク】みくみくにしてあげる♪【してやんよ】
初音ミク が オリジナル曲を歌ってくれたよ「メルト」
初音ミク が オリジナル曲を歌ってくれたよ「ワールドイズマイン」
初音ミクオリジナル曲 「初音ミクの消失(LONG VERSION)」
【巡音ルカ】ダブルラリアット【オリジナル】
「卑怯戦隊うろたんだー」をKAITO,MEIKO,初音ミクにry【オリジナル】修正版
【オリジナル曲PV】マトリョシカ【初音ミク・GUMI】
初音ミクがオリジナルを歌ってくれたよ「ブラック★ロックシューター」
...

  Nicos::Searcher::ByTagのインスタンスを作り、executeメソッドに引数を与えて実行します。 結果がブロックの第1仮引数に渡されます。 渡される結果はMovieクラスのインスタンスを含む配列です。

スクレイプの継続について

 ニコニコ動画の検索結果は、指定した数を一度に取得できる訳ではありません。 なぜなら、現状では検索結果はHTML1ページ、もしくは1つのRSS/Atomフィードに32個を限度に渡される方式であり、 ByTagクラスがその結果を利用する以上、32個=1単位という制約のもとに置かれるからです。 従って、例えば最新の投稿100個の情報が欲しいとしても、1回のリクエストでは手に入らず、 かならず数回に分けてリクエストすることになります。

 加えて、リクエストを継続するかどうかの判定も1ページ/1フィード毎に行います。

sortMethod: ソート方法

 以下のシンボルを指定して下さい。

:comment_new

コメントが新しい順

:comment_old

コメントが新しい順

:view_many

再生数が多い順

:view_few

再生数が少ない順

:comment_many

コメントが多い順

:comment_few

コメントが少ない順

:mylist_many

マイリスト登録が多い順

:mylist_few

マイリスト登録が少ない順

:post_new

登録が新しい順

:post_old

登録が少ない順

:length_long

再生時間が長い順

:length_short

再生時間が短い順

waitConfig: ウェイト設定

ウェイトの変更に際しては、READMEの注意点と免責事項を事前にお読み下さい。

以下のフォーマットのハッシュオブジェクトを与えて下さい。これはデフォルト設定です。 また、ハッシュは以下のキーを全て用意する必要はありません。 変更したい部分のキーと値のみを持つハッシュオブジェクトを作って下さい。

@waitConfig = {
  :seqAccLimit => 10,  # 連続してリクエストする回数
  :afterSeq    => 10,  # 連続リクエスト後のウェイト(以下、単位は全て秒)
  :each        => 1,   # 連続リクエスト時の、1リクエスト毎のウェイト
  :increment   => 1,   # アクセス拒絶時の、次回以降の1リクエスト毎のウェイトの増加量

  :deniedSeqReq=> {     # 連続アクセスを拒否された際の設定(以下同じ)
    :retryLimit  => 3,  # 再試行の上限回数
    :wait        => 120 # 次のアクセスまでのウェイト
  },

  :serverIsBusy=> {     # サーバ混雑時
    :retryLimit  => 3,
    :wait        => 120
  },

  :serviceUnavailable => { # 503が返ってきた時
    :retryLimit  => 3,
    :wait        => 120
  },

  :timedOut => {        # タイムアウト時
    :retryLimit  => 3,
    :wait        => 10
  }
}

ブロック内の第2引数について

第2引数には、それまでの検索の成否、例外の発生回数などを記録した ハッシュが渡されます。これは以下のような構造になっています。

{
  # 各種例外等が発生した動画・マイリストのIDを配列で保管。
  :notPublic => [],
  :limInCommunity => [],
  :notFound => [],
  :deleted => [],

  # 再試行で対処できる例外等が発生した件数。
  :deniedSeqReq => 0,
  :serverIsBusy => 0,
  :serviceUnavailable => 0,
  :timedOut => 0,

  # 成功回数
  :succeededNum => 0
}

allDisabled

 マイリストの場合のみ機能。そのマイリスト内の動画が全て非公開、 あるいは削除済み等で存在しないが、マイリストは残っている場合。

notPublic

 動画、マイリストが非公開である場合。

limInCommunity

 動画、マイリストがコミュニティ限定公開である場合。

notFound

 動画、マイリストが存在しない場合。マイリストは削除済みの場合もnotFoundとなる。

deleted

 その動画が削除済みである場合。マイリストについては、上のnotFoundと 区別されない。

deniedSeqReq

 連続アクセスとして明示的に拒否された場合。

serverIsBusy

 「大変ご迷惑をおかけいたしますが、しばらく時間をあけてから 再度検索いただくようご協力をお願いいたします。」と表示される場合。

serviceUnavailable

 503が返ってきた時。

timedOut

 タイムアウト

succeededNum

 成功回数

Parameters:

  • tag (String)

    検索したいタグ文字列

  • sortMethod (Symbol)

    ソート方法

  • waitConfig (HashObj)

    ウェイト設定



338
339
340
341
342
# File 'lib/classes/searcher.rb', line 338

def execute(tag, sortMethod, &block)
  loop(tag, sortMethod, :atom) { |result, page|
    block.call(result, page)
  }
end