tinby 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36b49f32f7022796fed5581698dc0b4cf3ada62332b2377e0780449f4a000938
4
- data.tar.gz: a5f69ecc760dd107316a76d10b95e61a443f92f5e68ff6cba679635b900e3de6
3
+ metadata.gz: 2659d0ea572088178f2e7faa8903e700e3f4427b341e1f6a33782a2a830fd853
4
+ data.tar.gz: 9ff4aeb6612100d5ef197889bb12506b7d31d0980c8892405c7542425627119a
5
5
  SHA512:
6
- metadata.gz: 45ed334dea009b8b1f6ed1cd6c9d5df6627704d461410e748d52acd83bfdd773f70f647f7e83d14f0a34445cd00c9efb750e6fb2bb799efb1f29e393d80fa1ab
7
- data.tar.gz: 4aaca723ce65e094529c6c72b4bf4f2c38d51eeaf923bf3ad7c2aff9d06647fe421349a5f4798c8e0edcca6466126019d65e9913c0861532b6d9e39d4aae3f2f
6
+ metadata.gz: be93f24857461c155a9e980d01a5f942dd9ce5b9f6f0dc2fba959ed87111847be21be0c1b7a5a8c105d2ab23757d5e42c67f6e4a21e88f2f29b05e8f223b7db5
7
+ data.tar.gz: b7ab7ae3ca22715418b79f2b39a5c31e2ca05f6bafd55a184b93e331b7dc3f384fefa2c0c16af696c323d1f53364562178c8a0b50e94dba4fcefce4ced77a7c8
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in tinby.gemspec
6
6
  gemspec
@@ -1,12 +1,50 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tinby (0.1.0)
4
+ tinby (0.1.1)
5
+ faraday (~> 0)
6
+ faraday_middleware (~> 0)
7
+ json (~> 2.1)
8
+ selenium-webdriver (~> 3.13)
9
+ tinder_auth_fetcher (~> 0)
5
10
 
6
11
  GEM
7
12
  remote: https://rubygems.org/
8
13
  specs:
14
+ childprocess (0.9.0)
15
+ ffi (~> 1.0, >= 1.0.11)
16
+ connection_pool (2.2.2)
9
17
  diff-lcs (1.3)
18
+ domain_name (0.5.20180417)
19
+ unf (>= 0.0.5, < 1.0.0)
20
+ faraday (0.15.2)
21
+ multipart-post (>= 1.2, < 3)
22
+ faraday_middleware (0.12.2)
23
+ faraday (>= 0.7.4, < 1.0)
24
+ ffi (1.9.25)
25
+ http-cookie (1.0.3)
26
+ domain_name (~> 0.5)
27
+ json (2.1.0)
28
+ mechanize (2.7.6)
29
+ domain_name (~> 0.5, >= 0.5.1)
30
+ http-cookie (~> 1.0)
31
+ mime-types (>= 1.17.2)
32
+ net-http-digest_auth (~> 1.1, >= 1.1.1)
33
+ net-http-persistent (>= 2.5.2)
34
+ nokogiri (~> 1.6)
35
+ ntlm-http (~> 0.1, >= 0.1.1)
36
+ webrobots (>= 0.0.9, < 0.2)
37
+ mime-types (3.1)
38
+ mime-types-data (~> 3.2015)
39
+ mime-types-data (3.2016.0521)
40
+ mini_portile2 (2.3.0)
41
+ multipart-post (2.0.0)
42
+ net-http-digest_auth (1.4.1)
43
+ net-http-persistent (3.0.0)
44
+ connection_pool (~> 2.2)
45
+ nokogiri (1.8.4)
46
+ mini_portile2 (~> 2.3.0)
47
+ ntlm-http (0.1.1)
10
48
  rake (10.5.0)
11
49
  rspec (3.7.0)
12
50
  rspec-core (~> 3.7.0)
@@ -21,6 +59,16 @@ GEM
21
59
  diff-lcs (>= 1.2.0, < 2.0)
22
60
  rspec-support (~> 3.7.0)
23
61
  rspec-support (3.7.1)
62
+ rubyzip (1.2.1)
63
+ selenium-webdriver (3.13.1)
64
+ childprocess (~> 0.5)
65
+ rubyzip (~> 1.2)
66
+ tinder_auth_fetcher (0.1.0)
67
+ mechanize (~> 2.0)
68
+ unf (0.1.4)
69
+ unf_ext
70
+ unf_ext (0.0.7.5)
71
+ webrobots (0.1.2)
24
72
 
25
73
  PLATFORMS
26
74
  ruby
data/README.md CHANGED
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ TODO: WIP
26
26
 
27
27
  ## Development
28
28
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "tinby"
3
+ require 'bundler/setup'
4
+ require 'tinby'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "tinby"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
@@ -1,7 +1 @@
1
- require "tinby/version"
2
-
3
- module Tinby
4
- def self.greet
5
- 'Hello World!'
6
- end
7
- end
1
+ Gem.find_files('tinby/**/*.rb').each { |file| require file }
@@ -0,0 +1,95 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'tinder_auth_fetcher'
4
+
5
+ module Tinby
6
+ class Client
7
+ class Unauthorized < StandardError; end
8
+ TINDER_API_URL = 'https://api.gotinder.com'.freeze
9
+ CONNECTION_USER_AGENT = 'Tinder/7.5.3 (iPhone; iOS 10.3.2; Scale/2.00)'.freeze
10
+
11
+ attr_reader :connection, :email, :password, :facebook
12
+ attr_accessor :logined
13
+
14
+ def initialize(email, password, profile_url)
15
+ @email = email
16
+ @password = password
17
+ @facebook = Tinby::Facebook.new(profile_url)
18
+ @logined = false
19
+ build_tinder_connection
20
+ end
21
+
22
+ def profile
23
+ sign_in unless login?
24
+ response = connection.get('profile').body
25
+ raise Unauthorized if response == 'Unauthorized'
26
+ JSON.parse(response, symbolize_names: true)
27
+ end
28
+
29
+ def recommended_users
30
+ sign_in unless login?
31
+ response = connection.post('user/recs').body
32
+ raise Unauthorized if response == 'Unauthorized'
33
+ results = JSON.parse(response)['results']
34
+ users = results.reject { |r| r['name'] == 'Tinder Team' } if results
35
+ users || []
36
+ end
37
+
38
+ def matches
39
+ sign_in unless login?
40
+ response = connection.post('updates', last_activity_date: '').body
41
+ response ? JSON.parse(response) : []
42
+ end
43
+
44
+ def like(user_id)
45
+ sign_in unless login?
46
+ connection.get("like/#{user_id}")
47
+ end
48
+
49
+ def dislike(user_id)
50
+ sign_in unless login?
51
+ connection.get("pass/#{user_id}")
52
+ end
53
+
54
+ def send_message(user_id, message)
55
+ sign_in unless login?
56
+ connection.post("user/matches/#{user_id}", message: message)
57
+ end
58
+
59
+ private
60
+
61
+ def sign_in
62
+ connection.token_auth(tinder_authentication_token)
63
+ connection.headers['X-Auth-Token'] = tinder_authentication_token
64
+ logined = true
65
+ end
66
+
67
+ def login?
68
+ logined
69
+ end
70
+
71
+ def tinder_authentication_token
72
+ @tinder_authentication_token ||= JSON.parse(auth_request)['token']
73
+ end
74
+
75
+ def auth_request
76
+ connection.post('/auth', facebook_token: facebook_authentication_token, facebook_id: facebook_user_id).body
77
+ end
78
+
79
+ def build_tinder_connection
80
+ @connection = Faraday.new(url: TINDER_API_URL) do |faraday|
81
+ faraday.request :json
82
+ faraday.adapter Faraday.default_adapter
83
+ end
84
+ connection.headers[:user_agent] = CONNECTION_USER_AGENT
85
+ end
86
+
87
+ def facebook_authentication_token
88
+ TinderAuthFetcher.fetch_token(email, password)
89
+ end
90
+
91
+ def facebook_user_id
92
+ facebook.fetch_facebook_id
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,44 @@
1
+ require 'selenium-webdriver'
2
+ module Tinby
3
+ class Facebook
4
+ FIND_FACEBOOK_ID_URL = 'https://findmyfbid.com'.freeze
5
+
6
+ attr_reader :driver, :profile_url
7
+
8
+ def initialize(profile_url)
9
+ @profile_url = profile_url
10
+ @driver = initialize_selenium_driver
11
+ end
12
+
13
+ def fetch_facebook_id
14
+ open_findfbid
15
+ fill_in_user_profile_url
16
+ submit
17
+ find_facebook_id
18
+ end
19
+
20
+ private
21
+
22
+ def initialize_selenium_driver
23
+ options = Selenium::WebDriver::Chrome::Options.new
24
+ options.add_argument('--headless')
25
+ Selenium::WebDriver.for :chrome, options: options
26
+ end
27
+
28
+ def open_findfbid
29
+ driver.get(FIND_FACEBOOK_ID_URL)
30
+ end
31
+
32
+ def fill_in_user_profile_url
33
+ driver.find_element(:name, 'url').send_keys(profile_url)
34
+ end
35
+
36
+ def submit
37
+ driver.find_element(:class, 'btn').click
38
+ end
39
+
40
+ def find_facebook_id
41
+ driver.find_element(:tag_name, 'code').text
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Tinby
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.1'.freeze
3
3
  end
@@ -1,29 +1,34 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "tinby/version"
3
+ require 'tinby/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "tinby"
6
+ spec.name = 'tinby'
8
7
  spec.version = Tinby::VERSION
9
- spec.authors = ["joe"]
10
- spec.email = ["kinjoyuji@gmail.com"]
8
+ spec.authors = ['joe']
9
+ spec.email = ['kinjoyuji@gmail.com']
11
10
 
12
- spec.summary = %q{this is tinder api wrapper. we can fetch and post to tinder.}
13
- spec.description = %q{this is tinder api wrapper. we can fetch and post to tinder.}
14
- spec.homepage = "https://github.com/Cam1no/tinby.git"
15
- spec.license = "MIT"
11
+ spec.summary = 'this is tinder api wrapper. we can fetch and post to tinder.'
12
+ spec.description = 'this is tinder api wrapper. we can fetch and post to tinder.'
13
+ spec.homepage = 'https://github.com/Cam1no/tinby.git'
14
+ spec.license = 'MIT'
16
15
 
17
16
  # Specify which files should be added to the gem when it is released.
18
17
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
20
  end
22
- spec.bindir = "exe"
21
+ spec.bindir = 'exe'
23
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.16'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.0'
25
28
 
26
- spec.add_development_dependency "bundler", "~> 1.16"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_dependency 'faraday', '~> 0'
30
+ spec.add_dependency 'faraday_middleware', '~> 0'
31
+ spec.add_dependency 'json', '~> 2.1'
32
+ spec.add_dependency 'selenium-webdriver', '~> 3.13'
33
+ spec.add_dependency 'tinder_auth_fetcher', '~> 0'
29
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tinby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - joe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-22 00:00:00.000000000 Z
11
+ date: 2018-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,76 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday_middleware
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: selenium-webdriver
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.13'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.13'
111
+ - !ruby/object:Gem::Dependency
112
+ name: tinder_auth_fetcher
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
55
125
  description: this is tinder api wrapper. we can fetch and post to tinder.
56
126
  email:
57
127
  - kinjoyuji@gmail.com
@@ -71,6 +141,8 @@ files:
71
141
  - bin/console
72
142
  - bin/setup
73
143
  - lib/tinby.rb
144
+ - lib/tinby/client.rb
145
+ - lib/tinby/facebook.rb
74
146
  - lib/tinby/version.rb
75
147
  - tinby.gemspec
76
148
  homepage: https://github.com/Cam1no/tinby.git