kickstapi 0.1.5 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -1
- data/lib/kickstapi/kickstarter_gateway.rb +38 -2
- data/lib/kickstapi/project.rb +9 -1
- data/lib/kickstapi/project_mapper.rb +13 -0
- data/lib/kickstapi/reward.rb +13 -0
- data/lib/kickstapi/version.rb +1 -1
- data/lib/kickstapi.rb +7 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 202f1c5ea493fcf383df3a87f710f8506aed3bd8
|
4
|
+
data.tar.gz: dcba2cf074591251e5ffaadd43500b92e034d73e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92a015b4dd986392ea283175951073ab90369e728724b60b1089f186f3ef6e3d736d1cff7721fd10dc558a224da1dc620ba7d2ba2807f3dc6acf9ac3a90d9820
|
7
|
+
data.tar.gz: 9509895f049e5dc8ae183b2f3f84a1e4a38be60c3008c55200b6d47a4b7486ba2beb2369c1c741bca35d77b7f305047815a9b91615003ab686860ff8581d4e7a
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
This gem scrapes Kickstarter to create an API that facilitates the creation of applications querying Kickstarter.
|
4
4
|
|
5
|
-
Note that this library is not created
|
5
|
+
Note that this library is not created nor endorsed by Kickstarter
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -47,6 +47,21 @@ project.goal # returns the fund goal
|
|
47
47
|
project.end_date # returns the date that the project (will) end(s)
|
48
48
|
project.hours_left # returns how many hours are still left on the project
|
49
49
|
|
50
|
+
project.rewards # returns an array of rewards
|
51
|
+
reward = project.rewards.first
|
52
|
+
reward.price # returns the price of the reward
|
53
|
+
reward.backers # returns the amount of backers on this award level
|
54
|
+
reward.description # returns the description of the award
|
55
|
+
reward.delivery_date # returns the date the reward will be delivered
|
56
|
+
|
57
|
+
# you can also fetch projects by username
|
58
|
+
projects = Kickstapi.find_projects_by_username "kristofv"
|
59
|
+
# please note that when you do this, only the name and url fields
|
60
|
+
# are filled out, in order to fill out all the other fields
|
61
|
+
# you can force a request by fetching one of the lazy loaded
|
62
|
+
# fields or explicitly calling:
|
63
|
+
projects.first.load
|
64
|
+
|
50
65
|
```
|
51
66
|
|
52
67
|
## Contributing
|
@@ -14,13 +14,13 @@ module Kickstapi
|
|
14
14
|
page.search("div.project-card-wrap").each do |project|
|
15
15
|
p = Hash.new(0)
|
16
16
|
|
17
|
-
bb_card = project.search("
|
17
|
+
bb_card = project.search("h6.project-title")
|
18
18
|
bb_card_link = bb_card.search("a").first
|
19
19
|
|
20
20
|
p[:name] = bb_card_link.content
|
21
21
|
p[:url] = "https://www.kickstarter.com#{bb_card_link.attributes["href"].value.split('?').first}"
|
22
22
|
p[:id] = JSON.parse(project.attributes["data-project"])["id"].to_i
|
23
|
-
p[:creator] = project.search(".
|
23
|
+
p[:creator] = project.search("div.project-card-interior > p.mb1").text.gsub(/\n|by/, '')
|
24
24
|
|
25
25
|
projects << p
|
26
26
|
end
|
@@ -44,15 +44,51 @@ module Kickstapi
|
|
44
44
|
project[:percentage_funded] = page.search(%Q{//div[@id='pledged']}).first.attributes['data-percent-raised'].value.to_f * 100
|
45
45
|
project[:end_date] = DateTime.parse page.search(%Q{//span[@id='project_duration_data']}).first.attributes['data-end_time'].value
|
46
46
|
project[:hours_left] = page.search(%Q{//span[@id='project_duration_data']}).first.attributes['data-hours-remaining'].value.to_f
|
47
|
+
project[:rewards] = parse_rewards(page.search(%Q{//ul[@id='what-you-get']}).first)
|
47
48
|
end
|
48
49
|
project
|
49
50
|
end
|
50
51
|
|
52
|
+
def projects_by_username(username)
|
53
|
+
projects = []
|
54
|
+
source_url = "https://www.kickstarter.com/profile/#{username}"
|
55
|
+
|
56
|
+
agent.get(source_url) do |page|
|
57
|
+
page.search("a.project_item").each do |item|
|
58
|
+
project = {}
|
59
|
+
|
60
|
+
project[:name] = item.search("div.project_name").text.gsub(/\n/, '')
|
61
|
+
project[:id] = :not_loaded
|
62
|
+
project[:url] = "https://kickstarter.com#{item.attributes["href"].value}"
|
63
|
+
project[:creator] = :not_loaded
|
64
|
+
|
65
|
+
projects << project
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
p projects
|
70
|
+
end
|
71
|
+
|
51
72
|
private
|
52
73
|
|
53
74
|
def agent
|
54
75
|
@agent ||= Mechanize.new
|
55
76
|
end
|
56
77
|
|
78
|
+
def parse_rewards(rewards)
|
79
|
+
rewards_list = []
|
80
|
+
rewards.search("li.NS-projects-reward").each do |reward|
|
81
|
+
rewards_hash = {}
|
82
|
+
|
83
|
+
rewards_hash[:price] = reward.search("h5.mb1 > span.money").text[1..-1].gsub(/[,.]/, '').to_f
|
84
|
+
rewards_hash[:backers] = reward.search("p.backers-limits > span.backers-wrap > span.num-backers").text.to_i
|
85
|
+
rewards_hash[:description] = reward.search("div.desc > p").text
|
86
|
+
rewards_hash[:delivery_date] = DateTime.parse reward.search("div.delivery-date > time").text
|
87
|
+
|
88
|
+
rewards_list << rewards_hash
|
89
|
+
end
|
90
|
+
rewards_list
|
91
|
+
end
|
92
|
+
|
57
93
|
end
|
58
94
|
end
|
data/lib/kickstapi/project.rb
CHANGED
@@ -8,7 +8,8 @@ module Kickstapi
|
|
8
8
|
attr_accessor :id, :name, :url, :creator
|
9
9
|
lazy_accessor :about, :pledged, :goal,
|
10
10
|
:currency, :percentage_funded, :backers,
|
11
|
-
:status, :end_date, :hours_left
|
11
|
+
:status, :end_date, :hours_left,
|
12
|
+
:rewards
|
12
13
|
|
13
14
|
def initialize(attributes = {})
|
14
15
|
complete(attributes)
|
@@ -20,6 +21,13 @@ module Kickstapi
|
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
24
|
+
def rewards=(rewards)
|
25
|
+
@rewards = []
|
26
|
+
rewards.each do |reward|
|
27
|
+
@rewards << Kickstapi::Reward.new(reward)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
23
31
|
def to_s
|
24
32
|
inspect
|
25
33
|
end
|
@@ -42,6 +42,19 @@ module Kickstapi
|
|
42
42
|
project
|
43
43
|
end
|
44
44
|
|
45
|
+
def projects_by_username(username)
|
46
|
+
projects = []
|
47
|
+
project_hashes = @gateway.projects_by_username username
|
48
|
+
project_hashes.each do |project_hash|
|
49
|
+
project = Project.new(data_source: self)
|
50
|
+
|
51
|
+
project.complete(project_hash)
|
52
|
+
|
53
|
+
projects << project
|
54
|
+
end
|
55
|
+
projects
|
56
|
+
end
|
57
|
+
|
45
58
|
def load(project)
|
46
59
|
fill_project(project, @gateway.project_by_url(project.url))
|
47
60
|
end
|
data/lib/kickstapi/version.rb
CHANGED
data/lib/kickstapi.rb
CHANGED
@@ -3,6 +3,7 @@ require "kickstapi/project"
|
|
3
3
|
require "kickstapi/kickstarter_gateway"
|
4
4
|
require "kickstapi/project_mapper"
|
5
5
|
require "kickstapi/ghostly"
|
6
|
+
require "kickstapi/reward"
|
6
7
|
|
7
8
|
require 'open-uri'
|
8
9
|
require 'mechanize'
|
@@ -22,4 +23,10 @@ module Kickstapi
|
|
22
23
|
mapper.project_by_url url
|
23
24
|
end
|
24
25
|
|
26
|
+
def self.find_projects_by_username(username)
|
27
|
+
gw = Kickstapi::KickstarterGateway.new
|
28
|
+
mapper = Kickstapi::ProjectMapper.new(gw)
|
29
|
+
|
30
|
+
mapper.projects_by_username username
|
31
|
+
end
|
25
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kickstapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kristof Vannotten
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- lib/kickstapi/kickstarter_gateway.rb
|
101
101
|
- lib/kickstapi/project.rb
|
102
102
|
- lib/kickstapi/project_mapper.rb
|
103
|
+
- lib/kickstapi/reward.rb
|
103
104
|
- lib/kickstapi/version.rb
|
104
105
|
- spec/kickstapi_spec.rb
|
105
106
|
- spec/spec_helper.rb
|