trendious 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2906af90658cc85c3b8b5921ebf229d95da9e5ff
4
+ data.tar.gz: 4ba8017325c6d46564380ff40b88a9a5104fdf85
5
+ SHA512:
6
+ metadata.gz: 028c5e7e5c733deba674e3b4bbaf690a2b2bff829b581ba3a4b4cdc78e4c318344fc021d842c377b6563e95d522e5a332d86be35e826d7c0bea93e1327e0bd9a
7
+ data.tar.gz: cd88683046a2d0c6f07dd729670b32eb4971fb781ffec541a9705655d9f125fcb0b9c119366b33e4f270f147a34af5ad91c1cfcb9f074a4cb9433239149febdb
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'activesupport'
@@ -0,0 +1,21 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (4.2.4)
5
+ i18n (~> 0.7)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.3, >= 0.3.4)
9
+ tzinfo (~> 1.1)
10
+ i18n (0.7.0)
11
+ json (1.8.3)
12
+ minitest (5.8.1)
13
+ thread_safe (0.3.5)
14
+ tzinfo (1.2.2)
15
+ thread_safe (~> 0.1)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ activesupport
@@ -0,0 +1,81 @@
1
+ ## About Trendious
2
+
3
+ Trendious helps you to get world best reviews from the fans about movies.
4
+
5
+ With the following request
6
+ ```
7
+ trendious -q "Forrest Gump"
8
+ ```
9
+ You should be able to get something similar to this
10
+
11
+ ```
12
+ [0] Forrest Gump!
13
+ [1] Forrest Gump by Cutestreak Designs, 2012.
14
+ [2] 8-Bit Cinema Presents: Forrest Gump
15
+ [3] Forrest Gump Vs The Shawshank Redemption
16
+ [4] Forrest Gump 2: The Maze Runner
17
+ [5] Forrest Gump (1994) movie memories by MovieManCHAD
18
+ [6] Forrest Gump : After credit scene
19
+ [7] 12 Life Lessons Forrest Gump Taught Us
20
+ [8] Celebrate Forrest Gump's 20th Anniversary with an Honest Trailer
21
+ [9] Forrest Gump Gets Another Run With IMAX Release
22
+ ```
23
+
24
+ To read the desired post you can easily access it by the index
25
+
26
+ ```
27
+ trendious -q "Shawshank" -r 0
28
+ ```
29
+
30
+ ```
31
+ The Shawshank Redemption: An emotional masterpiece
32
+ Website link: http://moviepilot.com/reviews/2855793
33
+
34
+ Today I watched The Shawshank Redemption for the first time and I know that this film is considered one of the best films of all time, so my expectations were high to say the least. I wasn't disappointed at all this film is outstanding, so now I'm going to explain that in more detail. There are a ton of positives to this film, which include: a fantastic story, great story progression, great acting and there is a lot of emotion felt for the characters. To expand, the story in this film is fantastic and I was hooked from start to finish; with its 2 and a half hour run time I was afraid it could be slow, however the film had excellent story progression and I wasn't bored for a second. Any film with Morgan Freeman narrating is always good and makes this film even better, finally there is a lot of emotion in this film and in certain moments they are genuinely sad; the emotion in the film is not to the extent of 12 years a slave but it is still great not all films can truly move me. On the side of negatives there aren't any, it is a perfect film. Overall this film is a masterpiece and as I can't find any negatives at all I have to rate this film: 10/10
35
+
36
+ ```
37
+
38
+ To change page of search result you can do it by adding key `-p`
39
+
40
+ ```
41
+ trendious -q "Marvel" -p 3
42
+ ```
43
+
44
+ Other killer feature with this application is to accessing trending, that's from where this application took his name.
45
+
46
+ ```
47
+ trendious -T
48
+ ```
49
+ ```
50
+ [0] Great Directors
51
+ [1] Superheroes
52
+ [2] Oscars
53
+ [3] Pixar Movies
54
+ [4] Hidden Gems
55
+ [5] Sci-Fi Movies
56
+ [6] Comedy Movies
57
+ [7] Zombies
58
+ [8] Action Movies
59
+ ...
60
+ ```
61
+
62
+ To check the trending for the following tag add `-t`
63
+
64
+ ```
65
+ trendious -T -t 2
66
+ ```
67
+
68
+ Here you as well can change the page and read the relevant post with `-r [index]`
69
+
70
+ ```
71
+ [0] The Revenant: The Stage Is Set For Leo's Crowning Glory
72
+ [1] 'The Revenant' Poster and its Sheer Beauty
73
+ [2] August: Osage County: Julia Roberts Gets Meryl Streep to Eat Her Bitchin' Fish
74
+ [3] Why can't Leonardo DiCaprio win an Oscar?
75
+ [4] LEGO Movie Snubbed. Budapest Leading. This Years Oscars Is Full Of Surprises!
76
+ [5] Will This Awesome 'How to Train Your Dragon 2' Making-Of Documentary Ensure The Movie Wins The Oscar?
77
+ [6] "Everything Is Awesome" Was Pretty Awesome Performed Live at the Oscars
78
+ [7] 12 Years a Slave (2013) - Non-Spoiler Review
79
+ [8] Two Jews On The Oscars
80
+ [9] New York Film Festival 2014: Whiplash Movie Review
81
+ ```
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/trendious"
4
+
5
+ Trendious::Application.new.run
@@ -0,0 +1 @@
1
+ require_relative './trendious/all'
@@ -0,0 +1,3 @@
1
+ Dir.entries(File.expand_path('.', File.dirname(__FILE__))).sort.each {|f|
2
+ require File.expand_path("./#{f}", File.dirname(__FILE__)) if f =~ /\.rb/i
3
+ }
@@ -0,0 +1,56 @@
1
+ require 'optparse'
2
+
3
+ module Trendious
4
+ class Application
5
+ def initialize
6
+ @client = Trendious::Client.new
7
+ @options = {}
8
+ end
9
+
10
+ def run
11
+ OptionParser.new do |opts|
12
+ opts.banner = "Usage: trendious [options]"
13
+ opts.on("-q", "--query [String]", String, "Search by name") {|o| @options[:query] = o }
14
+ opts.on("-R", "--read [Integer]", Integer, "Read entry with index") {|o| @options[:read] = o }
15
+ opts.on("-p", "--page [Integer]", Integer, "Select N page") {|o| @options[:page] = o }
16
+ opts.on("-T", "--tags", "Show tags") {|o| @options[:tags] = o }
17
+ opts.on("-t", "--trending [Integer]", Integer, "Select trending by index") {|o| @options[:trending] = o}
18
+ opts.on("-v", "--version", "Display current Trendious version") {|o| @options[:version] = o }
19
+ end.parse!
20
+
21
+ puts output
22
+ end
23
+
24
+ private
25
+
26
+ def tags
27
+ @client.tags.entries
28
+ end
29
+
30
+ def posts
31
+ @client.posts_by_name(@options[:query], @options[:page]).entries
32
+ end
33
+
34
+ def read_entry(entry_by_idx)
35
+ entry = entry_by_idx.read
36
+
37
+ body = entry["body"] || entry["html_body"]
38
+
39
+ entry["title"] + "\n" +
40
+ "Website link: #{entry_by_idx.link}\n\n" +
41
+ body.gsub!(/<.*?>/, " ")
42
+ end
43
+
44
+ def output
45
+ return Trendious::VERSION if @options[:version]
46
+ if @options[:tags]
47
+ return read_entry(tags[@options[:trending]].trending(@options[:page]).entries[@options[:read]]) if @options[:read]
48
+ return tags[@options[:trending]].trending(@options[:page]).entries.each_with_index.map{|p,idx| "[#{idx}] #{p.title}" } if @options[:trending]
49
+ tags.each_with_index.map{|tag, idx| "[#{idx}] #{tag.name}" }
50
+ elsif @options[:query]
51
+ return read_entry(posts[@options[:read]]) if @options[:read]
52
+ posts.each_with_index.map{|p,idx| "[#{idx}] #{p.name}" }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,31 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ module Trendious
6
+ class Client
7
+ def initialize
8
+ end
9
+
10
+ def search(hash = {})
11
+ query = {q: "marvel"}.merge!(hash)
12
+ query = query.map {|k,v| "#{k}=#{v}" }.join("&")
13
+ uri = URI("http://api.moviepilot.com/v3/search?#{query}")
14
+ puts "Request URI: #{uri}"
15
+ Trendious::Search.new Net::HTTP.get(uri)
16
+ end
17
+
18
+ def tags
19
+ Trendious::Tags.new Net::HTTP.get(URI('http://api.moviepilot.com/v4/tags'))
20
+ end
21
+
22
+ def posts_by_name(name, page = 0)
23
+ form_name = name.gsub!(' ', '%20')
24
+ search({q: name, without_type: "user,tag", page: page})
25
+ end
26
+
27
+ def tags_by_name(name, page = 0)
28
+ search({q: name, with_type: "tag", page: page})
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ module Trendious
2
+ class Collection
3
+ def first
4
+ entries.first
5
+ end
6
+
7
+ def last
8
+ entries.last
9
+ end
10
+
11
+ def [] idx
12
+ entries[idx]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Trendious
4
+ class Entry
5
+ attr_reader :entry
6
+
7
+ def initialize hash
8
+ @entry = hash
9
+
10
+ @entry.keys.each do |k|
11
+ self.class.instance_eval do
12
+ define_method(k) do
13
+ @entry[k]
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def link
20
+ URI.join "http://moviepilot.com", type_path, id.to_s
21
+ end
22
+
23
+ def type_path
24
+ "#{type.pluralize}/"
25
+ end
26
+
27
+ def read
28
+ uri = URI.join "http://api.moviepilot.com", "/v4/", type_path, id.to_s
29
+
30
+ JSON.parse(Net::HTTP.get(uri))
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ module Trendious
2
+ class Post < Entry
3
+ end
4
+ end
@@ -0,0 +1,17 @@
1
+ module Trendious
2
+ class Search < Collection
3
+ attr_reader :response
4
+
5
+ def initialize(res)
6
+ @response = JSON.parse(res)
7
+ end
8
+
9
+ def entries
10
+ @response['search'].map {|h| Post.new h }
11
+ end
12
+
13
+ def total
14
+ @response['total']
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Trendious
2
+ class Tag < Entry
3
+ def trending(page = 0)
4
+ @page = page
5
+ fetch('trending')
6
+ end
7
+
8
+ def recent(page = 0)
9
+ @page = page
10
+ fetch('recent')
11
+ end
12
+
13
+ private
14
+
15
+ def fetch(name)
16
+ uri = URI("http://api.moviepilot.com/v4/tags/#{slug}/recent?page=#{@page}")
17
+ puts "Request URI: #{uri}"
18
+ Trendious::Tags.new Net::HTTP.get(uri)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Trendious
2
+ class Tags < Collection
3
+ attr_reader :response
4
+
5
+ def initialize(res)
6
+ @response = JSON.parse(res)
7
+ end
8
+
9
+ def entries
10
+ @response['collection'].map {|h| Tag.new h }
11
+ end
12
+
13
+ def find(name)
14
+ entries.select {|tag| tag.name.downcase.include? name.downcase }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Trendious
2
+ VERSION = '0.1'
3
+ end
@@ -0,0 +1,17 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'trendious/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'trendious'
7
+ s.version = Trendious::VERSION
8
+ s.date = '2015-10-25'
9
+ s.summary = "trendious"
10
+ s.description = "Trendious helps you to get world best reviews from the fans about movies."
11
+ s.authors = ["Viacheslav Rudkovskyi"]
12
+ s.email = 'rrubyist@gmail.com'
13
+ s.files = `git ls-files`.split("\n")
14
+ s.executables = ['trendious']
15
+ s.homepage = 'http://github.com/rubyruby15/trendious'
16
+ s.license = 'MIT'
17
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trendious
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Viacheslav Rudkovskyi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Trendious helps you to get world best reviews from the fans about movies.
14
+ email: rrubyist@gmail.com
15
+ executables:
16
+ - trendious
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - README.md
23
+ - bin/trendious
24
+ - lib/trendious.rb
25
+ - lib/trendious/all.rb
26
+ - lib/trendious/application.rb
27
+ - lib/trendious/client.rb
28
+ - lib/trendious/collection.rb
29
+ - lib/trendious/entry.rb
30
+ - lib/trendious/post.rb
31
+ - lib/trendious/search.rb
32
+ - lib/trendious/tag.rb
33
+ - lib/trendious/tags.rb
34
+ - lib/trendious/version.rb
35
+ - trendious.gemspec
36
+ homepage: http://github.com/rubyruby15/trendious
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.2.2
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: trendious
60
+ test_files: []