kickstapi 0.1.5 → 0.2.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.
- 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
|