jekyll-amazon 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -9
- data/lib/jekyll-amazon/amazon_tag.rb +50 -100
- data/lib/jekyll-amazon/version.rb +1 -1
- data/templates/detail.erb +27 -0
- data/templates/image.erb +3 -0
- data/templates/title.erb +3 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f66481069447c54da0a8c885fa980eb19ec03f7
|
4
|
+
data.tar.gz: 7345bc5b5ab2176870692f8d78f0da8dfb44f019
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e0f1df60df9f6f21fac5926c57d9a45a680dc941ff6c44c9b0b935af6d528f5bbb7cbb8ce41a048bcfee5ee519145019c813e79d7e705f73c40ca252bbd2c53
|
7
|
+
data.tar.gz: f4d3fe974de53b5b75d7e961a9ee23848d36933d39c128ab656a427dca950057f3651c43ad36822a1a5af539e22508f9036d0a5ff9f7d47720d10cd5d7c992c0
|
data/README.md
CHANGED
@@ -26,12 +26,6 @@ And set the environment variables required by the Product Advertising API:
|
|
26
26
|
|
27
27
|
(`ECS_ASSOCIATE_TAG` is the Tracking ID for your Affiliate account; `AWS_ACCESS_KEY_ID` and `AWS_SECRET_KEY` are your security credentials from your AWS account. An AWS account is required for the use of this API.)
|
28
28
|
|
29
|
-
Users outside of Japan will also want to set
|
30
|
-
|
31
|
-
$ export ECS_COUNTRY=...
|
32
|
-
|
33
|
-
with the two character country code of their Amazon Affiliate account (e.g. `'us'` for United States).
|
34
|
-
|
35
29
|
Finally, add the following to your site's `_config.yml`:
|
36
30
|
|
37
31
|
```
|
@@ -39,23 +33,34 @@ gems:
|
|
39
33
|
- jekyll-amazon
|
40
34
|
```
|
41
35
|
|
42
|
-
|
36
|
+
## Configuration
|
37
|
+
|
38
|
+
Put the configuration in your _config.yml:
|
43
39
|
|
44
40
|
```
|
45
|
-
|
41
|
+
jekyll-amazon:
|
42
|
+
locale: 'ja' # label's language. default: 'en'
|
43
|
+
country: 'jp' # with the two character country code of their Amazon
|
44
|
+
# Affiliate account (e.g. `'us'` for United States).
|
45
|
+
# default: 'us'
|
46
|
+
# 'br'/'ca'/'cn'/'de'/'es'/'fr'/'in'/'it'/'jp'/'mx/'uk'/'us'
|
47
|
+
template_dir: '_templates' # original template directory
|
46
48
|
```
|
47
49
|
|
50
|
+
|
48
51
|
## Usage
|
49
52
|
|
50
53
|
Use the tag as follows in your jekyll pages, posts and collections:
|
51
54
|
|
52
|
-
|
53
55
|
```liquid
|
54
56
|
{% amazon 4083210443 detail %}
|
55
57
|
```
|
56
58
|
|
57
59
|
|
60
|
+
## References
|
58
61
|
|
62
|
+
- [Amazon Product Advertising API](https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html).
|
63
|
+
- [jugend/amazon\-ecs: Ruby Amazon Product Advertising API](https://github.com/jugend/amazon-ecs)
|
59
64
|
|
60
65
|
## Contributing
|
61
66
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'amazon/ecs'
|
3
3
|
require 'singleton'
|
4
4
|
require 'i18n'
|
5
|
+
require 'erb'
|
5
6
|
|
6
7
|
module Jekyll
|
7
8
|
module Amazon
|
@@ -26,40 +27,20 @@ module Jekyll
|
|
26
27
|
description: 'EditorialReviews/EditorialReview/Content'
|
27
28
|
}.freeze
|
28
29
|
|
29
|
-
ECS_ASSOCIATE_TAG = ENV['ECS_ASSOCIATE_TAG'] || ''
|
30
|
-
AWS_ACCESS_KEY_ID = ENV['AWS_ACCESS_KEY_ID'] || ''
|
31
|
-
AWS_SECRET_KEY = ENV['AWS_SECRET_KEY'] || ''
|
32
|
-
|
33
|
-
raise 'AWS_ACCESS_KEY_ID env variable is not set' if AWS_ACCESS_KEY_ID.empty?
|
34
|
-
raise 'AWS_SECRET_KEY env variable is not set' if AWS_SECRET_KEY.empty?
|
35
|
-
raise 'ECS_ASSOCIATE_TAG env variable is not set' if ECS_ASSOCIATE_TAG.empty?
|
36
|
-
|
37
30
|
def initialize
|
38
31
|
@result_cache = {}
|
39
32
|
FileUtils.mkdir_p(CACHE_DIR)
|
40
33
|
end
|
41
34
|
|
42
|
-
def setup(
|
43
|
-
|
44
|
-
# ::Amazon::Ecs.debug = true
|
35
|
+
def setup(country)
|
36
|
+
::Amazon::Ecs.debug = debug?
|
45
37
|
::Amazon::Ecs.configure do |options|
|
46
|
-
options[:associate_tag] = ECS_ASSOCIATE_TAG
|
47
|
-
options[:AWS_access_key_id] = AWS_ACCESS_KEY_ID
|
48
|
-
options[:AWS_secret_key] = AWS_SECRET_KEY
|
38
|
+
options[:associate_tag] = ENV.fetch('ECS_ASSOCIATE_TAG')
|
39
|
+
options[:AWS_access_key_id] = ENV.fetch('AWS_ACCESS_KEY_ID')
|
40
|
+
options[:AWS_secret_key] = ENV.fetch('AWS_SECRET_KEY')
|
49
41
|
options[:response_group] = RESPONSE_GROUP
|
50
|
-
options[:country] =
|
42
|
+
options[:country] = country
|
51
43
|
end
|
52
|
-
|
53
|
-
setup_i18n(site)
|
54
|
-
end
|
55
|
-
|
56
|
-
def setup_i18n(site)
|
57
|
-
locale = 'ja'
|
58
|
-
locale = site.config['amazon_locale'] if site.config['amazon_locale']
|
59
|
-
I18n.enforce_available_locales = false
|
60
|
-
I18n.locale = locale.to_sym
|
61
|
-
dir = File.expand_path(File.dirname(__FILE__))
|
62
|
-
I18n.load_path = [dir + "/../../locales/#{locale}.yml"]
|
63
44
|
end
|
64
45
|
|
65
46
|
def item_lookup(asin)
|
@@ -70,13 +51,21 @@ module Jekyll
|
|
70
51
|
res.first_item
|
71
52
|
end
|
72
53
|
raise ArgumentError unless item
|
54
|
+
save(asin, item)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def save(asin, item)
|
73
60
|
data = create_data(item)
|
74
61
|
write_cache(asin, data)
|
75
62
|
@result_cache[asin] = data
|
76
63
|
@result_cache[asin]
|
77
64
|
end
|
78
65
|
|
79
|
-
|
66
|
+
def debug?
|
67
|
+
ENV.fetch('JEKYLL_AMAZON_DEBUG', 'false') == 'true'
|
68
|
+
end
|
80
69
|
|
81
70
|
def read_cache(asin)
|
82
71
|
path = File.join(CACHE_DIR, asin)
|
@@ -107,94 +96,55 @@ module Jekyll
|
|
107
96
|
end
|
108
97
|
end
|
109
98
|
|
110
|
-
class ItemAttribute
|
111
|
-
attr_accessor :key
|
112
|
-
attr_accessor :value
|
113
|
-
|
114
|
-
def initialize(key, value)
|
115
|
-
self.key = key
|
116
|
-
self.value = value
|
117
|
-
end
|
118
|
-
|
119
|
-
def to_html
|
120
|
-
str = "<div class=\"jk-amazon-info-#{key}\">"
|
121
|
-
str += labeled
|
122
|
-
str += '</div>'
|
123
|
-
str
|
124
|
-
end
|
125
|
-
|
126
|
-
def labeled
|
127
|
-
return '' if value.nil? || value.empty?
|
128
|
-
"<span class=\"jk-amazon-info-label\">#{I18n.t(key)} </span>#{value}"
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
99
|
class AmazonTag < Liquid::Tag
|
133
|
-
|
134
|
-
|
100
|
+
DEFAULT_LOCALE = 'en'.freeze
|
101
|
+
DEFAULT_COUNTRY = 'us'.freeze
|
135
102
|
|
136
103
|
def initialize(tag_name, markup, tokens)
|
137
104
|
super
|
138
105
|
parse_options(markup)
|
139
|
-
error "No ASIN given in #{tag_name} tag" if asin.nil? || asin.empty?
|
106
|
+
error "No ASIN given in #{tag_name} tag" if @asin.nil? || @asin.empty?
|
140
107
|
end
|
141
108
|
|
142
109
|
def render(context)
|
143
|
-
|
144
|
-
|
145
|
-
item = AmazonResultCache.instance.item_lookup(asin.to_s)
|
110
|
+
setup(context)
|
111
|
+
setup_i18n
|
112
|
+
item = AmazonResultCache.instance.item_lookup(@asin.to_s)
|
146
113
|
return unless item
|
147
|
-
|
114
|
+
render_from_file(@template_type, item)
|
148
115
|
end
|
149
116
|
|
150
117
|
private
|
151
118
|
|
119
|
+
def setup(context)
|
120
|
+
@site = context.registers[:site]
|
121
|
+
@config = @site.config['jekyll-amazon'] || {}
|
122
|
+
country = @config['country'] || DEFAULT_COUNTRY
|
123
|
+
@template_dir = @config['template_dir']
|
124
|
+
AmazonResultCache.instance.setup(country)
|
125
|
+
end
|
126
|
+
|
127
|
+
def setup_i18n
|
128
|
+
locale = @config['locale'] || DEFAULT_LOCALE
|
129
|
+
I18n.enforce_available_locales = false
|
130
|
+
I18n.locale = locale.to_sym
|
131
|
+
file = File.expand_path("../../locales/#{locale}.yml", __dir__)
|
132
|
+
I18n.load_path = [file]
|
133
|
+
end
|
134
|
+
|
152
135
|
def parse_options(markup)
|
153
136
|
options = (markup || '').split(' ').map(&:strip)
|
154
|
-
|
155
|
-
|
156
|
-
end
|
157
|
-
|
158
|
-
def
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
)
|
165
|
-
end
|
166
|
-
|
167
|
-
def image(item)
|
168
|
-
url = item[:detail_page_url]
|
169
|
-
title = item[:title]
|
170
|
-
image_url = item[:medium_image_url]
|
171
|
-
str = <<-"EOS"
|
172
|
-
<a class="jk-amazon-image" href="#{url}" target="_blank">
|
173
|
-
<img src="#{image_url}" alt="#{title}" />
|
174
|
-
</a>
|
175
|
-
EOS
|
176
|
-
str.to_s
|
177
|
-
end
|
178
|
-
|
179
|
-
def detail(item)
|
180
|
-
attrs = {
|
181
|
-
author: item[:author],
|
182
|
-
publisher: item[:publisher],
|
183
|
-
date: item[:publication_date] || item[:release_date],
|
184
|
-
salesrank: item[:salesrank],
|
185
|
-
description: br2nl(item[:description])
|
186
|
-
}.map { |k, v| ItemAttribute.new(k, v).to_html }.join("\n")
|
187
|
-
|
188
|
-
str = <<-"EOS"
|
189
|
-
<div class="jk-amazon-item">
|
190
|
-
#{image(item)}
|
191
|
-
<div class="jk-amazon-info">
|
192
|
-
#{title(item)}
|
193
|
-
#{attrs}
|
194
|
-
</div>
|
195
|
-
</div>
|
196
|
-
EOS
|
197
|
-
str.to_s
|
137
|
+
@asin = options.shift
|
138
|
+
@template_type = options.shift || :title
|
139
|
+
end
|
140
|
+
|
141
|
+
def render_from_file(type, item)
|
142
|
+
if @template_dir
|
143
|
+
template_file = File.expand_path("#{type}.erb", @template_dir)
|
144
|
+
file = template_file if File.exist? template_file
|
145
|
+
end
|
146
|
+
file ||= File.expand_path("../../templates/#{type}.erb", __dir__)
|
147
|
+
ERB.new(open(file).read).result(binding)
|
198
148
|
end
|
199
149
|
|
200
150
|
def br2nl(text)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<div class="jk-amazon-item">
|
2
|
+
<a class="jk-amazon-image" href="<%= item[:detail_page_url] %>" target="_blank">
|
3
|
+
<img src="<%= item[:medium_image_url] %>" alt="<%= item[:title] %>" />
|
4
|
+
</a>
|
5
|
+
<div class="jk-amazon-info">
|
6
|
+
<a class="jk-amazon-info-title" href="<%= item[:detail_page_url] %>" target="_blank">
|
7
|
+
<%= item[:title] %>
|
8
|
+
</a>
|
9
|
+
<%
|
10
|
+
{
|
11
|
+
author: item[:author],
|
12
|
+
publisher: item[:publisher],
|
13
|
+
date: item[:publication_date] || item[:release_date],
|
14
|
+
salesrank: item[:salesrank],
|
15
|
+
description: br2nl(item[:description])
|
16
|
+
}.each do |key, value|
|
17
|
+
next if value.nil? || value.empty?
|
18
|
+
%>
|
19
|
+
<div class="jk-amazon-info-<%= key %>">
|
20
|
+
<span class="jk-amazon-info-label">
|
21
|
+
<%= I18n.t(key) %>
|
22
|
+
</span>
|
23
|
+
<%= value %>
|
24
|
+
</div>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
</div>
|
data/templates/image.erb
ADDED
data/templates/title.erb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-amazon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tokzk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazon-ecs
|
@@ -116,6 +116,9 @@ files:
|
|
116
116
|
- lib/jekyll-amazon/version.rb
|
117
117
|
- locales/en.yml
|
118
118
|
- locales/ja.yml
|
119
|
+
- templates/detail.erb
|
120
|
+
- templates/image.erb
|
121
|
+
- templates/title.erb
|
119
122
|
homepage: https://github.com/tokzk/jekyll-amazon
|
120
123
|
licenses:
|
121
124
|
- MIT
|