filmtotaal 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.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ spec/config.yml
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in filmtotaal.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1 @@
1
+ Simple library to talk to the FilmTotaal API (Dutch)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "filmtotaal/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "filmtotaal"
7
+ s.version = Filmtotaal::VERSION
8
+ s.authors = ["Erik van der Wal"]
9
+ s.email = ["erikvdwal@gmail.com"]
10
+ s.homepage = "http://www.erikvdwal.nl/"
11
+ s.summary = %q{Simple library to talk to the FilmTotaal API (Dutch)}
12
+ s.description = %q{Simple library to talk to the FilmTotaal API (Dutch)}
13
+
14
+ s.rubyforge_project = "filmtotaal"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "rspec"
23
+ s.add_runtime_dependency "nokogiri"
24
+ s.add_runtime_dependency "htmlentities"
25
+ end
@@ -0,0 +1,9 @@
1
+ require "filmtotaal/version"
2
+ require "date"
3
+ require "open-uri"
4
+ require "nokogiri"
5
+ require "htmlentities"
6
+
7
+ directory = File.expand_path(File.dirname(__FILE__))
8
+ require File.join(directory, 'filmtotaal', 'client')
9
+ require File.join(directory, 'filmtotaal', 'movie')
@@ -0,0 +1,35 @@
1
+ module Filmtotaal
2
+ class Client
3
+
4
+ def initialize(api_key)
5
+ @api_key = api_key
6
+ end
7
+
8
+ def movies(date)
9
+ self.get({'dag' => date.strftime('%d-%m-%Y'), 'sorteer' => 0})
10
+ end
11
+
12
+ def movie_tips(date)
13
+ self.get({'dag' => date.strftime('%d-%m-%Y'), 'sorteer' => 1})
14
+ end
15
+
16
+ def film_of_the_day(date)
17
+ results = self.get({'dag' => date.strftime('%d-%m-%Y'), 'sorteer' => 2})
18
+ results.first
19
+ end
20
+
21
+ def base_url
22
+ "http://www.filmtotaal.nl/api/filmsoptv.xml"
23
+ end
24
+
25
+ def get(args = "")
26
+ url = base_url + "?apikey=#{@api_key}&" + args.map { |k,v| "#{k}=#{v}" }.join('&')
27
+ doc = Nokogiri::XML(open(url))
28
+ doc.xpath('//filmsoptv/film').map { |m| Movie.new(m, decoder) }
29
+ end
30
+
31
+ def decoder
32
+ @decoder ||= HTMLEntities.new
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ module Filmtotaal
2
+ class Movie
3
+ attr_reader :title, :year, :url, :director, :actors, :genres, :countries, :plot, :tagline, :imdb_id, :imdb_rating, :rating, :votes, :start_time, :end_time, :channel, :runtime, :movie_tip, :cover_url
4
+ def initialize(data, decoder)
5
+ @title = decoder.decode(data.xpath('titel').text)
6
+ @year = data.xpath('jaar').text.to_i
7
+ @url = data.xpath('ft_link').text
8
+ @director = decoder.decode(data.xpath('regisseur').text)
9
+ @actors = decoder.decode(data.xpath('cast').text).split(':')
10
+ @genres = decoder.decode(data.xpath('genres').text).split(':')
11
+ @countries = decoder.decode(data.xpath('land').text).split(':')
12
+ @plot = decoder.decode(data.xpath('synopsis').text)
13
+ @tagline = decoder.decode(data.xpath('tagline').text)
14
+ @rating = data.xpath('ft_rating').text.to_f
15
+ @votes = data.xpath('ft_votes').text.to_i
16
+ @imdb_id = "tt#{data.xpath('imdb_id').text}"
17
+ @imdb_rating = data.xpath('imdb_rating').text.to_f
18
+ @imdb_votes = data.xpath('imdb_votes').text.to_i
19
+ @start_time = data.xpath('starttijd').text.to_i
20
+ @end_time = data.xpath('eindtijd').text.to_i
21
+ @runtime = data.xpath('duur').text.to_i
22
+ @channel = decoder.decode(data.xpath('zender').text)
23
+ @movie_tip = data.xpath('filmtip').text.to_i == 1 ? true : false
24
+ @cover_url = data.xpath('cover').text
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Filmtotaal
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1 @@
1
+ api_key: ""
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe "filmtotaal" do
4
+ before(:all) do
5
+ config = YAML.load_file(File.join(File.dirname(__FILE__), "config.yml"))
6
+ @client = Filmtotaal::Client.new(config['api_key'])
7
+ end
8
+
9
+ describe "movie" do
10
+ it "should return todays movies" do
11
+ movies = @client.movies(Date.today)
12
+ movies.count.should > 0
13
+ movies.first.should be_a(Filmtotaal::Movie)
14
+ movies.first.genres.should be_a(Array)
15
+ movies.first.actors.should be_a(Array)
16
+ movies.first.start_time.should be_a(Integer)
17
+ movies.first.end_time.should be_a(Integer)
18
+ movies.first.runtime.should be_a(Integer)
19
+ end
20
+
21
+ it "should return tomorrows movies" do
22
+ movies = @client.movies(Date.today+1)
23
+ movies.count.should > 0
24
+ movies.first.should be_a(Filmtotaal::Movie)
25
+ movies.first.genres.should be_a(Array)
26
+ movies.first.actors.should be_a(Array)
27
+ movies.first.start_time.should be_a(Integer)
28
+ movies.first.end_time.should be_a(Integer)
29
+ end
30
+
31
+ it "should not return movies after tomorrow" do
32
+ movies = @client.movies(Date.today+2)
33
+ movies.count.should == 0
34
+ end
35
+
36
+ it "should return movie tip for today" do
37
+ movies = @client.movie_tips(Date.today)
38
+ movies.count.should > 0
39
+ movies.first.should be_a(Filmtotaal::Movie)
40
+ end
41
+
42
+ it "should return movie tip for tomorrow" do
43
+ movies = @client.movie_tips(Date.today+1)
44
+ movies.count.should > 0
45
+ movies.first.should be_a(Filmtotaal::Movie)
46
+ end
47
+
48
+ it "should return a film of the day" do
49
+ movie = @client.film_of_the_day(Date.today)
50
+ movie.should be_a(Filmtotaal::Movie)
51
+ end
52
+
53
+ it "should not return a film of the day after tomorrow" do
54
+ movie = @client.film_of_the_day(Date.today+2)
55
+ movie.should be_nil
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,13 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
12
+
13
+ require 'filmtotaal'
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filmtotaal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Erik van der Wal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
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'
46
+ - !ruby/object:Gem::Dependency
47
+ name: htmlentities
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Simple library to talk to the FilmTotaal API (Dutch)
63
+ email:
64
+ - erikvdwal@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - .rspec
71
+ - Gemfile
72
+ - README
73
+ - Rakefile
74
+ - filmtotaal.gemspec
75
+ - lib/filmtotaal.rb
76
+ - lib/filmtotaal/client.rb
77
+ - lib/filmtotaal/movie.rb
78
+ - lib/filmtotaal/version.rb
79
+ - spec/config.yml.default
80
+ - spec/filmtotaal_spec.rb
81
+ - spec/spec_helper.rb
82
+ homepage: http://www.erikvdwal.nl/
83
+ licenses: []
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project: filmtotaal
102
+ rubygems_version: 1.8.24
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Simple library to talk to the FilmTotaal API (Dutch)
106
+ test_files:
107
+ - spec/config.yml.default
108
+ - spec/filmtotaal_spec.rb
109
+ - spec/spec_helper.rb