canistreamit 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21c119c8b36aacceaaa3cd0979a50fddf0ecea5b
4
- data.tar.gz: e785faa36285750a56d7d3da87740de5da0250f5
3
+ metadata.gz: c2f20944e9342cf9b1b058624c112561b85a34bc
4
+ data.tar.gz: 97b18d5a4947a699b90339ce60890a91dff95568
5
5
  SHA512:
6
- metadata.gz: 22b5b595637ead0d7101ef0566f4fbf41a10210e7ceda82bd5738a3a6c23f660e1d7f3becac2ee2bf25b8d410909d67cf16450c0aae3496c1a8a0b882f0bc25f
7
- data.tar.gz: 5644b7a4bfe63ca7ec767babb63d1b95858d06b336265b12e7e7e4bd4cef970cb32985e114beb831bf28de0b839c61831f01288f98eefa49d50d52958ce7df4d
6
+ metadata.gz: 7c2a14a9a3ba67ee0363ad3bb5bcca93bcc99ebbe2f2059ad05bf03b43b918c0c978646b11c729e5b646ca6a4bbcaea68609515814e1ae17ca3fb56ad873a94f
7
+ data.tar.gz: 5f146fb0df6a7af94053fee0dc27676525e724052e7931b624e725e1a17be122db1de7856ec35d4a94d5bbfd9ebea1d7aa4966de060be9899d3f4c41df87fa54
data/README.md CHANGED
@@ -24,13 +24,13 @@ $ gem install canistreamit
24
24
 
25
25
  ## Usage
26
26
 
27
- Create a new client:
27
+ ### Create a new client
28
28
 
29
29
  ```ruby
30
30
  client = Canistreamit::Client.new
31
31
  ```
32
32
 
33
- Search for movies by title:
33
+ ### Search for movies by title
34
34
 
35
35
  ```ruby
36
36
  client.search("Everything is Illuminated")
@@ -49,49 +49,117 @@ client.search("Everything is Illuminated")
49
49
  "http://www.canistream.it/search/movie/4ebdd5f9f5f807716100001b/everything-is-illuminated"}}]
50
50
  ```
51
51
 
52
- Query canistream.it by movie id and media type:
52
+ ### Query canistream.it by movie id and media type
53
53
 
54
54
  ```ruby
55
- client.query("4ebdd5f9f5f807716100001b", "rental")
56
- => {"apple_itunes_rental"=>
57
- {"url"=>"http://www.canistream.it/link/go/4f33decdf5f8073e10000025",
58
- "price"=>3.99,
59
- "external_id"=>293314469,
60
- "date_checked"=>1391095519,
61
- "direct_url"=>
62
- "http://click.linksynergy.com/fs-bin/click?id=g0LjNrUM/ms&subid=&offerid=146261.1&type=10&tmpid=3909&RD_PARM1=https%3A%2F%2Fitunes.apple.com%2Fus%2Fmovie%2Feverything-is-illuminated%2Fid293314469%3Fuo%3D4",
63
- "time"=>0,
64
- "friendlyName"=>"Apple iTunes Rental",
65
- "cache"=>true},
66
- "youtube_rental"=>
67
- {"url"=>"http://www.canistream.it/link/go/4f33decdf5f8073e10000027",
68
- "price"=>"1.99",
69
- "external_id"=>"KdHNp9FPGG8",
70
- "date_checked"=>1391118942,
71
- "direct_url"=>
72
- "http://www.youtube.com/watch?v=KdHNp9FPGG8&feature=youtube_gdata_player",
73
- "time"=>0,
74
- "friendlyName"=>"Youtube Rental",
75
- "cache"=>true},
76
- "android_rental"=>
77
- {"url"=>"http://www.canistream.it/link/go/4f47c662f5f8076d43000001",
78
- "price"=>1.99,
79
- "external_id"=>"movie-KdHNp9FPGG8",
80
- "date_checked"=>1391095520,
81
- "direct_url"=>
82
- "https://play.google.com/store/movies/details/Everything_is_Illuminated?id=KdHNp9FPGG8",
83
- "time"=>0,
84
- "friendlyName"=>"Google Play Rental",
85
- "cache"=>true}
55
+ client.query("4ebdd5f9f5f807716100001b", ["rental", "streaming"])
56
+ => {"rental"=>
57
+ {"apple_itunes_rental"=>
58
+ {"url"=>"http://www.canistream.it/link/go/4f33decdf5f8073e10000025",
59
+ "price"=>3.99,
60
+ "external_id"=>293314469,
61
+ "date_checked"=>1391095519,
62
+ "direct_url"=>
63
+ "http://click.linksynergy.com/fs-bin/click?id=g0LjNrUM/ms&subid=&offerid=146261.1&type=10&tmpid=3909&RD_PARM1=https%3A%2F%2Fitunes.apple.com%2Fus%2Fmovie%2Feverything-is-illuminated%2Fid293314469%3Fuo%3D4",
64
+ "time"=>0,
65
+ "friendlyName"=>"Apple iTunes Rental",
66
+ "cache"=>true},
67
+ "android_rental"=>
68
+ {"url"=>"http://www.canistream.it/link/go/4f47c662f5f8076d43000001",
69
+ "price"=>1.99,
70
+ "external_id"=>"movie-KdHNp9FPGG8",
71
+ "date_checked"=>1391095520,
72
+ "direct_url"=>
73
+ "https://play.google.com/store/movies/details/Everything_is_Illuminated?id=KdHNp9FPGG8",
74
+ "time"=>0,
75
+ "friendlyName"=>"Google Play Rental",
76
+ "cache"=>true}},
77
+ "streaming"=>
78
+ {"hitbliss_streaming"=>
79
+ {"url"=>"http://www.canistream.it/link/go/5297e955f5f807dd7fb627bf",
80
+ "price"=>0,
81
+ "external_id"=>
82
+ "http://www.hitbliss.com/movies/Everything-Is-Illuminated.html?utm_source=canistreamit&utm_medium=feed&utm_campaign=tv-movies",
83
+ "date_checked"=>1391095487,
84
+ "direct_url"=>
85
+ "http://www.hitbliss.com/movies/Everything-Is-Illuminated.html?utm_source=canistreamit&utm_medium=feed&utm_campaign=tv-movies",
86
+ "time"=>0,
87
+ "friendlyName"=>"Hitbliss Streaming",
88
+ "cache"=>true}}}
86
89
  ```
87
90
 
88
91
  Available media types:
89
- - streaming
92
+ - streaming (default)
90
93
  - rental
91
94
  - purchase
92
95
  - dvd
93
96
  - xfinity
94
97
 
98
+ Because each media type will result in one slow request to canistream.it API,
99
+ avoid including more types than you care for.
100
+
101
+ ### Query canistream.it for all search results at once
102
+
103
+ ```ruby
104
+ client.search_and_query("die hard", ["rental", "streaming"])
105
+ => [{"movie"=>
106
+ {"actors"=>"Bruce Willis, Justin Long, Timothy Olyphant",
107
+ "year"=>2007,
108
+ "description"=>"",
109
+ "title"=>"Live Free or Die Hard",
110
+ "image"=>"http://content8.flixster.com/movie/10/93/34/10933482_det.jpg",
111
+ "rating"=>4.05,
112
+ "_id"=>"4e65e608f5f8073663000000",
113
+ "links"=>
114
+ {"imdb"=>"http://www.imdb.com/title/tt0337978/",
115
+ "rottentomatoes"=>
116
+ "http://www.rottentomatoes.com/m/live_free_or_die_hard/",
117
+ "shortUrl"=>
118
+ "http://www.canistream.it/search/movie/4e65e608f5f8073663000000/live-free-or-die-hard"}},
119
+ "availability"=>
120
+ {"rental"=>
121
+ {"apple_itunes_rental"=>
122
+ {"url"=>"http://www.canistream.it/link/go/4f1ba3dcf5f807036000006f",
123
+ "price"=>2.99,
124
+ "external_id"=>279609666,
125
+ "date_checked"=>1391065570,
126
+ "direct_url"=>
127
+ "http://click.linksynergy.com/fs-bin/click?id=g0LjNrUM/ms&subid=&offerid=146261.1&type=10&tmpid=3909&RD_PARM1=https%3A%2F%2Fitunes.apple.com%2Fus%2Fmovie%2Flive-free-or-die-hard-unrated%2Fid279609666%3Fuo%3D4",
128
+ "time"=>0,
129
+ "friendlyName"=>"Apple iTunes Rental",
130
+ "cache"=>true},
131
+ "youtube_rental"=>
132
+ {"url"=>"http://www.canistream.it/link/go/5096bb04f5f807d313000008",
133
+ "price"=>"2.99",
134
+ "external_id"=>"WXPPz8-6IOk",
135
+ "date_checked"=>1391065568,
136
+ "direct_url"=>
137
+ "http://www.youtube.com/watch?v=WXPPz8-6IOk&feature=youtube_gdata_player",
138
+ "time"=>0,
139
+ "friendlyName"=>"Youtube Rental",
140
+ "cache"=>true}},
141
+ "streaming"=>
142
+ {"hitbliss_streaming"=>
143
+ {"url"=>"http://www.canistream.it/link/go/528f9102f5f807fb39579006",
144
+ "price"=>0,
145
+ "external_id"=>
146
+ "http://www.hitbliss.com/movies/Live-Free-or-Die-Hard.html?utm_source=canistreamit&utm_medium=feed&utm_campaign=tv-movies",
147
+ "date_checked"=>1391065571,
148
+ "direct_url"=>
149
+ "http://www.hitbliss.com/movies/Live-Free-or-Die-Hard.html?utm_source=canistreamit&utm_medium=feed&utm_campaign=tv-movies",
150
+ "time"=>0,
151
+ "friendlyName"=>"Hitbliss Streaming",
152
+ "cache"=>true}}}}]
153
+ ```
154
+
155
+ Because this is pretty heavy on canistream.it API,
156
+ `search_and_query` only queries for the first search result by default.
157
+ You can set your own limit with a third parameter, but be responsible:
158
+
159
+ ```ruby
160
+ client.search_and_query("die hard", "rental", 5)
161
+ ```
162
+
95
163
  ## Contributing
96
164
 
97
165
  1. Fork it (http://github.com/KevinBongart/canistreamit/fork)
@@ -9,7 +9,9 @@ module Canistreamit
9
9
 
10
10
  base_uri Configuration::DEFAULT_ENDPOINT
11
11
 
12
- def initialize(options={})
12
+ VALID_MEDIA_TYPES = ["streaming", "rental", "purchase", "dvd", "xfinity"].freeze
13
+
14
+ def initialize(options = {})
13
15
  # Merge the config values from the module and those passed
14
16
  # to the client.
15
17
  merged_options = Canistreamit.options.merge(options)
@@ -26,14 +28,51 @@ module Canistreamit
26
28
  response.parsed_response
27
29
  end
28
30
 
29
- def query(movie_id, media_type)
30
- response = self.class.get "/query", query: {
31
- movieId: movie_id,
32
- attributes: '1',
33
- mediaType: media_type
34
- }
31
+ def query(movie_id, media_types = "streaming")
32
+ media_types = array_of_unique_elements(media_types)
33
+ return unless valid_media_types?(media_types)
35
34
 
36
- response.parsed_response
35
+ result = {}
36
+
37
+ media_types.each do |media_type|
38
+ response = self.class.get "/query", query: {
39
+ movieId: movie_id,
40
+ attributes: '1',
41
+ mediaType: media_type
42
+ }
43
+
44
+ result[media_type] = response.parsed_response
45
+ end
46
+
47
+ result
48
+ end
49
+
50
+ def search_and_query(movie_name, media_types = "streaming", limit = 1)
51
+ media_types = array_of_unique_elements(media_types)
52
+ return unless valid_media_types?(media_types)
53
+
54
+ response = search(movie_name)
55
+
56
+ if response.any?
57
+ response.first(limit).map do |movie|
58
+ {
59
+ "movie" => movie,
60
+ "availability" => query(movie["_id"], media_types)
61
+ }
62
+ end
63
+ else
64
+ response
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def array_of_unique_elements(array_or_element)
71
+ Array(array_or_element).uniq
72
+ end
73
+
74
+ def valid_media_types?(media_types)
75
+ (media_types - VALID_MEDIA_TYPES).empty?
37
76
  end
38
77
  end
39
78
  end
@@ -1,3 +1,3 @@
1
1
  module Canistreamit
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canistreamit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Bongart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2014-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty