Class: Nicos::Searcher::ByTag
- Inherits:
-
ByTagSuper
- Object
- Connector::Config
- ByTagSuper
- Nicos::Searcher::ByTag
- Defined in:
- lib/classes/searcher.rb
Instance Attribute Summary collapse
-
#waitConfig ⇒ Object
Returns the value of attribute waitConfig.
Instance Method Summary collapse
-
#execute(tag, sortMethod, &block) ⇒ Object
タグ検索を実行し、ブロックに結果を渡します。.
-
#initialize ⇒ ByTag
constructor
A new instance of ByTag.
Methods included from Connector::SetWait
Methods inherited from Connector::Config
Constructor Details
Instance Attribute Details
#waitConfig ⇒ Object
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
成功回数
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 |