top_video 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/top_video.rb +115 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bc6ea4ded815057f1c72d81f097cdea07cae67a4
|
4
|
+
data.tar.gz: 0cd9970cb2a0947dba0c53dc32ff18e6beee949b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cca48051fb136770e68ba9a3315e912016a04c96cc4f5945453928a987ca133e7a27462c0a0275b3373f83e70bf7aff78b4c73fbd6d465ea504a0acdcd1fca7d
|
7
|
+
data.tar.gz: 4f23f1baaf9ad7a12ef37dbbabbd3e79793199589decf7a8216923a25ecba372fde9a35ba09592c765272bb1c2f293e7b83990c9d10705a3fe9b6d0fba0390c0
|
data/lib/top_video.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'yt'
|
2
|
+
require 'thread'
|
3
|
+
require 'benchmark'
|
4
|
+
|
5
|
+
class ChannelInfo
|
6
|
+
attr_accessor :channel
|
7
|
+
attr_accessor :average
|
8
|
+
attr_accessor :total
|
9
|
+
|
10
|
+
def initialize(channel)
|
11
|
+
@channel = channel
|
12
|
+
@average = 0
|
13
|
+
@total = 0
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class VideoList
|
18
|
+
attr_accessor :video
|
19
|
+
attr_accessor :percent
|
20
|
+
|
21
|
+
def initialize(video, percent)
|
22
|
+
@video = video
|
23
|
+
@percent = percent
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class TopVideo
|
28
|
+
attr_accessor :videos
|
29
|
+
attr_accessor :channels
|
30
|
+
attr_accessor :limit
|
31
|
+
attr_accessor :mutex_channel
|
32
|
+
attr_accessor :mutex_video
|
33
|
+
|
34
|
+
# Return the difference in days between now and date where the video has been published
|
35
|
+
def numberOfDay(date)
|
36
|
+
t = Time.now
|
37
|
+
diff = t - date
|
38
|
+
diff = diff / (60 * 60 * 24)
|
39
|
+
return diff
|
40
|
+
end
|
41
|
+
|
42
|
+
# dump function to show the array of video
|
43
|
+
def dump(tab)
|
44
|
+
puts "dump :"
|
45
|
+
tab.each do |x|
|
46
|
+
puts x.video.title
|
47
|
+
puts x.percent
|
48
|
+
end
|
49
|
+
puts "end of dump"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Select Video in channel result from date and average view by day
|
53
|
+
def selectVideo(videos, average)
|
54
|
+
tmp = Array.new
|
55
|
+
videos.each do |video|
|
56
|
+
diff = numberOfDay(video.published_at)
|
57
|
+
averageVideo = video.view_count / diff
|
58
|
+
if ((diff < 30) && (averageVideo > average))
|
59
|
+
increase = ((averageVideo - average) / average) * 100
|
60
|
+
videoList = VideoList.new(video, increase)
|
61
|
+
tmp << videoList
|
62
|
+
end
|
63
|
+
end
|
64
|
+
tmp.sort_by! {|item| item.percent}.reverse!
|
65
|
+
@mutex_channel.synchronize do
|
66
|
+
tmp.first(@limit).each do |x|
|
67
|
+
@videos << x
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# calcul the averageView by day of the channel
|
73
|
+
def averageView(video, id)
|
74
|
+
diff = numberOfDay(video.published_at)
|
75
|
+
@mutex_video.synchronize do
|
76
|
+
@channels.at(id).total = @channels.at(id).total + (video.view_count / diff)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# global function which retries the average and select the video
|
81
|
+
def global(channel, id)
|
82
|
+
threads = Array.new
|
83
|
+
videos = channel.videos
|
84
|
+
videos.each do |video|
|
85
|
+
threads << Thread.new(video) {|x| averageView(x, id)}
|
86
|
+
end
|
87
|
+
threads.each do |thread|
|
88
|
+
thread.join
|
89
|
+
end
|
90
|
+
@channels[id].average = @channels[id].total / channel.video_count
|
91
|
+
selectVideo(videos, @channels[id].average)
|
92
|
+
end
|
93
|
+
|
94
|
+
def initialize(key, idChannels, limit = 3)
|
95
|
+
@videos = Array.new
|
96
|
+
@channels = Array.new
|
97
|
+
@limit = limit
|
98
|
+
@mutex_channel = Mutex.new
|
99
|
+
@mutex_video = Mutex.new
|
100
|
+
threads = Array.new
|
101
|
+
i = 0
|
102
|
+
Yt.configuration.api_key = key
|
103
|
+
idChannels.each do |id|
|
104
|
+
channel = Yt::Channel.new id: id
|
105
|
+
channelInfo = ChannelInfo.new(channel)
|
106
|
+
@channels << channelInfo
|
107
|
+
threads << Thread.new(channel, i) {|chan, id| global(chan, id)}
|
108
|
+
i = i + 1
|
109
|
+
end
|
110
|
+
threads.each do |thread|
|
111
|
+
thread.join
|
112
|
+
end
|
113
|
+
@videos.sort_by! {|x| x.video.channel_title}
|
114
|
+
end
|
115
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: top_video
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Valentin Wallet
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.25.5
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.25.5
|
27
|
+
description: Using Youtube API, top_video is a gem which will allow you to retrieve
|
28
|
+
rising videos from your favorite music channels with a release date less than one
|
29
|
+
month
|
30
|
+
email: valentinwallet@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- lib/top_video.rb
|
36
|
+
homepage: https://github.com/Zanclus/top_video
|
37
|
+
licenses:
|
38
|
+
- MIT
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 2.0.14
|
57
|
+
signing_key:
|
58
|
+
specification_version: 4
|
59
|
+
summary: Retrieve rising videos from your favorite music channels
|
60
|
+
test_files: []
|