tvteka 0.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/README.md +78 -0
- data/lib/tvteka.rb +12 -0
- data/lib/tvteka/channel.rb +17 -0
- data/lib/tvteka/client.rb +37 -0
- data/lib/tvteka/error.rb +9 -0
- data/lib/tvteka/request.rb +68 -0
- data/lib/tvteka/response.rb +46 -0
- data/lib/tvteka/session.rb +19 -0
- data/lib/tvteka/show.rb +17 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 045958c47238b641a9b5f35ab5a508351ff62a6b
|
4
|
+
data.tar.gz: 644205a7d28abd12ddab261c2effcac5cd7e72e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 57558d7324e4fa2ceee91d4cf48043960e15d9600226f7c8c37c4abb81de575be2f198383aa01c0aeffd26f4717fe2288ce76b53e010fb1114702581ad7d6d5d
|
7
|
+
data.tar.gz: 1caf168ecc5cdeab7ddb8d81859e0714d25fff900f1220195e91b271d2bc162024afc84376cb513758ae16862375f80213ebc0d896d78953ae2643fe3c7dd740
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# tvteka
|
2
|
+
|
3
|
+
A native [RubyMotion](http://www.rubymotion.com/) wrapper around the [Tvteka](http://tvteka.com/site/api) API.
|
4
|
+
|
5
|
+
##Installation
|
6
|
+
|
7
|
+
Gemfile
|
8
|
+
```ruby
|
9
|
+
gem 'tvteka'
|
10
|
+
```
|
11
|
+
|
12
|
+
Rakefile
|
13
|
+
``` ruby
|
14
|
+
require 'tvteka'
|
15
|
+
```
|
16
|
+
|
17
|
+
then run bundle install and you should be good to go.
|
18
|
+
|
19
|
+
Tvteka relies on [STHTTPRequest](https://github.com/nst/STHTTPRequest) to run so you'll need to install the neccessary pods.
|
20
|
+
|
21
|
+
```
|
22
|
+
### First get Cocoapods up and running.
|
23
|
+
$ pod setup
|
24
|
+
|
25
|
+
### Now install the needed pods.
|
26
|
+
$ rake pod:install
|
27
|
+
```
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
### Obtain device token
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
Tvteka::Client.register(your_username, your_password) do |response|
|
35
|
+
if response.success?
|
36
|
+
response.data # returns instance of Tvteka::Session with token
|
37
|
+
else
|
38
|
+
response.error
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
### Verify that device token is still valid
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
Tvteka::Client.verify(token) do |response|
|
47
|
+
if response.success?
|
48
|
+
response.data # returns instance of Tvteka::Session with authorized attribute
|
49
|
+
else
|
50
|
+
response.error
|
51
|
+
end
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
### Get list of live channels
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
Tvteka::Client.live(token) do |response|
|
59
|
+
if response.success?
|
60
|
+
response.data # returns array of Tvteka::Channel
|
61
|
+
else
|
62
|
+
response.error
|
63
|
+
end
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
### Get list of shows for single channel
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
Tvteka::Client.live_channel(token) do |response|
|
71
|
+
if response.success?
|
72
|
+
response.data # returns array of Tvteka::Show
|
73
|
+
else
|
74
|
+
response.error
|
75
|
+
end
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
data/lib/tvteka.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
unless defined?(Motion::Project::Config)
|
4
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'motion-cocoapods'
|
8
|
+
|
9
|
+
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
10
|
+
Motion::Project::App.setup do |app|
|
11
|
+
app.files.unshift(Dir.glob(File.join(lib_dir_path, "tvteka/**/*.rb")))
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tvteka
|
2
|
+
class Channel
|
3
|
+
|
4
|
+
attr_accessor :id, :thumb_url, :videostatus, :favourited, :link, :telecast, :width, :button, :logo, :tz_offset, :schedule_date, :streaming_urls, :timezone, :height, :name, :schedule_link
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
params.each do |k, v|
|
8
|
+
self.send("#{k}=", v)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.init_from_array(params_array = [])
|
13
|
+
params_array.map {|params| Tvteka::Channel.new(params)}
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Tvteka
|
2
|
+
class Client
|
3
|
+
def self.session(username, password, options = {}, &block)
|
4
|
+
options = { "session[login]" => username, "session[password]" => password, "device[type]" => "xmbc", "device[id]" => "c0:3d:45:28:fc:ad" }.merge(options)
|
5
|
+
|
6
|
+
request.post("http://tvteka.com/session/register", options) do |response|
|
7
|
+
response.process_data(:session) if response.success?
|
8
|
+
block.call response
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.verify(token, &block)
|
13
|
+
request.post("http://tvteka.com/session/verify", {}, {"deviceToken" => token}) do |response|
|
14
|
+
response.process_data(:verify) if response.success?
|
15
|
+
block.call response
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.live(token, &block)
|
20
|
+
request.get("http://tvteka.tv/live", {}, {"deviceToken" => token}) do |response|
|
21
|
+
response.process_data(:live) if response.success?
|
22
|
+
block.call response
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.live_channel(token, channel, &block)
|
27
|
+
request.get("http://tvteka.tv/live/#{channel}", {}, {"deviceToken" => token}) do |response|
|
28
|
+
response.process_data(:live_channel) if response.success?
|
29
|
+
block.call response
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.request
|
34
|
+
Tvteka::Request.new
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/tvteka/error.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
module Tvteka
|
2
|
+
class Request
|
3
|
+
|
4
|
+
BASE_URL = ""
|
5
|
+
|
6
|
+
def get(url, params = {}, cookies = {}, &block)
|
7
|
+
r = STHTTPRequest.requestWithURLString(url)
|
8
|
+
|
9
|
+
r.setHeaderWithName("Accept", value: "application/vnd.tvp.xbmc+json")
|
10
|
+
|
11
|
+
r.completionBlock = Proc.new do |header, body|
|
12
|
+
block.call response.build_with_result(body)
|
13
|
+
end
|
14
|
+
|
15
|
+
r.errorBlock = Proc.new do |error|
|
16
|
+
puts error.inspect
|
17
|
+
block.call response.build_with_error(error)
|
18
|
+
end
|
19
|
+
|
20
|
+
cookies.each do |k, v|
|
21
|
+
r.addCookieWithName(k, value: v)
|
22
|
+
end
|
23
|
+
|
24
|
+
r.startAsynchronous
|
25
|
+
end
|
26
|
+
|
27
|
+
def post(url, params = {}, cookies = {}, &block)
|
28
|
+
r = STHTTPRequest.requestWithURLString(url)
|
29
|
+
|
30
|
+
r.setHeaderWithName("Accept", value: "application/vnd.tvp.xbmc+json")
|
31
|
+
|
32
|
+
r.POSTDictionary = params
|
33
|
+
|
34
|
+
r.completionBlock = Proc.new do |header, body|
|
35
|
+
block.call response.build_with_result(body)
|
36
|
+
end
|
37
|
+
|
38
|
+
r.errorBlock = Proc.new do |error|
|
39
|
+
puts error.inspect
|
40
|
+
block.call response.build_with_error(error)
|
41
|
+
end
|
42
|
+
|
43
|
+
cookies.each do |k, v|
|
44
|
+
r.addCookieWithName(k, value: v)
|
45
|
+
end
|
46
|
+
|
47
|
+
r.startAsynchronous
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
def http_client
|
53
|
+
AFMotion::SessionClient.build_shared("http://tvteka.com") do
|
54
|
+
session_configuration :default
|
55
|
+
header "Accept", "application/json"
|
56
|
+
response_serializer :json
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def response
|
61
|
+
Tvteka::Response
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_options(options)
|
65
|
+
{}.merge(options)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Tvteka
|
2
|
+
class Response
|
3
|
+
def self.build_with_result(result)
|
4
|
+
response = self.new
|
5
|
+
|
6
|
+
response.success = true
|
7
|
+
response.json = result
|
8
|
+
|
9
|
+
response
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.build_with_error(error)
|
13
|
+
response = self.new
|
14
|
+
|
15
|
+
response.success = false
|
16
|
+
response.error = Tvteka::Error.new(error)
|
17
|
+
|
18
|
+
response
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_accessor :data, :json, :success, :error
|
22
|
+
|
23
|
+
def process_data(type = :default)
|
24
|
+
if type == :session
|
25
|
+
parsed_data = NSJSONSerialization.JSONObjectWithData(String(self.json).dataUsingEncoding(NSUnicodeStringEncoding), options:0, error: Pointer.new(:object))
|
26
|
+
self.data = Tvteka::Session.new(parsed_data)
|
27
|
+
elsif type == :verify
|
28
|
+
parsed_data = NSJSONSerialization.JSONObjectWithData(String(self.json).dataUsingEncoding(NSUnicodeStringEncoding), options:0, error: Pointer.new(:object))
|
29
|
+
self.data = Tvteka::Session.new(parsed_data)
|
30
|
+
elsif type == :live
|
31
|
+
parsed_data = NSJSONSerialization.JSONObjectWithData(String(self.json).dataUsingEncoding(NSUnicodeStringEncoding), options:0, error: Pointer.new(:object))
|
32
|
+
self.data = Tvteka::Channel.init_from_array(parsed_data)
|
33
|
+
elsif type == :live_channel
|
34
|
+
parsed_data = NSJSONSerialization.JSONObjectWithData(String(self.json).dataUsingEncoding(NSUnicodeStringEncoding), options:0, error: Pointer.new(:object))
|
35
|
+
self.data = Tvteka::Show.init_from_array(parsed_data)
|
36
|
+
else
|
37
|
+
self.data = self.json
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def success?
|
42
|
+
@success
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Tvteka
|
2
|
+
|
3
|
+
class Session
|
4
|
+
|
5
|
+
attr_accessor :device_type_id, :device_id, :token, :created_at, :authorized, :subscription_active, :stb_active, :user_id, :user_timezone, :user_tz_offset, :display_name
|
6
|
+
|
7
|
+
def initialize(params = {})
|
8
|
+
params.each do |k, v|
|
9
|
+
self.send("#{k}=", v)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def authorized?
|
14
|
+
authorized
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/tvteka/show.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tvteka
|
2
|
+
class Show
|
3
|
+
|
4
|
+
attr_accessor :id, :description, :beginning, :beginning_str, :avail, :ending_str, :ended, :link, :beginning_real, :videostatus, :ending, :title, :ending_real, :width, :height, :streaming_urls, :thumb_url
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
params.each do |k, v|
|
8
|
+
self.send("#{k}=", v)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.init_from_array(params_array = [])
|
13
|
+
params_array.map {|params| Tvteka::Show.new(params)}
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tvteka
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aleksandr Lossenko
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: motion-cocoapods
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.7.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.7.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Rubymotion API wrapper for tvteka.com
|
42
|
+
email:
|
43
|
+
- aleksandr@byteflip.de
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- README.md
|
49
|
+
- lib/tvteka.rb
|
50
|
+
- lib/tvteka/channel.rb
|
51
|
+
- lib/tvteka/client.rb
|
52
|
+
- lib/tvteka/error.rb
|
53
|
+
- lib/tvteka/request.rb
|
54
|
+
- lib/tvteka/response.rb
|
55
|
+
- lib/tvteka/session.rb
|
56
|
+
- lib/tvteka/show.rb
|
57
|
+
homepage: https://bitbucket.org/egze/tvteka/
|
58
|
+
licenses:
|
59
|
+
- MIT
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.4.5.1
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: Rubymotion API wrapper for tvteka.com
|
81
|
+
test_files: []
|