nicoquery 0.0.1.4 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/lib/nicoquery/api/base.rb +33 -0
- data/lib/nicoquery/api/getthumbinfo.rb +22 -0
- data/lib/nicoquery/api/mylist_rss.rb +32 -0
- data/lib/nicoquery/api/tag_search_rss.rb +66 -0
- data/lib/nicoquery/api/video_array.rb +28 -0
- data/lib/nicoquery/crawler/tag_search.rb +4 -7
- data/lib/nicoquery/object/movie.rb +77 -0
- data/lib/nicoquery/object/mylist.rb +51 -0
- data/lib/nicoquery/object/tag_search.rb +48 -0
- data/lib/nicoquery/object_mapper/getthumbinfo.rb +151 -0
- data/lib/nicoquery/object_mapper/mylist_rss.rb +195 -0
- data/lib/nicoquery/object_mapper/tag_search_rss.rb +43 -0
- data/lib/nicoquery/version.rb +1 -1
- data/lib/nicoquery.rb +12 -1
- data/spec/api/getthumbinfo_spec.rb +15 -0
- data/spec/api/mylist_rss_spec.rb +16 -0
- data/spec/api/spec_helper.rb +17 -0
- data/spec/api/tag_search_spec.rb +22 -0
- data/spec/api/video_array_spec.rb +15 -0
- data/spec/crawler/tag_search_spec.rb +6 -6
- data/spec/fixture/tag_search_item.rb +51 -0
- data/spec/fixture/tag_search_meta.rb +380 -0
- data/spec/nicoquery_spec.rb +123 -0
- data/spec/object/movie_spec.rb +52 -0
- data/spec/object/mylist_spec.rb +47 -0
- data/spec/object/tag_search_rss_spec.rb +26 -0
- metadata +37 -9
- data/lib/nicoquery/crawler.rb +0 -12
- data/lib/nicoquery/parser/tag_search.rb +0 -106
- data/lib/nicoquery/parser.rb +0 -8
- data/spec/parser/tag_search_spec.rb +0 -119
- /data/spec/{parser/fixture.rb → fixture/tag_search.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f0ddf47b8f763c5fc064122517e69f31680ca13
|
4
|
+
data.tar.gz: dc5b0711ae9be3cfcc2ad20d789f31d89c407146
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97c1ab0f74bf11b527a4a2ac976af6f55c3e70a2e4697d44d936539ddf51b15dc9292f11343540c6d6ddd005ee26c279cd83eccd5dca4b8d83a6e8931ae8a962
|
7
|
+
data.tar.gz: 1b9801240a7427f2ba1bcfa7bb14935c77ebf17f25183ecdcfb7ed555c5decdbd61b5f0e8791d29225eeb840f5f40010c3430893c4c2d3ec84efec4b4b6c2789
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nicoquery (0.0.
|
4
|
+
nicoquery (0.0.2)
|
5
5
|
activesupport (~> 4.0.0)
|
6
6
|
i18n
|
7
7
|
nicoapi
|
@@ -27,7 +27,7 @@ GEM
|
|
27
27
|
mini_portile (0.5.1)
|
28
28
|
minitest (4.7.5)
|
29
29
|
multi_json (1.7.8)
|
30
|
-
nicoapi (0.0.4)
|
30
|
+
nicoapi (0.0.4.1)
|
31
31
|
activesupport (~> 4.0.0)
|
32
32
|
i18n
|
33
33
|
rest-client
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
|
3
|
+
|
4
|
+
module NicoQuery
|
5
|
+
module Api
|
6
|
+
class Base
|
7
|
+
def scheme
|
8
|
+
'http'
|
9
|
+
end
|
10
|
+
|
11
|
+
def params
|
12
|
+
@params_array.join('&')
|
13
|
+
end
|
14
|
+
|
15
|
+
def path
|
16
|
+
if @dynamic_segment.present?
|
17
|
+
static_segment + '/' + @dynamic_segment
|
18
|
+
else
|
19
|
+
static_segment
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def uri
|
24
|
+
_uri = scheme + "://" + [ ([host, path].join('/')), params].join('?')
|
25
|
+
URI.escape _uri
|
26
|
+
end
|
27
|
+
|
28
|
+
def get
|
29
|
+
RestClient.get uri.to_s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'nicoquery/api/base'
|
2
|
+
|
3
|
+
|
4
|
+
module NicoQuery
|
5
|
+
module Api
|
6
|
+
class GetThumbInfo < NicoQuery::Api::Base
|
7
|
+
def initialize(video_id)
|
8
|
+
@dynamic_segment = video_id
|
9
|
+
@params_array = []
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def host
|
14
|
+
'ext.nicovideo.jp'
|
15
|
+
end
|
16
|
+
|
17
|
+
def static_segment
|
18
|
+
'api/getthumbinfo'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'active_support/core_ext'
|
2
|
+
require 'nicoquery/api/base'
|
3
|
+
|
4
|
+
|
5
|
+
module NicoQuery
|
6
|
+
module Api
|
7
|
+
class MylistRSS < NicoQuery::Api::Base
|
8
|
+
|
9
|
+
def initialize(mylist_id)
|
10
|
+
@dynamic_segment = mylist_id.to_s
|
11
|
+
@params_array = params_array
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def host
|
16
|
+
'www.nicovideo.jp'
|
17
|
+
end
|
18
|
+
|
19
|
+
def static_segment
|
20
|
+
'mylist'
|
21
|
+
end
|
22
|
+
|
23
|
+
def params_array
|
24
|
+
[format]
|
25
|
+
end
|
26
|
+
|
27
|
+
def format
|
28
|
+
"rss=2.0"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'active_support/core_ext'
|
2
|
+
require 'nicoquery/api/base'
|
3
|
+
|
4
|
+
|
5
|
+
module NicoQuery
|
6
|
+
module Api
|
7
|
+
class TagSearchRss < NicoQuery::Api::Base
|
8
|
+
|
9
|
+
def initialize(tag: tag, sort: sort, order: order, page: page)
|
10
|
+
@dynamic_segment = tag
|
11
|
+
@params_array = params_array(sort, order, page)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def host
|
16
|
+
'www.nicovideo.jp'
|
17
|
+
end
|
18
|
+
|
19
|
+
def static_segment
|
20
|
+
'tag'
|
21
|
+
end
|
22
|
+
|
23
|
+
def params_array(sort, order, page)
|
24
|
+
[
|
25
|
+
sort_param(sort),
|
26
|
+
order_param(order),
|
27
|
+
page_param(page),
|
28
|
+
format,
|
29
|
+
"numbers=1", # it enables to catch view/comment/mylist cum.
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
def format
|
34
|
+
"rss=2.0"
|
35
|
+
end
|
36
|
+
|
37
|
+
def sort_param(sort)
|
38
|
+
sort_string = case sort
|
39
|
+
when :commented_at then nil
|
40
|
+
when :view_count then 'v'
|
41
|
+
when :comment_num then 'r'
|
42
|
+
when :mylist_count then 'm'
|
43
|
+
when :published_at then 'f'
|
44
|
+
when :length then 'l'
|
45
|
+
else nil
|
46
|
+
end
|
47
|
+
|
48
|
+
sort_string.present? ? "sort=#{sort_string}" : ''
|
49
|
+
end
|
50
|
+
|
51
|
+
def order_param(order)
|
52
|
+
order_string = case order
|
53
|
+
when :asc then 'order=a'
|
54
|
+
when :desc then 'order=d'
|
55
|
+
else nil
|
56
|
+
end
|
57
|
+
|
58
|
+
order_string.presence || ''
|
59
|
+
end
|
60
|
+
|
61
|
+
def page_param(page)
|
62
|
+
"page=#{page}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'nicoquery/api/base'
|
2
|
+
|
3
|
+
|
4
|
+
module NicoQuery
|
5
|
+
module Api
|
6
|
+
class VideoArray < NicoQuery::Api::Base
|
7
|
+
def initialize(video_id_array)
|
8
|
+
@video_id_array = video_id_array
|
9
|
+
@dynamic_segment = ''
|
10
|
+
@params_array = params_array @video_id_array
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def host
|
15
|
+
'i.nicovideo.jp'
|
16
|
+
end
|
17
|
+
|
18
|
+
def static_segment
|
19
|
+
'v3/video.array'
|
20
|
+
end
|
21
|
+
|
22
|
+
# video.array APIは動的セグメントではなく、URIパラメータとして動画を指定する。
|
23
|
+
def params_array(video_id_array)
|
24
|
+
['v=' + video_id_array.join(',')]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require "
|
2
|
-
require "nicoquery/
|
1
|
+
require "nicoquery/api/tag_search"
|
2
|
+
require "nicoquery/object_mapper/tag_search"
|
3
3
|
require "nori"
|
4
4
|
|
5
5
|
|
@@ -7,17 +7,14 @@ module NicoQuery
|
|
7
7
|
module Crawler
|
8
8
|
module TagSearch
|
9
9
|
def execute(tag: tag, sort: sort, order: order, &block)
|
10
|
-
parser = NicoQuery::Parser::TagSearch.new
|
11
10
|
page = 0
|
12
11
|
|
13
12
|
loop do
|
14
13
|
command = nil
|
15
14
|
page += 1
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
self.each_movie(parser.items) do |movie|
|
16
|
+
tag_search_object = NicoQuery::Object::TagSearch.new tag: tag, sort: sort, order: order, page: page
|
17
|
+
self.each_movie(tag_search_object.movies) do |movie|
|
21
18
|
command = block.call movie
|
22
19
|
break if command == :break || command != :continue
|
23
20
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require "nicoquery/api/getthumbinfo"
|
2
|
+
require "nicoquery/object_mapper/getthumbinfo"
|
3
|
+
|
4
|
+
|
5
|
+
module NicoQuery
|
6
|
+
module Object
|
7
|
+
class Movie
|
8
|
+
attr_reader :video_id
|
9
|
+
|
10
|
+
[
|
11
|
+
'title',
|
12
|
+
'url',
|
13
|
+
# 'thread_id',
|
14
|
+
'view_counter',
|
15
|
+
'comment_num',
|
16
|
+
'mylist_counter',
|
17
|
+
'publish_date',
|
18
|
+
'description',
|
19
|
+
].each do |field_name|
|
20
|
+
define_method(field_name) do
|
21
|
+
source =
|
22
|
+
@source['mylist_rss'].presence ||
|
23
|
+
@source['tag_search_rss'].presence ||
|
24
|
+
@source['gethumbinfo'].presence ||
|
25
|
+
Proc.new do
|
26
|
+
source = (NicoQuery::Api::GetThumbInfo.new @video_id).get
|
27
|
+
set_getthumbinfo_source(NicoQuery::ObjectMapper::GetThumbInfo.new source)
|
28
|
+
end.call
|
29
|
+
|
30
|
+
source.send field_name
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
[
|
35
|
+
'movie_type',
|
36
|
+
'size_high',
|
37
|
+
'size_low',
|
38
|
+
'last_res_body',
|
39
|
+
'thumb_type',
|
40
|
+
'embeddable',
|
41
|
+
'no_live_play',
|
42
|
+
'user_id',
|
43
|
+
'tags',
|
44
|
+
].each do |field_name|
|
45
|
+
define_method(field_name) do
|
46
|
+
source =
|
47
|
+
@source['gethumbinfo'].presence ||
|
48
|
+
@source['video_array'].presence ||
|
49
|
+
Proc.new do
|
50
|
+
source = (NicoQuery::Api::GetThumbInfo.new @video_id).get
|
51
|
+
set_getthumbinfo_source(NicoQuery::ObjectMapper::GetThumbInfo.new source)
|
52
|
+
end.call
|
53
|
+
|
54
|
+
source.send field_name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def initialize(video_id)
|
59
|
+
@source = {}
|
60
|
+
@video_id = video_id
|
61
|
+
end
|
62
|
+
|
63
|
+
def set_getthumbinfo_source(hash)
|
64
|
+
@source['getthumbinfo'] ||= hash
|
65
|
+
end
|
66
|
+
|
67
|
+
def set_mylist_rss_source(hash)
|
68
|
+
@source['mylist_rss'] ||= hash
|
69
|
+
end
|
70
|
+
|
71
|
+
def set_tag_search_rss_source(hash)
|
72
|
+
@source['tag_search_rss'] ||= hash
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "nicoquery/api/mylist_rss"
|
2
|
+
require "nicoquery/object_mapper/mylist_rss"
|
3
|
+
require "nicoquery/object/movie"
|
4
|
+
|
5
|
+
|
6
|
+
module NicoQuery
|
7
|
+
module Object
|
8
|
+
class Mylist
|
9
|
+
attr_accessor :movies
|
10
|
+
|
11
|
+
[
|
12
|
+
'title',
|
13
|
+
'mylist_id',
|
14
|
+
'url',
|
15
|
+
'link',
|
16
|
+
'description',
|
17
|
+
'publish_date',
|
18
|
+
'last_build_date',
|
19
|
+
'creator',
|
20
|
+
].each do |field_name|
|
21
|
+
define_method(field_name) { @hash.meta.send field_name }
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(mylist_id)
|
25
|
+
@movies = []
|
26
|
+
@mylist_id = mylist_id
|
27
|
+
source = (NicoQuery::Api::MylistRSS.new mylist_id).get
|
28
|
+
@hash = NicoQuery::ObjectMapper::MylistRSS.new source
|
29
|
+
|
30
|
+
@hash.items.map do |item|
|
31
|
+
movie = NicoQuery::Object::Movie.new item.video_id
|
32
|
+
movie.set_mylist_rss_source item
|
33
|
+
@movies.push movie
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
# <title>マイリスト to_test‐ニコニコ動画</title>
|
42
|
+
# <link>http://www.nicovideo.jp/mylist/38369702</link>
|
43
|
+
# <atom:link rel="self" type="application/rss+xml" href="http://www.nicovideo.jp/mylist/38369702?rss=2.0"/>
|
44
|
+
# <description></description>
|
45
|
+
# <pubDate>Sat, 17 Aug 2013 22:51:40 +0900</pubDate>
|
46
|
+
# <lastBuildDate>Sat, 17 Aug 2013 22:51:40 +0900</lastBuildDate>
|
47
|
+
# <generator>ニコニコ動画</generator>
|
48
|
+
# <dc:creator>うえおに</dc:creator>
|
49
|
+
# <language>ja-jp</language>
|
50
|
+
# <copyright>(c) niwango, inc. All rights reserved.</copyright>
|
51
|
+
# <docs>http://blogs.law.harvard.edu/tech/rss</docs>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "nicoquery/api/tag_search_rss"
|
2
|
+
require "nicoquery/object_mapper/tag_search_rss"
|
3
|
+
require "nicoquery/object/movie"
|
4
|
+
|
5
|
+
|
6
|
+
module NicoQuery
|
7
|
+
module Object
|
8
|
+
class TagSearch
|
9
|
+
attr_accessor :movies
|
10
|
+
|
11
|
+
[
|
12
|
+
'title',
|
13
|
+
'url',
|
14
|
+
'link',
|
15
|
+
'description',
|
16
|
+
'publish_date',
|
17
|
+
'creator',
|
18
|
+
].each do |field_name|
|
19
|
+
define_method(field_name) { @hash.meta.send field_name }
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(tag: tag, sort: sort, order: order, page: page)
|
23
|
+
@movies = []
|
24
|
+
source = (NicoQuery::Api::TagSearchRss.new(tag: tag, sort: sort, order: order, page: page)).get
|
25
|
+
@hash = NicoQuery::ObjectMapper::TagSearchRss.new source
|
26
|
+
|
27
|
+
@hash.items.map do |item|
|
28
|
+
movie = NicoQuery::Object::Movie.new item.video_id
|
29
|
+
movie.set_tag_search_rss_source item
|
30
|
+
@movies.push movie
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# <title>マイリスト to_test‐ニコニコ動画</title>
|
39
|
+
# <link>http://www.nicovideo.jp/mylist/38369702</link>
|
40
|
+
# <atom:link rel="self" type="application/rss+xml" href="http://www.nicovideo.jp/mylist/38369702?rss=2.0"/>
|
41
|
+
# <description></description>
|
42
|
+
# <pubDate>Sat, 17 Aug 2013 22:51:40 +0900</pubDate>
|
43
|
+
# <lastBuildDate>Sat, 17 Aug 2013 22:51:40 +0900</lastBuildDate>
|
44
|
+
# <generator>ニコニコ動画</generator>
|
45
|
+
# <dc:creator>うえおに</dc:creator>
|
46
|
+
# <language>ja-jp</language>
|
47
|
+
# <copyright>(c) niwango, inc. All rights reserved.</copyright>
|
48
|
+
# <docs>http://blogs.law.harvard.edu/tech/rss</docs>
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require "nori"
|
2
|
+
|
3
|
+
|
4
|
+
module NicoQuery
|
5
|
+
module ObjectMapper
|
6
|
+
class GetThumbInfo
|
7
|
+
def initialize(xml)
|
8
|
+
@xml = xml
|
9
|
+
parser = Nori.new
|
10
|
+
parsed_xml = parser.parse xml
|
11
|
+
@hash = parsed_xml['nicovideo_thumb_response']['thumb']
|
12
|
+
end
|
13
|
+
|
14
|
+
def video_id
|
15
|
+
@hash['video_id']
|
16
|
+
end
|
17
|
+
|
18
|
+
def title
|
19
|
+
@hash['title']
|
20
|
+
end
|
21
|
+
|
22
|
+
def description
|
23
|
+
@hash['description']
|
24
|
+
end
|
25
|
+
|
26
|
+
def thumbnail_url
|
27
|
+
@hash['thumbnail_url']
|
28
|
+
end
|
29
|
+
|
30
|
+
def first_retrieve
|
31
|
+
@hash['first_retrieve'].to_time
|
32
|
+
end
|
33
|
+
|
34
|
+
def publish_date # alias
|
35
|
+
first_retrieve
|
36
|
+
end
|
37
|
+
|
38
|
+
def length
|
39
|
+
string = @hash['length'].split(':')
|
40
|
+
string[0].to_i * 60 + string[1].to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
def movie_type
|
44
|
+
@hash['movie_type']
|
45
|
+
end
|
46
|
+
|
47
|
+
def size_high
|
48
|
+
@hash['size_high'].to_i
|
49
|
+
end
|
50
|
+
|
51
|
+
def size_low
|
52
|
+
@hash['size_low'].to_i
|
53
|
+
end
|
54
|
+
|
55
|
+
def view_counter
|
56
|
+
@hash['view_counter'].to_i
|
57
|
+
end
|
58
|
+
|
59
|
+
def comment_num
|
60
|
+
@hash['comment_num'].to_i
|
61
|
+
end
|
62
|
+
|
63
|
+
def mylist_counter
|
64
|
+
@hash['mylist_counter'].to_i
|
65
|
+
end
|
66
|
+
|
67
|
+
def last_res_body
|
68
|
+
@hash['last_res_body']
|
69
|
+
end
|
70
|
+
|
71
|
+
def url
|
72
|
+
@hash['watch_url']
|
73
|
+
end
|
74
|
+
|
75
|
+
def watch_url
|
76
|
+
@hash['watch_url']
|
77
|
+
end
|
78
|
+
|
79
|
+
def thumb_type
|
80
|
+
@hash['thumb_type']
|
81
|
+
end
|
82
|
+
|
83
|
+
def embeddable
|
84
|
+
@hash['embeddable'] == 1
|
85
|
+
end
|
86
|
+
|
87
|
+
def no_live_play
|
88
|
+
@hash['no_live_play'] == 1
|
89
|
+
end
|
90
|
+
|
91
|
+
def tags
|
92
|
+
xml = @xml.scan(/\<tags domain=\"jp\">\n.+\n\<\/tags\>/m)[0]
|
93
|
+
parsed = Nokogiri::XML xml
|
94
|
+
parsed.xpath("//tag").map do |tag_object|
|
95
|
+
generate_tag_hash_by tag_object
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def user_id
|
100
|
+
@hash['user_id'].to_i
|
101
|
+
end
|
102
|
+
|
103
|
+
def generate_tag_hash_by(nokogiri_xml)
|
104
|
+
text = nokogiri_xml.text
|
105
|
+
|
106
|
+
lock = if nokogiri_xml.attributes['lock'].present?
|
107
|
+
nokogiri_xml.attributes['lock'].text.to_i == 1
|
108
|
+
else
|
109
|
+
false
|
110
|
+
end
|
111
|
+
|
112
|
+
{ text: text, lock: lock }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# <nicovideo_thumb_response status="ok">
|
119
|
+
# <thumb>
|
120
|
+
# <video_id>sm9</video_id>
|
121
|
+
# <title>新・豪血寺一族 -煩悩解放 - レッツゴー!陰陽師</title>
|
122
|
+
# <description>レッツゴー!陰陽師(フルコーラスバージョン)</description>
|
123
|
+
# <thumbnail_url>http://tn-skr2.smilevideo.jp/smile?i=9</thumbnail_url>
|
124
|
+
# <first_retrieve>2007-03-06T00:33:00+09:00</first_retrieve>
|
125
|
+
# <length>5:19</length>
|
126
|
+
# <movie_type>flv</movie_type>
|
127
|
+
# <size_high>21138631</size_high>
|
128
|
+
# <size_low>17436492</size_low>
|
129
|
+
# <view_counter>13536149</view_counter>
|
130
|
+
# <comment_num>4148196</comment_num>
|
131
|
+
# <mylist_counter>133688</mylist_counter>
|
132
|
+
# <last_res_body>へん? はははははははははは wwwwwwwwwwwwwwwwwwww ...</last_res_body>
|
133
|
+
# <watch_url>http://www.nicovideo.jp/watch/sm9</watch_url>
|
134
|
+
# <thumb_type>video</thumb_type>
|
135
|
+
# <embeddable>1</embeddable>
|
136
|
+
# <no_live_play>0</no_live_play>
|
137
|
+
# <tags domain="jp">
|
138
|
+
# <tag lock="1">陰陽師</tag>
|
139
|
+
# <tag lock="1">レッツゴー!陰陽師</tag>
|
140
|
+
# <tag lock="1">公式</tag>
|
141
|
+
# <tag lock="1">音楽</tag>
|
142
|
+
# <tag lock="1">ゲーム</tag>
|
143
|
+
# <tag>β時代の英雄</tag>
|
144
|
+
# <tag>運営のお気に入り</tag>
|
145
|
+
# <tag>最古の動画</tag>
|
146
|
+
# <tag>1000万再生</tag>
|
147
|
+
# <tag>弾幕動画</tag>
|
148
|
+
# </tags>
|
149
|
+
# <user_id>4</user_id>
|
150
|
+
# </thumb>
|
151
|
+
# </nicovideo_thumb_response>
|