pintrest-api 0.0.0 → 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 +4 -4
- data/README.md +7 -0
- data/lib/pintrest_api/authentication.rb +20 -0
- data/lib/pintrest_api/board.rb +18 -10
- data/lib/pintrest_api/core.rb +6 -1
- data/lib/pintrest_api/pin.rb +14 -4
- data/lib/pintrest_api.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a0f080f36ba8229716e7e6c45a00ef4d67123ec
|
4
|
+
data.tar.gz: 43758be273a671357e625976080848b939fee6a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7eb36e855ef82fc21f5bbed3aacf055d05f10e6aa1d46c185c718005f96de46c2a01536c2abf4a22754da89cf21fb89502fcb064193b5702b0d4904026b07ce2
|
7
|
+
data.tar.gz: ee877ed84cd1ef5f2e20616f5413747615281cd6a7a00eb1bb99d4b528510f1b85f3ffdd3b39cea0a43a4998c80a254bfb33c7742e5e54d9f8fb227839259e71
|
data/README.md
CHANGED
@@ -3,3 +3,10 @@ Pintrest Api
|
|
3
3
|
|
4
4
|
An api in ruby for pulling pintrest pins. It is not very fast due to the fact
|
5
5
|
that you must use capybara to parse the page.
|
6
|
+
|
7
|
+
This is still not fully working and getting individual pins from boards don't work
|
8
|
+
|
9
|
+
### Warning
|
10
|
+
Certain issues require you to login first (getting more then 50 pins per board)
|
11
|
+
To do this when calling anything to do with pins you can pass in
|
12
|
+
`email: <email>, password: <password>` as a last parameter.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PintrestApi
|
2
|
+
# Pintrest Boards this is used to fetch boards and related pins
|
3
|
+
module Authentication
|
4
|
+
EMAIL_INPUT_CSS = '.loginUsername input'
|
5
|
+
PASSWORD_INPUT_CSS = '.loginPassword input'
|
6
|
+
LOGIN_PAGE_BUTTON_CSS = '.formFooter .formFooterButtons'
|
7
|
+
PINTREST_LOGIN_URL = 'https://www.pinterest.com/login/'
|
8
|
+
|
9
|
+
def login(authentication)
|
10
|
+
visit PINTREST_LOGIN_URL
|
11
|
+
|
12
|
+
@session.find(EMAIL_INPUT_CSS).set authentication[:email]
|
13
|
+
@session.find(PASSWORD_INPUT_CSS).set authentication[:password]
|
14
|
+
click LOGIN_PAGE_BUTTON_CSS
|
15
|
+
|
16
|
+
sleep 5
|
17
|
+
puts 'Finished logging in'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/pintrest_api/board.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
module PintrestApi
|
2
2
|
# Pintrest Boards this is used to fetch boards and related pins
|
3
3
|
class Board < Core
|
4
|
-
attr_reader :title, :
|
4
|
+
attr_reader :title, :url, :pin_count
|
5
5
|
|
6
|
-
PINTREST_URL
|
6
|
+
PINTREST_URL = 'http://www.pintrest.com/'
|
7
|
+
BOARD_PIN_COUNT_CSS = '.PinCount'
|
8
|
+
BOARD_LINK_CSS = '.boardLinkWrapper'
|
9
|
+
BOARD_TITLE_CSS = 'h3.boardName .title'
|
10
|
+
BOARD_ITEM_CSS = '.GridItems > .item'
|
7
11
|
|
8
12
|
##
|
9
13
|
# Get a instance of a board
|
@@ -18,10 +22,14 @@ module PintrestApi
|
|
18
22
|
# PintrestApi::Board.new('Yummy Pins', 'http://pintrest.com/mikaak/yummy-pins', 38)
|
19
23
|
def initialize(title, board_url, pin_count)
|
20
24
|
@title = title
|
21
|
-
@
|
25
|
+
@url = board_url
|
22
26
|
@pin_count = pin_count
|
23
27
|
end
|
24
28
|
|
29
|
+
def pins
|
30
|
+
Pin.get_for_board(self)
|
31
|
+
end
|
32
|
+
|
25
33
|
class << self
|
26
34
|
##
|
27
35
|
# Gets all boards from a user
|
@@ -34,7 +42,7 @@ module PintrestApi
|
|
34
42
|
# PintrestApi::Board.all('mikakalathil')
|
35
43
|
def all(user_name)
|
36
44
|
visit_page user_name
|
37
|
-
parse_boards get_with_ajax_scroll(
|
45
|
+
parse_boards get_with_ajax_scroll(BOARD_ITEM_CSS)
|
38
46
|
end
|
39
47
|
|
40
48
|
##
|
@@ -47,9 +55,9 @@ module PintrestApi
|
|
47
55
|
# ==== Examples
|
48
56
|
#
|
49
57
|
# PintrestApi::Board.pins('mikakalathil', 'My Board Name!!!')
|
50
|
-
def pins(user_name, board_name)
|
51
|
-
board_slug = board_name.downcase.gsub(/_
|
52
|
-
Pin.get_for_board_url("#{PINTREST_URL}#{user_name}/#{board_slug}")
|
58
|
+
def pins(user_name, board_name, authentication)
|
59
|
+
board_slug = board_name.downcase.gsub(/[_\s]/, '-')
|
60
|
+
Pin.get_for_board_url("#{PINTREST_URL}#{user_name}/#{board_slug}", authentication)
|
53
61
|
end
|
54
62
|
|
55
63
|
private
|
@@ -58,9 +66,9 @@ module PintrestApi
|
|
58
66
|
items = []
|
59
67
|
|
60
68
|
nokogiri_items.each do |item|
|
61
|
-
board_title = item.css(
|
62
|
-
board_link = PINTREST_URL.chomp('/') + item.css(
|
63
|
-
pin_count = item.css(
|
69
|
+
board_title = item.css(BOARD_TITLE_CSS).inner_text
|
70
|
+
board_link = PINTREST_URL.chomp('/') + item.css(BOARD_LINK_CSS).attribute('href').value
|
71
|
+
pin_count = item.css(BOARD_PIN_COUNT_CSS).inner_text.strip
|
64
72
|
|
65
73
|
items << Board.new(board_title, board_link, pin_count)
|
66
74
|
end
|
data/lib/pintrest_api/core.rb
CHANGED
@@ -26,6 +26,10 @@ module PintrestApi
|
|
26
26
|
@session
|
27
27
|
end
|
28
28
|
|
29
|
+
def click(css)
|
30
|
+
@session.find(css).click
|
31
|
+
end
|
32
|
+
|
29
33
|
# Create a new PhantomJS session in Capybara
|
30
34
|
def new_session
|
31
35
|
# Register PhantomJS (aka poltergeist) as the driver to use
|
@@ -49,7 +53,7 @@ module PintrestApi
|
|
49
53
|
|
50
54
|
def scroll_page
|
51
55
|
@session.execute_script 'window.scrollTo(0,100000)'
|
52
|
-
sleep
|
56
|
+
sleep 5
|
53
57
|
end
|
54
58
|
|
55
59
|
# Returns the current session's page
|
@@ -65,6 +69,7 @@ module PintrestApi
|
|
65
69
|
old_items_count = items.count
|
66
70
|
scroll_page if old_items_count > 0
|
67
71
|
items = Nokogiri::HTML.parse(html).css css_selector
|
72
|
+
|
68
73
|
puts "New Count: #{items.count}\nOld Count: #{old_items_count}"
|
69
74
|
end
|
70
75
|
|
data/lib/pintrest_api/pin.rb
CHANGED
@@ -3,20 +3,30 @@ module PintrestApi
|
|
3
3
|
class Pin < Core
|
4
4
|
attr_reader :image_url, :title, :credits_url, :url, :description
|
5
5
|
|
6
|
+
PIN_BASE_CSS = '.Pin'
|
7
|
+
|
6
8
|
class << self
|
9
|
+
include Authentication
|
7
10
|
##
|
8
11
|
# Gets all pins from a board url
|
9
12
|
#
|
10
13
|
# ==== Attributes
|
11
14
|
#
|
12
15
|
# * +board_url+ - Pintrest board url
|
16
|
+
# * +authentication+ -
|
13
17
|
# ==== Examples
|
14
18
|
#
|
15
19
|
# PintrestApi::Pin.get_for_board_url('http://pintrest.com/mikaak/my-pins')
|
16
|
-
def get_for_board_url(board_url)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
def get_for_board_url(board_url, authentication)
|
21
|
+
login(authentication) if authentication
|
22
|
+
@session.visit board_url
|
23
|
+
parse_pins get_with_ajax_scroll(PIN_BASE_CSS)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_for_board(board, authentication)
|
27
|
+
login(authentication) if authentication
|
28
|
+
@session.visit board.url
|
29
|
+
parse_pins get_with_ajax_scroll(PIN_BASE_CSS)
|
20
30
|
end
|
21
31
|
|
22
32
|
## Planned
|
data/lib/pintrest_api.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pintrest-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mika Kalathil
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- LICENSE.txt
|
164
164
|
- README.md
|
165
165
|
- lib/pintrest_api.rb
|
166
|
+
- lib/pintrest_api/authentication.rb
|
166
167
|
- lib/pintrest_api/board.rb
|
167
168
|
- lib/pintrest_api/core.rb
|
168
169
|
- lib/pintrest_api/pin.rb
|