cathodic 0.0.3 → 0.1.0
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.
- data/.gitignore +4 -4
- data/.travis.yml +8 -0
- data/Gemfile +4 -4
- data/Rakefile +1 -1
- data/Readme.md +61 -60
- data/cathodic.gemspec +23 -22
- data/lib/cathodic.rb +61 -55
- data/lib/cathodic/chat.rb +34 -0
- data/lib/cathodic/thumbnail.rb +41 -0
- data/lib/cathodic/version.rb +3 -3
- metadata +22 -3
data/.gitignore
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
*.gem
|
2
|
-
.bundle
|
3
|
-
Gemfile.lock
|
4
|
-
pkg/*
|
1
|
+
*.gem
|
2
|
+
.bundle
|
3
|
+
Gemfile.lock
|
4
|
+
pkg/*
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source "http://rubygems.org"
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in cathodic.gemspec
|
4
|
-
gemspec
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in cathodic.gemspec
|
4
|
+
gemspec
|
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require 'bundler/gem_tasks'
|
1
|
+
require 'bundler/gem_tasks'
|
data/Readme.md
CHANGED
@@ -1,60 +1,61 @@
|
|
1
|
-
Cathodic
|
2
|
-
================================
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
*
|
47
|
-
*
|
48
|
-
*
|
49
|
-
*
|
50
|
-
*
|
51
|
-
*
|
52
|
-
*
|
53
|
-
*
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
57
|
-
*
|
58
|
-
|
59
|
-
|
60
|
-
|
1
|
+
Cathodic
|
2
|
+
================================
|
3
|
+
[](https://gemnasium.com/kustom666/cathodic) [](https://travis-ci.org/kustom666/cathodic)
|
4
|
+
|
5
|
+
Cathodic was at first a module created for one of the websites I worked on.
|
6
|
+
I needed a way to easily access the data tied to a twitch.tv stream, such as the state of the stream (online or offine, thus the boolean), the number of viewers, the stream's status, etc.
|
7
|
+
|
8
|
+
Cathodic is now a standalone gem, and it's pretty easy to use, as you can see below.
|
9
|
+
|
10
|
+
Installing Cathodic
|
11
|
+
-----------------------------
|
12
|
+
|
13
|
+
If you're working on a ruby project, you just have to run the following command :
|
14
|
+
```ruby
|
15
|
+
gem install cathodic
|
16
|
+
```
|
17
|
+
|
18
|
+
However, if you're using rails, you might want to use bundler (if you don't, you should, it's awesome), therefore add the following line to your Gemfile
|
19
|
+
```ruby
|
20
|
+
gem cathodic
|
21
|
+
```
|
22
|
+
|
23
|
+
And run the following command :
|
24
|
+
```console
|
25
|
+
bundle install
|
26
|
+
```
|
27
|
+
|
28
|
+
To install the gem, and correctly add it to your rails project.
|
29
|
+
|
30
|
+
Using Cathodic
|
31
|
+
------------------------------
|
32
|
+
|
33
|
+
Cathodic is a very easy to use gem. Once you've installed it, you only need to instanciate a TwitchData object (contained in the Cathodic module) by calling the following constructor :
|
34
|
+
```ruby
|
35
|
+
Cathodic::TwitchData.new(url)
|
36
|
+
```
|
37
|
+
Where url is the url of the twitch.tv channel (http://twitch.tv/kustomgames/ for example). This url can be provided by one of your users, or fetched from the twitch.tv api.
|
38
|
+
|
39
|
+
The data tied to the stream can now be accessed by using the accessors : if you want to retreive the number of viewers on the stream and put it on the console output you just have to call the viewers accessor :
|
40
|
+
```ruby
|
41
|
+
data = Cathodic::TwitchData.new(url)
|
42
|
+
puts data.viewers
|
43
|
+
```
|
44
|
+
Here are all the data you can access at the moment :
|
45
|
+
|
46
|
+
* online : boolean - True if the stream is online, false otherwise
|
47
|
+
* account_name : string - Contains the account name from the provided url
|
48
|
+
* thumbnail_address : string - Contains the url of the stream's preview thumbnail (will soon change to a new thumbnail object)
|
49
|
+
* embed : string - Contains the html embed code for the twitch tv player which will play the stream's livestream
|
50
|
+
* viewers : integer - Contains the number of people currently watching the stream (when the TwitchData object was created!)
|
51
|
+
* entry_point : string - Contains the entry point to the api (for future upgrades of the gem, to support multiple providers)
|
52
|
+
* url : string - Contains the url to the twitch.tv stream page
|
53
|
+
* game : string - Contains the game currently played on the stream (updated by the streamer, might not be accurate)
|
54
|
+
* status : string - Contains the status of the stream, a title displayed on top of the embed which describes the current activity on screen (updated by the streamer, might not be accurate)
|
55
|
+
* logo : string - Contains the url of the stream's logo
|
56
|
+
* banner : string - Contains the url of the stream's banner
|
57
|
+
* stream_name : string - The casse sensitive stream name (example : account_name is kustomgames and stream_name is KustomGames)
|
58
|
+
* chat_embed : string - Conatains the html code used to pop out the stream's chat (incoming)
|
59
|
+
|
60
|
+
|
61
|
+
|
data/cathodic.gemspec
CHANGED
@@ -1,22 +1,23 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "cathodic/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "cathodic"
|
7
|
-
s.version = Cathodic::VERSION
|
8
|
-
s.authors = ["Paul Forti"]
|
9
|
-
s.email = ["paul@itsbi.fr"]
|
10
|
-
s.homepage = "https://github.com/kustom666/cathodic"
|
11
|
-
s.summary = "Gets a twitch.tv stream's info from the api"
|
12
|
-
s.description = "Cathodic helps users retreiving the data from a twitch tv stream, such as the number of viewers,
|
13
|
-
a preview thumbnail, the embed code, the status etc from the twitch channel's url"
|
14
|
-
|
15
|
-
s.rubyforge_project = "cathodic"
|
16
|
-
s.add_development_dependency "json"
|
17
|
-
|
18
|
-
|
19
|
-
s.
|
20
|
-
s.
|
21
|
-
s.
|
22
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cathodic/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "cathodic"
|
7
|
+
s.version = Cathodic::VERSION
|
8
|
+
s.authors = ["Paul Forti"]
|
9
|
+
s.email = ["paul@itsbi.fr"]
|
10
|
+
s.homepage = "https://github.com/kustom666/cathodic"
|
11
|
+
s.summary = "Gets a twitch.tv stream's info from the api"
|
12
|
+
s.description = "Cathodic helps users retreiving the data from a twitch tv stream, such as the number of viewers,
|
13
|
+
a preview thumbnail, the embed code, the status etc from the twitch channel's url"
|
14
|
+
|
15
|
+
s.rubyforge_project = "cathodic"
|
16
|
+
s.add_development_dependency "json"
|
17
|
+
s.add_runtime_dependency "json"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/lib/cathodic.rb
CHANGED
@@ -1,55 +1,61 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
@
|
41
|
-
|
42
|
-
@
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
@
|
47
|
-
@
|
48
|
-
@
|
49
|
-
|
50
|
-
@
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
1
|
+
#Cathodic takes the url of a twitch.tv stream and fetch every data tied to it, such as the status, logo, numbed of viewers, thumnails and game
|
2
|
+
#Author::Paul Forti
|
3
|
+
#License::MIT
|
4
|
+
|
5
|
+
require "cathodic/version"
|
6
|
+
require 'json'
|
7
|
+
require 'open-uri'
|
8
|
+
require 'openssl'
|
9
|
+
require "cathodic/thumbnail"
|
10
|
+
require "cathodic/chat"
|
11
|
+
|
12
|
+
module Cathodic
|
13
|
+
class TwitchData
|
14
|
+
attr_accessor :account_name, :online, :thumbnail, :embed, :viewers, :entry_point, :url, :game, :status, :logo, :banner, :stream_name, :chat
|
15
|
+
|
16
|
+
def initialize(url)
|
17
|
+
@entry_point = "https://api.twitch.tv/kraken"
|
18
|
+
@url = url
|
19
|
+
extract_account
|
20
|
+
@query_point = @entry_point + "/streams/" + @account_name
|
21
|
+
extract_data
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def extract_account
|
26
|
+
raise "Bad url" if !@url.include? "twitch.tv"
|
27
|
+
|
28
|
+
regexp = /twitch.tv\/\w*/
|
29
|
+
m = regexp.match @url
|
30
|
+
buff = m.to_s
|
31
|
+
buff.sub! "twitch.tv/", ""
|
32
|
+
@account_name = buff
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_data
|
36
|
+
answer_string = open(@query_point).read
|
37
|
+
parsed_answer = JSON.parse(answer_string)
|
38
|
+
|
39
|
+
if parsed_answer["stream"] == nil
|
40
|
+
@online = false
|
41
|
+
else
|
42
|
+
@online = true
|
43
|
+
stream = parsed_answer.fetch("stream")
|
44
|
+
channel = stream.fetch("channel")
|
45
|
+
|
46
|
+
@thumbnail = Cathodic::Thumbnail.new(stream)
|
47
|
+
@game = stream["game"]
|
48
|
+
@viewers = stream["viewers"]
|
49
|
+
|
50
|
+
@url = channel["url"]
|
51
|
+
@status = channel["status"]
|
52
|
+
@logo = channel["logo"]
|
53
|
+
@banner = channel["banner"]
|
54
|
+
@stream_name = channel["display_name"]
|
55
|
+
|
56
|
+
@embed = "<object type=\"application/x-shockwave-flash\" height=\"360\" width=\"640\" id=\"live_embed_player_flash\" data=\"http://en.twitch.tv/widgets/live_embed_player.swf?channel="+@account_name+"\" bgcolor=\"#000000\"><param name=\"allowFullScreen\" value=\"true\" /><param name=\"allowScriptAccess\" value=\"always\" /><param name=\"allowNetworking\" value=\"all\" /><param name=\"movie\" value=\"http://en.twitch.tv/widgets/live_embed_player.swf\" /><param name=\"flashvars\" value=\"hostname=en.twitch.tv&channel="+@account_name+"&auto_play=true&start_volume=25\" /></object>"
|
57
|
+
@chat_embed = Cathodic::Chat.new(@account_name)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cathodic
|
2
|
+
#The chat class represents the twitch.tv chat, you can fetch the embed code or the pop out chat code and links
|
3
|
+
#Author::Paul Forti
|
4
|
+
#License::MIT
|
5
|
+
#-embed : the url to the embed version of the chat
|
6
|
+
#-popout : the url used to pop out the chat
|
7
|
+
#-emoticons : the hash containing all the serialized emoticons (image url, regexp, etc)
|
8
|
+
#-popout_link : the html link used to pop out the chat
|
9
|
+
class Chat
|
10
|
+
attr_accessor :embed, :popout, :emoticons, :popout_link
|
11
|
+
|
12
|
+
#The constructor needs to be given an account name, most likely the one retrieved from the stream's url
|
13
|
+
#-account_name : the account name of the stream's chat you want to get
|
14
|
+
def initialize(account_name)
|
15
|
+
@account_name = account_name
|
16
|
+
generate_links
|
17
|
+
end
|
18
|
+
|
19
|
+
#This method fetchs the emoticons info about a stream's chat. It takes a lot of CPU, memory and the query is pretty big
|
20
|
+
#Don't use it unless you REALLY need the emoticons
|
21
|
+
def fetch_emoticons
|
22
|
+
query_point = "https://api.twitch.tv/kraken/chat/"+@account_name+"emoticons"
|
23
|
+
@emoticons = open(query_point).read
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def generate_links
|
28
|
+
@embed = "http://twitch.tv/chat/embed?channel="+@account_name
|
29
|
+
@popout = @embed + "&popout_chat=true"
|
30
|
+
@popout_link = "<a href=\""+@popout+"\" target=\"_new\">Pop-Out</a>"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Cathodic
|
2
|
+
#The Thumbnail class represents a twitch thumbnail, you can access any type of thumbnail representing a small preview of the stream any time
|
3
|
+
#Author::Paul Forti
|
4
|
+
#License::MIT
|
5
|
+
#-small : the url to a small thumbnail 80x50
|
6
|
+
#-medium : the url to a medium thumbnail 320x200
|
7
|
+
#-large : the url to a large thumbnail 640x400
|
8
|
+
#-template : the url to a generic thumbnail, you have to replace {width} by the width you want, same goes for {height}
|
9
|
+
#-sized_thumb : nil if sized has not been called, otherwise it's the url to a custom sized thumbnail (the size is defined when calling sized)
|
10
|
+
class Thumbnail
|
11
|
+
attr_accessor :small, :medium, :large, :template, :sized_thumb
|
12
|
+
|
13
|
+
#The constructor needs a hash representing the stream object
|
14
|
+
#Must be fetched from the Twitch.tv API (or have the same structure)
|
15
|
+
#-stream_hash : the hash representing the twitch.tv stream.
|
16
|
+
def initialize(stream_hash)
|
17
|
+
raise "Uncorrect stream hash" if !stream_hash.has_key?("preview")
|
18
|
+
@preview = stream_hash.fetch("preview")
|
19
|
+
extract_thumbnails
|
20
|
+
end
|
21
|
+
|
22
|
+
#Sized generates the url of a stream thumbnail that is width large and height tall
|
23
|
+
#width : The thumbnail's desired width
|
24
|
+
#height : The thumbnail's desired height
|
25
|
+
def sized(width, height)
|
26
|
+
@sized_thumb = @template
|
27
|
+
@sized_thumb.sub! "{width}", width.to_s
|
28
|
+
@sized_thumb.sub! "{height}", height.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
#Extracts the url of the three different sizes of thumbnail, plus the url of a the template (to generate custom sized thumbnails)
|
34
|
+
def extract_thumbnails
|
35
|
+
@small = @preview["small"]
|
36
|
+
@medium = @preview["medium"]
|
37
|
+
@large = @preview["large"]
|
38
|
+
@template = @preview["template"]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/cathodic/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Cathodic
|
2
|
-
VERSION = "0.0
|
3
|
-
end
|
1
|
+
module Cathodic
|
2
|
+
VERSION = "0.1.0"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cathodic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
description: ! "Cathodic helps users retreiving the data from a twitch tv stream,
|
31
47
|
such as the number of viewers, \n a preview thumbnail, the embed
|
32
48
|
code, the status etc from the twitch channel's url"
|
@@ -37,11 +53,14 @@ extensions: []
|
|
37
53
|
extra_rdoc_files: []
|
38
54
|
files:
|
39
55
|
- .gitignore
|
56
|
+
- .travis.yml
|
40
57
|
- Gemfile
|
41
58
|
- Rakefile
|
42
59
|
- Readme.md
|
43
60
|
- cathodic.gemspec
|
44
61
|
- lib/cathodic.rb
|
62
|
+
- lib/cathodic/chat.rb
|
63
|
+
- lib/cathodic/thumbnail.rb
|
45
64
|
- lib/cathodic/version.rb
|
46
65
|
homepage: https://github.com/kustom666/cathodic
|
47
66
|
licenses: []
|
@@ -63,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
82
|
version: '0'
|
64
83
|
requirements: []
|
65
84
|
rubyforge_project: cathodic
|
66
|
-
rubygems_version: 1.8.
|
85
|
+
rubygems_version: 1.8.24
|
67
86
|
signing_key:
|
68
87
|
specification_version: 3
|
69
88
|
summary: Gets a twitch.tv stream's info from the api
|