lentil 0.4.2 → 0.5.0
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 +6 -0
- data/app/assets/javascripts/lentil/addfancybox.js +1 -0
- data/app/models/lentil/image.rb +6 -2
- data/app/views/admin/lentil_images/_moderation_form_body.html.erb +3 -1
- data/db/migrate/20150311004606_add_suppressed_to_images.rb +5 -0
- data/db/migrate/20150422123522_add_indexes_to_images.rb +15 -0
- data/lib/lentil/admin/images.rb +5 -1
- data/lib/lentil/instagram_harvester.rb +1 -27
- data/lib/lentil/version.rb +1 -1
- data/lib/tasks/image_services.rake +19 -23
- data/test/dummy/db/schema.rb +13 -1
- data/test/unit/lentil/image_test.rb +9 -0
- data/test/vcr_cassettes/battle_images.yml +149 -178
- data/test/vcr_cassettes/instagram_oembed.yml +39 -21
- metadata +52 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97465eeca8fbdaaa274f0202ff41703550717f74
|
4
|
+
data.tar.gz: 1bf43a3507e0ea9be6d0d97873019b3afe1905c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3527f957cf817df95f4a50d87177f83ff28a15690ba31b5960360563a6c908e867747b240b30f4fdcb7c2657f7431518e272669a1fd5d5dd5b7fef557caa25a
|
7
|
+
data.tar.gz: 1fcc672f9e3b5b5d323bb75d484a9cb52005ae07f45113baacafb1d55d97c02ebf905c2f12185ef9d5a57b10ce94108136269325b3ab0e2507a424a57120e916
|
data/README.md
CHANGED
@@ -47,6 +47,10 @@ bundle exec rails server
|
|
47
47
|
|
48
48
|
Visit <http://localhost:3000>
|
49
49
|
|
50
|
+
## Upgrading
|
51
|
+
|
52
|
+
You may need to run `bundle exec rake lentil:install:migrations` to incorporate any new database migration files.
|
53
|
+
|
50
54
|
## Harvest Images
|
51
55
|
|
52
56
|
- You will need to define your `instagram_client_id` and `instagram_client_secret` in `config/lentil_config.yml`. You can generate these strings by creating an [Instagram API](http://instagram.com/developer) client for your application.
|
@@ -223,8 +227,10 @@ Submit a GitHub issue or contact lentil@lists.ncsu.edu.
|
|
223
227
|
|
224
228
|
* Jason Casden
|
225
229
|
* Bret Davidson
|
230
|
+
* Aniket Lawande
|
226
231
|
* Cory Lown
|
227
232
|
* Jason Ronallo
|
233
|
+
* Heidi Tebbe
|
228
234
|
|
229
235
|
## Additional project team members
|
230
236
|
|
data/app/models/lentil/image.rb
CHANGED
@@ -35,8 +35,8 @@
|
|
35
35
|
class Lentil::Image < ActiveRecord::Base
|
36
36
|
attr_accessible :description, :title, :user_id, :state, :staff_like, :url, :long_url, :external_identifier,
|
37
37
|
:original_datetime, :popular_score, :taggings, :tag_id, :moderator, :moderated_at, :second_moderation,
|
38
|
-
:do_not_request_donation, :donor_agreement_rejected, :media_type, :video_url
|
39
|
-
|
38
|
+
:do_not_request_donation, :donor_agreement_rejected, :media_type, :video_url, :suppressed
|
39
|
+
|
40
40
|
attr_protected :original_metadata
|
41
41
|
|
42
42
|
has_many :won_battles, :class_name => "Battle"
|
@@ -84,6 +84,10 @@ class Lentil::Image < ActiveRecord::Base
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def self.approved
|
87
|
+
where(state: self::States[:approved]).where(:suppressed => false)
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.approved_all
|
87
91
|
where(state: self::States[:approved])
|
88
92
|
end
|
89
93
|
|
@@ -12,6 +12,7 @@
|
|
12
12
|
<% if action?("moderate_passed")%>
|
13
13
|
<th>Moderator</th>
|
14
14
|
<% end %>
|
15
|
+
<th>Suppressed</th>
|
15
16
|
<th>Status</th>
|
16
17
|
</tr>
|
17
18
|
</thead>
|
@@ -38,6 +39,7 @@
|
|
38
39
|
<% if action?("moderate_passed")%>
|
39
40
|
<td><%= image.moderator.email %></td>
|
40
41
|
<% end %>
|
42
|
+
<td><%= f.input :suppressed, :label => "Suppressed", :wrapper_html => { :class => "moderation_checkbox" } %></td>
|
41
43
|
<td><%= f.input :state, :label => false, :as => :radio, :collection => Lentil::Image::States, :wrapper_html => { :class => "moderation_radio" } %></td>
|
42
44
|
<% end -%>
|
43
45
|
</tr>
|
@@ -50,4 +52,4 @@
|
|
50
52
|
<% if params[:action] != "update_image" %>
|
51
53
|
<div class="pagination"><%= paginate @images %></div>
|
52
54
|
<% end %>
|
53
|
-
</div>
|
55
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddIndexesToImages < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_index :lentil_images, :user_id
|
4
|
+
add_index :lentil_images, :state
|
5
|
+
add_index :lentil_images, :created_at
|
6
|
+
add_index :lentil_images, :updated_at
|
7
|
+
add_index :lentil_images, :staff_like
|
8
|
+
add_index :lentil_images, :original_datetime
|
9
|
+
add_index :lentil_images, :file_last_checked
|
10
|
+
add_index :lentil_images, :failed_file_checks
|
11
|
+
add_index :lentil_images, :do_not_request_donation
|
12
|
+
add_index :lentil_images, :last_donor_agreement_failure_date
|
13
|
+
add_index :lentil_images, :suppressed
|
14
|
+
end
|
15
|
+
end
|
data/lib/lentil/admin/images.rb
CHANGED
@@ -6,6 +6,7 @@ if defined?(ActiveAdmin)
|
|
6
6
|
config.per_page = 10
|
7
7
|
|
8
8
|
filter :state, :as => :select, :collection => proc { Lentil::Image::States }
|
9
|
+
filter :suppressed
|
9
10
|
filter :media_type, :as => :select
|
10
11
|
filter :user_user_name, :as => :string, :label => "Username"
|
11
12
|
filter :user_full_name, :as => :string, :label => "Full Name"
|
@@ -60,6 +61,7 @@ if defined?(ActiveAdmin)
|
|
60
61
|
end
|
61
62
|
end
|
62
63
|
column "Score", :popular_score
|
64
|
+
column :suppressed
|
63
65
|
column :state do |image|
|
64
66
|
image.state_name
|
65
67
|
end
|
@@ -92,6 +94,7 @@ if defined?(ActiveAdmin)
|
|
92
94
|
row :do_not_request_donation
|
93
95
|
row :donor_agreement_submitted_date
|
94
96
|
row :file_harvested_date
|
97
|
+
row :suppressed
|
95
98
|
row :state do
|
96
99
|
image.state_name
|
97
100
|
end
|
@@ -134,7 +137,8 @@ if defined?(ActiveAdmin)
|
|
134
137
|
taggings = new_taggings + taggings_to_keep
|
135
138
|
|
136
139
|
image.update_attributes!(:state => image_params['state'], :taggings => taggings, :staff_like => image_params['staff_like'],
|
137
|
-
:moderator => current_admin_user, :moderated_at => DateTime.now, :second_moderation => second_moderation,
|
140
|
+
:moderator => current_admin_user, :moderated_at => DateTime.now, :second_moderation => second_moderation,
|
141
|
+
:do_not_request_donation => image_params['do_not_request_donation'], :suppressed => image_params['suppressed'])
|
138
142
|
end
|
139
143
|
end
|
140
144
|
end
|
@@ -54,30 +54,6 @@ module Lentil
|
|
54
54
|
Instagram.tag_recent_media(tag, :count=>100)
|
55
55
|
end
|
56
56
|
|
57
|
-
def fetch_recent_images_by_tag_with_args(tag = nil, args = {:count=>100})
|
58
|
-
configure_connection
|
59
|
-
tag ||= Lentil::Engine::APP_CONFIG["default_image_search_tag"]
|
60
|
-
Instagram.tag_recent_media(tag, args)
|
61
|
-
end
|
62
|
-
|
63
|
-
def recursive_fetch(tag=nil, max_tag_id=nil, total=0)
|
64
|
-
case max_tag_id
|
65
|
-
when nil
|
66
|
-
instagram_metadata = fetch_recent_images_by_tag_with_args(tag)
|
67
|
-
else
|
68
|
-
instagram_metadata = fetch_recent_images_by_tag_with_args(tag, {:max_tag_id=>max_tag_id})
|
69
|
-
end
|
70
|
-
total += save_instagram_load(instagram_metadata).size
|
71
|
-
next_max_id = instagram_metadata.pagination.next_max_id
|
72
|
-
case next_max_id
|
73
|
-
when nil
|
74
|
-
puts "nil next_max_id. Previous next_max_id: " + max_tag_id.to_s
|
75
|
-
else
|
76
|
-
subtotal = recursive_fetch(tag, next_max_id, total)
|
77
|
-
total += subtotal.nil? ? 0 : subtotal
|
78
|
-
end
|
79
|
-
total
|
80
|
-
end
|
81
57
|
|
82
58
|
# Queries the Instagram API for the image metadata associated with a given ID.
|
83
59
|
#
|
@@ -159,9 +135,7 @@ module Lentil
|
|
159
135
|
:media_type => image_data[:media_type]
|
160
136
|
})
|
161
137
|
|
162
|
-
|
163
|
-
# It's fixed in master and should be in the next release (>1.2.0).
|
164
|
-
image_record.original_metadata = JSON.parse(image_data[:original_metadata].to_json)
|
138
|
+
image_record.original_metadata = image_data[:original_metadata].to_hash
|
165
139
|
|
166
140
|
# Default to "All Rights Reserved" until we find out more about licenses
|
167
141
|
# FIXME: Set the default license in the app config
|
data/lib/lentil/version.rb
CHANGED
@@ -60,7 +60,7 @@ namespace :lentil do
|
|
60
60
|
raise "Image file already exists, will not overwrite: #{image_file_path}" if File.exist?(image_file_path)
|
61
61
|
|
62
62
|
image_data = harvester.harvest_image_data(image)
|
63
|
-
|
63
|
+
|
64
64
|
File.open(image_file_path, "wb") do |f|
|
65
65
|
f.write image_data
|
66
66
|
end
|
@@ -72,7 +72,7 @@ namespace :lentil do
|
|
72
72
|
f.write video_data
|
73
73
|
end
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
image.file_harvested_date = DateTime.now
|
77
77
|
image.save
|
78
78
|
puts "Harvested image #{image.id}, #{image_file_path}"
|
@@ -144,7 +144,7 @@ namespace :lentil do
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
desc "Get video urls from videos previously harvested"
|
149
149
|
task :restore_videos, [:image_service] => :environment do |t, args|
|
150
150
|
args.with_defaults(:image_service => 'Instagram')
|
@@ -153,10 +153,10 @@ namespace :lentil do
|
|
153
153
|
|
154
154
|
lentilService = Lentil::Service.unscoped.where(:name => args[:image_service]).first
|
155
155
|
numUpdated = 0;
|
156
|
-
lentilService.images.unscoped.
|
156
|
+
lentilService.images.unscoped.find_each do |image|
|
157
157
|
#Skip if media type already known i.e. was properly harvested
|
158
158
|
next if !image.media_type.blank?
|
159
|
-
|
159
|
+
|
160
160
|
meta = image.original_metadata
|
161
161
|
obj = YAML.load(meta)
|
162
162
|
type = obj["type"]
|
@@ -175,7 +175,7 @@ namespace :lentil do
|
|
175
175
|
end
|
176
176
|
puts numUpdated.to_s + " record(s) updated"
|
177
177
|
end
|
178
|
-
|
178
|
+
|
179
179
|
desc "Dump image metadata for archiving"
|
180
180
|
task :dump_metadata, [:image_service, :base_directory] => :environment do |t, args|
|
181
181
|
args.with_defaults(:image_service => 'Instagram')
|
@@ -184,7 +184,7 @@ namespace :lentil do
|
|
184
184
|
|
185
185
|
lentilService = Lentil::Service.unscoped.where(:name => args[:image_service]).first
|
186
186
|
numArchived = 0;
|
187
|
-
lentilService.images.unscoped.
|
187
|
+
lentilService.images.unscoped.find_each do |image|
|
188
188
|
begin
|
189
189
|
raise "Destination directory does not exist or is not a directory: #{base_dir}" unless File.directory?(base_dir)
|
190
190
|
|
@@ -199,24 +199,20 @@ namespace :lentil do
|
|
199
199
|
Rails.logger.error e.message
|
200
200
|
raise e
|
201
201
|
end
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
@jsonobj["service"] = JSON.parse(image.service.to_json).except("id")
|
215
|
-
@jsonobj["user"] = JSON.parse(image.user.to_json).except("id", "service_id")
|
216
|
-
|
202
|
+
|
203
|
+
jsonobj = image.serializable_hash
|
204
|
+
jsonobj["tags"] = image.tags.all
|
205
|
+
jsonobj["licenses"] = image.licenses.all
|
206
|
+
|
207
|
+
jsonobj["like_votes"] = image.like_votes.all
|
208
|
+
jsonobj["flags"] = image.flags.all
|
209
|
+
|
210
|
+
jsonobj["service"] = image.service
|
211
|
+
jsonobj["user"] = image.user
|
212
|
+
|
217
213
|
image_file_path += "/#{image.external_identifier}.json"
|
218
214
|
File.open(image_file_path, "w") do |f|
|
219
|
-
f.write
|
215
|
+
f.write jsonobj.to_json
|
220
216
|
numArchived += 1
|
221
217
|
end
|
222
218
|
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 20150422123522) do
|
15
15
|
|
16
16
|
create_table "active_admin_comments", :force => true do |t|
|
17
17
|
t.string "resource_id", :null => false
|
@@ -92,10 +92,22 @@ ActiveRecord::Schema.define(:version => 20141106172834) do
|
|
92
92
|
t.datetime "last_donor_agreement_failure_date"
|
93
93
|
t.string "media_type"
|
94
94
|
t.string "video_url"
|
95
|
+
t.boolean "suppressed", :default => false
|
95
96
|
end
|
96
97
|
|
98
|
+
add_index "lentil_images", ["created_at"], :name => "index_lentil_images_on_created_at"
|
99
|
+
add_index "lentil_images", ["do_not_request_donation"], :name => "index_lentil_images_on_do_not_request_donation"
|
97
100
|
add_index "lentil_images", ["external_identifier"], :name => "index_images_on_external_identifier"
|
101
|
+
add_index "lentil_images", ["failed_file_checks"], :name => "index_lentil_images_on_failed_file_checks"
|
102
|
+
add_index "lentil_images", ["file_last_checked"], :name => "index_lentil_images_on_file_last_checked"
|
103
|
+
add_index "lentil_images", ["last_donor_agreement_failure_date"], :name => "index_lentil_images_on_last_donor_agreement_failure_date"
|
98
104
|
add_index "lentil_images", ["moderator_id"], :name => "index_images_on_moderator_id"
|
105
|
+
add_index "lentil_images", ["original_datetime"], :name => "index_lentil_images_on_original_datetime"
|
106
|
+
add_index "lentil_images", ["staff_like"], :name => "index_lentil_images_on_staff_like"
|
107
|
+
add_index "lentil_images", ["state"], :name => "index_lentil_images_on_state"
|
108
|
+
add_index "lentil_images", ["suppressed"], :name => "index_lentil_images_on_suppressed"
|
109
|
+
add_index "lentil_images", ["updated_at"], :name => "index_lentil_images_on_updated_at"
|
110
|
+
add_index "lentil_images", ["user_id"], :name => "index_lentil_images_on_user_id"
|
99
111
|
|
100
112
|
create_table "lentil_licenses", :force => true do |t|
|
101
113
|
t.string "name"
|
@@ -91,4 +91,13 @@ class ImageTest < ActiveSupport::TestCase
|
|
91
91
|
assert_equal image.valid?, true
|
92
92
|
end
|
93
93
|
end
|
94
|
+
|
95
|
+
test 'Suppressed images should not be returned with approved images' do
|
96
|
+
assert_difference 'Lentil::Image.approved.count', -1,
|
97
|
+
'A suppressed image should not be treated as approved' do
|
98
|
+
img = Lentil::Image.approved.first
|
99
|
+
img.suppressed = true
|
100
|
+
img.save
|
101
|
+
end
|
102
|
+
end
|
94
103
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri:
|
5
|
+
uri: https://api.instagram.com/oembed?format=json&url=http://instagram.com/p/R82ycNoNfn/
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -10,98 +10,66 @@ http_interactions:
|
|
10
10
|
Accept-Encoding:
|
11
11
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
12
|
Accept:
|
13
|
-
-
|
13
|
+
- "*/*"
|
14
14
|
User-Agent:
|
15
|
-
-
|
15
|
+
- Mozilla/5.0 (compatible; ruby-oembed/0.8.13)
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
|
-
Cache-Control:
|
22
|
-
- private, no-cache, no-store, must-revalidate
|
23
|
-
Content-Language:
|
24
|
-
- en
|
25
|
-
Content-Type:
|
26
|
-
- application/json
|
27
|
-
Date:
|
28
|
-
- Thu, 27 Feb 2014 19:42:54 GMT
|
29
|
-
Expires:
|
30
|
-
- Sat, 01 Jan 2000 00:00:00 GMT
|
31
|
-
Pragma:
|
32
|
-
- no-cache
|
33
21
|
Server:
|
34
22
|
- nginx
|
35
|
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
|
39
|
-
- mid=Uw-VPgAEAAFy8J-uIsSZp_EdCnnn; expires=Wed, 22-Feb-2034 19:42:54 GMT; Max-Age=630720000;
|
40
|
-
Path=/
|
41
|
-
Vary:
|
42
|
-
- Cookie, Accept-Language, Accept-Encoding
|
43
|
-
Content-Length:
|
44
|
-
- '249'
|
45
|
-
Connection:
|
46
|
-
- keep-alive
|
47
|
-
body:
|
48
|
-
encoding: UTF-8
|
49
|
-
string: '{"provider_url":"http:\/\/instagram.com\/","media_id":"323374234042685415_31727100","title":"Bubble
|
50
|
-
bubble...","url":"http:\/\/distilleryimage3.ak.instagram.com\/644f52a02d2f11e2b55e22000a9f09fb_7.jpg","author_name":"cazzerson","height":612,"width":612,"version":"1.0","author_url":"http:\/\/instagram.com\/cazzerson","author_id":31727100,"type":"photo","provider_name":"Instagram"}'
|
51
|
-
http_version:
|
52
|
-
recorded_at: Thu, 27 Feb 2014 19:42:54 GMT
|
53
|
-
- request:
|
54
|
-
method: get
|
55
|
-
uri: http://api.instagram.com/oembed?format=json&url=http://instagram.com/p/ZA1L0nINXi/
|
56
|
-
body:
|
57
|
-
encoding: US-ASCII
|
58
|
-
string: ''
|
59
|
-
headers:
|
60
|
-
Accept-Encoding:
|
61
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
62
|
-
Accept:
|
63
|
-
- '*/*'
|
64
|
-
User-Agent:
|
65
|
-
- Ruby
|
66
|
-
response:
|
67
|
-
status:
|
68
|
-
code: 404
|
69
|
-
message: NOT FOUND
|
70
|
-
headers:
|
71
|
-
Cache-Control:
|
72
|
-
- private, no-cache, no-store, must-revalidate
|
23
|
+
Date:
|
24
|
+
- Fri, 24 Apr 2015 14:06:25 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
73
27
|
Content-Language:
|
74
28
|
- en
|
75
|
-
Content-Type:
|
76
|
-
- text/html; charset=utf-8
|
77
|
-
Date:
|
78
|
-
- Thu, 27 Feb 2014 19:42:54 GMT
|
79
29
|
Expires:
|
80
30
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
31
|
+
Vary:
|
32
|
+
- Cookie, Accept-Language, Accept-Encoding
|
81
33
|
Pragma:
|
82
34
|
- no-cache
|
83
|
-
|
84
|
-
-
|
35
|
+
Cache-Control:
|
36
|
+
- private, no-cache, no-store, must-revalidate
|
85
37
|
Set-Cookie:
|
86
|
-
-
|
87
|
-
- csrftoken=c9d44bf3281ffa60168cf219fece1006; expires=Thu, 26-Feb-2015 19:42:54
|
38
|
+
- csrftoken=90bcd97d51e11c0c4cfee1df6eaea696; expires=Fri, 22-Apr-2016 14:06:25
|
88
39
|
GMT; Max-Age=31449600; Path=/
|
89
|
-
- mid=
|
40
|
+
- mid=VTpN4QAEAAHAmPRsIL3gjnyQqmLw; expires=Thu, 19-Apr-2035 14:06:25 GMT; Max-Age=630720000;
|
90
41
|
Path=/
|
91
|
-
Vary:
|
92
|
-
- Cookie, Accept-Language
|
93
|
-
Content-Length:
|
94
|
-
- '34'
|
95
42
|
Connection:
|
96
43
|
- keep-alive
|
44
|
+
Content-Length:
|
45
|
+
- '1393'
|
97
46
|
body:
|
98
47
|
encoding: UTF-8
|
99
|
-
string:
|
48
|
+
string: '{"provider_url":"https:\/\/instagram.com\/","media_id":"323374234042685415_31727100","author_name":"cazzerson","height":null,"thumbnail_url":"https:\/\/igcdn-photos-c-a.akamaihd.net\/hphotos-ak-xaf1\/outbound-distilleryimage3\/t0.0-17\/OBPTH\/644f52a02d2f11e2b55e22000a9f09fb_7.jpg","thumbnail_width":612,"thumbnail_height":612,"provider_name":"Instagram","title":"Bubble
|
49
|
+
bubble...","html":"\u003cblockquote class=\"instagram-media\" data-instgrm-captioned
|
50
|
+
data-instgrm-version=\"4\" style=\" background:#FFF; border:0; border-radius:3px;
|
51
|
+
box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin:
|
52
|
+
1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% -
|
53
|
+
2px); width:calc(100% - 2px);\"\u003e\u003cdiv style=\"padding:8px;\"\u003e
|
54
|
+
\u003cdiv style=\" background:#F8F8F8; line-height:0; margin-top:40px; padding:50%
|
55
|
+
0; text-align:center; width:100%;\"\u003e \u003cdiv style=\" background:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf\/\/42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB\/lQPb79drWOyJVa\/DAvg9B\/rLB4cC+Nqgdz\/TvBbBnr6GBReqn\/nRmDgaQEej7WhonozjF+Y2I\/fZou\/qAAAAAElFTkSuQmCC);
|
56
|
+
display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px;
|
57
|
+
width:44px;\"\u003e\u003c\/div\u003e\u003c\/div\u003e \u003cp style=\" margin:8px
|
58
|
+
0 0 0; padding:0 4px;\"\u003e \u003ca href=\"https:\/\/instagram.com\/p\/R82ycNoNfn\/\"
|
59
|
+
style=\" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal;
|
60
|
+
font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;\"
|
61
|
+
target=\"_top\"\u003eBubble bubble...\u003c\/a\u003e\u003c\/p\u003e \u003cp
|
62
|
+
style=\" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px;
|
63
|
+
margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center;
|
64
|
+
text-overflow:ellipsis; white-space:nowrap;\"\u003eA photo posted by @cazzerson
|
65
|
+
on \u003ctime style=\" font-family:Arial,sans-serif; font-size:14px; line-height:17px;\"
|
66
|
+
datetime=\"2012-11-13T01:13:54+00:00\"\u003eNov 12, 2012 at 5:13pm PST\u003c\/time\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/blockquote\u003e\n\u003cscript
|
67
|
+
async defer src=\"\/\/platform.instagram.com\/en_US\/embeds.js\"\u003e\u003c\/script\u003e","width":658,"version":"1.0","author_url":"https:\/\/instagram.com\/cazzerson","author_id":31727100,"type":"rich"}'
|
100
68
|
http_version:
|
101
|
-
recorded_at:
|
69
|
+
recorded_at: Fri, 24 Apr 2015 14:06:25 GMT
|
102
70
|
- request:
|
103
71
|
method: get
|
104
|
-
uri:
|
72
|
+
uri: https://api.instagram.com/oembed?format=json&url=http://instagram.com/p/R0NyCsK_xf/
|
105
73
|
body:
|
106
74
|
encoding: US-ASCII
|
107
75
|
string: ''
|
@@ -109,49 +77,66 @@ http_interactions:
|
|
109
77
|
Accept-Encoding:
|
110
78
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
111
79
|
Accept:
|
112
|
-
-
|
80
|
+
- "*/*"
|
113
81
|
User-Agent:
|
114
|
-
-
|
82
|
+
- Mozilla/5.0 (compatible; ruby-oembed/0.8.13)
|
115
83
|
response:
|
116
84
|
status:
|
117
85
|
code: 200
|
118
86
|
message: OK
|
119
87
|
headers:
|
120
|
-
|
121
|
-
-
|
122
|
-
|
123
|
-
-
|
88
|
+
Server:
|
89
|
+
- nginx
|
90
|
+
Date:
|
91
|
+
- Fri, 24 Apr 2015 14:06:25 GMT
|
124
92
|
Content-Type:
|
125
93
|
- application/json
|
126
|
-
|
127
|
-
-
|
94
|
+
Content-Language:
|
95
|
+
- en
|
128
96
|
Expires:
|
129
97
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
98
|
+
Vary:
|
99
|
+
- Cookie, Accept-Language, Accept-Encoding
|
130
100
|
Pragma:
|
131
101
|
- no-cache
|
132
|
-
|
133
|
-
-
|
102
|
+
Cache-Control:
|
103
|
+
- private, no-cache, no-store, must-revalidate
|
134
104
|
Set-Cookie:
|
135
|
-
-
|
136
|
-
- csrftoken=0433d840e863edb10666afa87b2a068b; expires=Thu, 26-Feb-2015 19:42:54
|
105
|
+
- csrftoken=77fceb42170f31889c0d18c1b719de25; expires=Fri, 22-Apr-2016 14:06:25
|
137
106
|
GMT; Max-Age=31449600; Path=/
|
138
|
-
- mid=
|
107
|
+
- mid=VTpN4QAEAAHu4KvWNVG6zftRYgfJ; expires=Thu, 19-Apr-2035 14:06:25 GMT; Max-Age=630720000;
|
139
108
|
Path=/
|
140
|
-
Vary:
|
141
|
-
- Cookie, Accept-Language, Accept-Encoding
|
142
|
-
Content-Length:
|
143
|
-
- '245'
|
144
109
|
Connection:
|
145
110
|
- keep-alive
|
111
|
+
Content-Length:
|
112
|
+
- '1351'
|
146
113
|
body:
|
147
114
|
encoding: UTF-8
|
148
|
-
string: '{"provider_url":"
|
149
|
-
|
115
|
+
string: '{"provider_url":"https:\/\/instagram.com\/","media_id":"320942086917192799_244467814","author_name":"corylown","height":null,"thumbnail_url":"https:\/\/distilleryimage7-a.akamaihd.net\/55dcf0ba2a8c11e29cc822000a1f96e3_7.jpg","thumbnail_width":612,"thumbnail_height":612,"provider_name":"Instagram","title":"Tethered","html":"\u003cblockquote
|
116
|
+
class=\"instagram-media\" data-instgrm-captioned data-instgrm-version=\"4\"
|
117
|
+
style=\" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px
|
118
|
+
0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px;
|
119
|
+
padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100%
|
120
|
+
- 2px);\"\u003e\u003cdiv style=\"padding:8px;\"\u003e \u003cdiv style=\" background:#F8F8F8;
|
121
|
+
line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;\"\u003e
|
122
|
+
\u003cdiv style=\" background:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf\/\/42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB\/lQPb79drWOyJVa\/DAvg9B\/rLB4cC+Nqgdz\/TvBbBnr6GBReqn\/nRmDgaQEej7WhonozjF+Y2I\/fZou\/qAAAAAElFTkSuQmCC);
|
123
|
+
display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px;
|
124
|
+
width:44px;\"\u003e\u003c\/div\u003e\u003c\/div\u003e \u003cp style=\" margin:8px
|
125
|
+
0 0 0; padding:0 4px;\"\u003e \u003ca href=\"https:\/\/instagram.com\/p\/R0NyCsK_xf\/\"
|
126
|
+
style=\" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal;
|
127
|
+
font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;\"
|
128
|
+
target=\"_top\"\u003eTethered\u003c\/a\u003e\u003c\/p\u003e \u003cp style=\"
|
129
|
+
color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px;
|
130
|
+
margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center;
|
131
|
+
text-overflow:ellipsis; white-space:nowrap;\"\u003eA photo posted by @corylown
|
132
|
+
on \u003ctime style=\" font-family:Arial,sans-serif; font-size:14px; line-height:17px;\"
|
133
|
+
datetime=\"2012-11-09T16:41:39+00:00\"\u003eNov 9, 2012 at 8:41am PST\u003c\/time\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/blockquote\u003e\n\u003cscript
|
134
|
+
async defer src=\"\/\/platform.instagram.com\/en_US\/embeds.js\"\u003e\u003c\/script\u003e","width":658,"version":"1.0","author_url":"https:\/\/instagram.com\/corylown","author_id":244467814,"type":"rich"}'
|
150
135
|
http_version:
|
151
|
-
recorded_at:
|
136
|
+
recorded_at: Fri, 24 Apr 2015 14:06:25 GMT
|
152
137
|
- request:
|
153
138
|
method: get
|
154
|
-
uri:
|
139
|
+
uri: https://api.instagram.com/oembed?format=json&url=http://instagram.com/p/R82ycNoNfn/
|
155
140
|
body:
|
156
141
|
encoding: US-ASCII
|
157
142
|
string: ''
|
@@ -159,98 +144,66 @@ http_interactions:
|
|
159
144
|
Accept-Encoding:
|
160
145
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
161
146
|
Accept:
|
162
|
-
-
|
147
|
+
- "*/*"
|
163
148
|
User-Agent:
|
164
|
-
-
|
149
|
+
- Mozilla/5.0 (compatible; ruby-oembed/0.8.13)
|
165
150
|
response:
|
166
151
|
status:
|
167
152
|
code: 200
|
168
153
|
message: OK
|
169
154
|
headers:
|
170
|
-
Cache-Control:
|
171
|
-
- private, no-cache, no-store, must-revalidate
|
172
|
-
Content-Language:
|
173
|
-
- en
|
174
|
-
Content-Type:
|
175
|
-
- application/json
|
176
|
-
Date:
|
177
|
-
- Thu, 27 Feb 2014 19:42:54 GMT
|
178
|
-
Expires:
|
179
|
-
- Sat, 01 Jan 2000 00:00:00 GMT
|
180
|
-
Pragma:
|
181
|
-
- no-cache
|
182
155
|
Server:
|
183
156
|
- nginx
|
184
|
-
|
185
|
-
-
|
186
|
-
-
|
187
|
-
|
188
|
-
- mid=Uw-VPgAEAAEij81IRus_AlKNWNP7; expires=Wed, 22-Feb-2034 19:42:54 GMT; Max-Age=630720000;
|
189
|
-
Path=/
|
190
|
-
Vary:
|
191
|
-
- Cookie, Accept-Language, Accept-Encoding
|
192
|
-
Content-Length:
|
193
|
-
- '249'
|
194
|
-
Connection:
|
195
|
-
- keep-alive
|
196
|
-
body:
|
197
|
-
encoding: UTF-8
|
198
|
-
string: '{"provider_url":"http:\/\/instagram.com\/","media_id":"323374234042685415_31727100","title":"Bubble
|
199
|
-
bubble...","url":"http:\/\/distilleryimage3.ak.instagram.com\/644f52a02d2f11e2b55e22000a9f09fb_7.jpg","author_name":"cazzerson","height":612,"width":612,"version":"1.0","author_url":"http:\/\/instagram.com\/cazzerson","author_id":31727100,"type":"photo","provider_name":"Instagram"}'
|
200
|
-
http_version:
|
201
|
-
recorded_at: Thu, 27 Feb 2014 19:42:54 GMT
|
202
|
-
- request:
|
203
|
-
method: get
|
204
|
-
uri: http://api.instagram.com/oembed?format=json&url=http://instagram.com/p/ZA1L0nINXi/
|
205
|
-
body:
|
206
|
-
encoding: US-ASCII
|
207
|
-
string: ''
|
208
|
-
headers:
|
209
|
-
Accept-Encoding:
|
210
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
211
|
-
Accept:
|
212
|
-
- '*/*'
|
213
|
-
User-Agent:
|
214
|
-
- Ruby
|
215
|
-
response:
|
216
|
-
status:
|
217
|
-
code: 404
|
218
|
-
message: NOT FOUND
|
219
|
-
headers:
|
220
|
-
Cache-Control:
|
221
|
-
- private, no-cache, no-store, must-revalidate
|
157
|
+
Date:
|
158
|
+
- Fri, 24 Apr 2015 14:06:25 GMT
|
159
|
+
Content-Type:
|
160
|
+
- application/json
|
222
161
|
Content-Language:
|
223
162
|
- en
|
224
|
-
Content-Type:
|
225
|
-
- text/html; charset=utf-8
|
226
|
-
Date:
|
227
|
-
- Thu, 27 Feb 2014 19:42:54 GMT
|
228
163
|
Expires:
|
229
164
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
165
|
+
Vary:
|
166
|
+
- Cookie, Accept-Language, Accept-Encoding
|
230
167
|
Pragma:
|
231
168
|
- no-cache
|
232
|
-
|
233
|
-
-
|
169
|
+
Cache-Control:
|
170
|
+
- private, no-cache, no-store, must-revalidate
|
234
171
|
Set-Cookie:
|
235
|
-
-
|
236
|
-
- csrftoken=d6266caf663f9909c87673d4d8f895a8; expires=Thu, 26-Feb-2015 19:42:54
|
172
|
+
- csrftoken=a357ae75d73113c0ea09f6a5920acacc; expires=Fri, 22-Apr-2016 14:06:25
|
237
173
|
GMT; Max-Age=31449600; Path=/
|
238
|
-
- mid=
|
174
|
+
- mid=VTpN4QAEAAGkXM9mXRPGp1GE9UtC; expires=Thu, 19-Apr-2035 14:06:25 GMT; Max-Age=630720000;
|
239
175
|
Path=/
|
240
|
-
Vary:
|
241
|
-
- Cookie, Accept-Language
|
242
|
-
Content-Length:
|
243
|
-
- '34'
|
244
176
|
Connection:
|
245
177
|
- keep-alive
|
178
|
+
Content-Length:
|
179
|
+
- '1393'
|
246
180
|
body:
|
247
181
|
encoding: UTF-8
|
248
|
-
string:
|
182
|
+
string: '{"provider_url":"https:\/\/instagram.com\/","media_id":"323374234042685415_31727100","author_name":"cazzerson","height":null,"thumbnail_url":"https:\/\/igcdn-photos-c-a.akamaihd.net\/hphotos-ak-xaf1\/outbound-distilleryimage3\/t0.0-17\/OBPTH\/644f52a02d2f11e2b55e22000a9f09fb_7.jpg","thumbnail_width":612,"thumbnail_height":612,"provider_name":"Instagram","title":"Bubble
|
183
|
+
bubble...","html":"\u003cblockquote class=\"instagram-media\" data-instgrm-captioned
|
184
|
+
data-instgrm-version=\"4\" style=\" background:#FFF; border:0; border-radius:3px;
|
185
|
+
box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin:
|
186
|
+
1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% -
|
187
|
+
2px); width:calc(100% - 2px);\"\u003e\u003cdiv style=\"padding:8px;\"\u003e
|
188
|
+
\u003cdiv style=\" background:#F8F8F8; line-height:0; margin-top:40px; padding:50%
|
189
|
+
0; text-align:center; width:100%;\"\u003e \u003cdiv style=\" background:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf\/\/42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB\/lQPb79drWOyJVa\/DAvg9B\/rLB4cC+Nqgdz\/TvBbBnr6GBReqn\/nRmDgaQEej7WhonozjF+Y2I\/fZou\/qAAAAAElFTkSuQmCC);
|
190
|
+
display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px;
|
191
|
+
width:44px;\"\u003e\u003c\/div\u003e\u003c\/div\u003e \u003cp style=\" margin:8px
|
192
|
+
0 0 0; padding:0 4px;\"\u003e \u003ca href=\"https:\/\/instagram.com\/p\/R82ycNoNfn\/\"
|
193
|
+
style=\" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal;
|
194
|
+
font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;\"
|
195
|
+
target=\"_top\"\u003eBubble bubble...\u003c\/a\u003e\u003c\/p\u003e \u003cp
|
196
|
+
style=\" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px;
|
197
|
+
margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center;
|
198
|
+
text-overflow:ellipsis; white-space:nowrap;\"\u003eA photo posted by @cazzerson
|
199
|
+
on \u003ctime style=\" font-family:Arial,sans-serif; font-size:14px; line-height:17px;\"
|
200
|
+
datetime=\"2012-11-13T01:13:54+00:00\"\u003eNov 12, 2012 at 5:13pm PST\u003c\/time\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/blockquote\u003e\n\u003cscript
|
201
|
+
async defer src=\"\/\/platform.instagram.com\/en_US\/embeds.js\"\u003e\u003c\/script\u003e","width":658,"version":"1.0","author_url":"https:\/\/instagram.com\/cazzerson","author_id":31727100,"type":"rich"}'
|
249
202
|
http_version:
|
250
|
-
recorded_at:
|
203
|
+
recorded_at: Fri, 24 Apr 2015 14:06:25 GMT
|
251
204
|
- request:
|
252
205
|
method: get
|
253
|
-
uri:
|
206
|
+
uri: https://api.instagram.com/oembed?format=json&url=http://instagram.com/p/k5LhuktiSC/
|
254
207
|
body:
|
255
208
|
encoding: US-ASCII
|
256
209
|
string: ''
|
@@ -258,43 +211,61 @@ http_interactions:
|
|
258
211
|
Accept-Encoding:
|
259
212
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
260
213
|
Accept:
|
261
|
-
-
|
214
|
+
- "*/*"
|
262
215
|
User-Agent:
|
263
|
-
-
|
216
|
+
- Mozilla/5.0 (compatible; ruby-oembed/0.8.13)
|
264
217
|
response:
|
265
218
|
status:
|
266
219
|
code: 200
|
267
220
|
message: OK
|
268
221
|
headers:
|
269
|
-
|
270
|
-
-
|
271
|
-
|
272
|
-
-
|
222
|
+
Server:
|
223
|
+
- nginx
|
224
|
+
Date:
|
225
|
+
- Fri, 24 Apr 2015 14:06:26 GMT
|
273
226
|
Content-Type:
|
274
227
|
- application/json
|
275
|
-
|
276
|
-
-
|
228
|
+
Content-Language:
|
229
|
+
- en
|
277
230
|
Expires:
|
278
231
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
232
|
+
Vary:
|
233
|
+
- Cookie, Accept-Language, Accept-Encoding
|
279
234
|
Pragma:
|
280
235
|
- no-cache
|
281
|
-
|
282
|
-
-
|
236
|
+
Cache-Control:
|
237
|
+
- private, no-cache, no-store, must-revalidate
|
283
238
|
Set-Cookie:
|
284
|
-
-
|
285
|
-
- csrftoken=65113997a68a232330752b7f4ecfc78e; expires=Thu, 26-Feb-2015 19:42:54
|
239
|
+
- csrftoken=06d3bb3b1f7a4ba826522411e4285e54; expires=Fri, 22-Apr-2016 14:06:26
|
286
240
|
GMT; Max-Age=31449600; Path=/
|
287
|
-
- mid=
|
241
|
+
- mid=VTpN4gAEAAFyrp01nR8WxGLcwi82; expires=Thu, 19-Apr-2035 14:06:26 GMT; Max-Age=630720000;
|
288
242
|
Path=/
|
289
|
-
Vary:
|
290
|
-
- Cookie, Accept-Language, Accept-Encoding
|
291
|
-
Content-Length:
|
292
|
-
- '243'
|
293
243
|
Connection:
|
294
244
|
- keep-alive
|
245
|
+
Content-Length:
|
246
|
+
- '1368'
|
295
247
|
body:
|
296
248
|
encoding: UTF-8
|
297
|
-
string: '{"provider_url":"
|
249
|
+
string: '{"provider_url":"https:\/\/instagram.com\/","media_id":"664613116276253826_1128023464","author_name":"bddnc","height":null,"thumbnail_url":"https:\/\/scontent.cdninstagram.com\/hphotos-xfp1\/t51.2885-15\/1725673_1407639456161936_589510248_n.jpg","thumbnail_width":640,"thumbnail_height":640,"provider_name":"Instagram","title":"six
|
250
|
+
#hunttesting","html":"\u003cblockquote class=\"instagram-media\" data-instgrm-captioned
|
251
|
+
data-instgrm-version=\"4\" style=\" background:#FFF; border:0; border-radius:3px;
|
252
|
+
box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin:
|
253
|
+
1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% -
|
254
|
+
2px); width:calc(100% - 2px);\"\u003e\u003cdiv style=\"padding:8px;\"\u003e
|
255
|
+
\u003cdiv style=\" background:#F8F8F8; line-height:0; margin-top:40px; padding:50%
|
256
|
+
0; text-align:center; width:100%;\"\u003e \u003cdiv style=\" background:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf\/\/42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB\/lQPb79drWOyJVa\/DAvg9B\/rLB4cC+Nqgdz\/TvBbBnr6GBReqn\/nRmDgaQEej7WhonozjF+Y2I\/fZou\/qAAAAAElFTkSuQmCC);
|
257
|
+
display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px;
|
258
|
+
width:44px;\"\u003e\u003c\/div\u003e\u003c\/div\u003e \u003cp style=\" margin:8px
|
259
|
+
0 0 0; padding:0 4px;\"\u003e \u003ca href=\"https:\/\/instagram.com\/p\/k5LhuktiSC\/\"
|
260
|
+
style=\" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal;
|
261
|
+
font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;\"
|
262
|
+
target=\"_top\"\u003esix #hunttesting\u003c\/a\u003e\u003c\/p\u003e \u003cp
|
263
|
+
style=\" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px;
|
264
|
+
margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center;
|
265
|
+
text-overflow:ellipsis; white-space:nowrap;\"\u003eA photo posted by @bddnc
|
266
|
+
on \u003ctime style=\" font-family:Arial,sans-serif; font-size:14px; line-height:17px;\"
|
267
|
+
datetime=\"2014-02-26T20:54:39+00:00\"\u003eFeb 26, 2014 at 12:54pm PST\u003c\/time\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/blockquote\u003e\n\u003cscript
|
268
|
+
async defer src=\"\/\/platform.instagram.com\/en_US\/embeds.js\"\u003e\u003c\/script\u003e","width":658,"version":"1.0","author_url":"https:\/\/instagram.com\/bddnc","author_id":1128023464,"type":"rich"}'
|
298
269
|
http_version:
|
299
|
-
recorded_at:
|
300
|
-
recorded_with: VCR 2.
|
270
|
+
recorded_at: Fri, 24 Apr 2015 14:06:26 GMT
|
271
|
+
recorded_with: VCR 2.9.3
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri:
|
5
|
+
uri: https://api.instagram.com/oembed?format=json&url=http://instagram.com/p/R0NyCsK_xf/
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -10,43 +10,61 @@ http_interactions:
|
|
10
10
|
Accept-Encoding:
|
11
11
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
12
|
Accept:
|
13
|
-
-
|
13
|
+
- "*/*"
|
14
14
|
User-Agent:
|
15
|
-
-
|
15
|
+
- Mozilla/5.0 (compatible; ruby-oembed/0.8.13)
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
|
-
|
22
|
-
-
|
23
|
-
|
24
|
-
-
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Fri, 24 Apr 2015 14:02:19 GMT
|
25
25
|
Content-Type:
|
26
26
|
- application/json
|
27
|
-
|
28
|
-
-
|
27
|
+
Content-Language:
|
28
|
+
- en
|
29
29
|
Expires:
|
30
30
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
31
|
+
Vary:
|
32
|
+
- Cookie, Accept-Language, Accept-Encoding
|
31
33
|
Pragma:
|
32
34
|
- no-cache
|
33
|
-
|
34
|
-
-
|
35
|
+
Cache-Control:
|
36
|
+
- private, no-cache, no-store, must-revalidate
|
35
37
|
Set-Cookie:
|
36
|
-
-
|
37
|
-
- csrftoken=e2b7546b8f6205ce3b63f01ddd5ed9e8; expires=Wed, 25-Feb-2015 21:56:54
|
38
|
+
- csrftoken=38177ebb04cbab402bd6873db2c70d5c; expires=Fri, 22-Apr-2016 14:02:19
|
38
39
|
GMT; Max-Age=31449600; Path=/
|
39
|
-
- mid=
|
40
|
+
- mid=VTpM6wAEAAFkIMLVGldYscBUFcuc; expires=Thu, 19-Apr-2035 14:02:19 GMT; Max-Age=630720000;
|
40
41
|
Path=/
|
41
|
-
Vary:
|
42
|
-
- Cookie, Accept-Language, Accept-Encoding
|
43
|
-
Content-Length:
|
44
|
-
- '243'
|
45
42
|
Connection:
|
46
43
|
- keep-alive
|
44
|
+
Content-Length:
|
45
|
+
- '1351'
|
47
46
|
body:
|
48
47
|
encoding: UTF-8
|
49
|
-
string: '{"provider_url":"
|
48
|
+
string: '{"provider_url":"https:\/\/instagram.com\/","media_id":"320942086917192799_244467814","author_name":"corylown","height":null,"thumbnail_url":"https:\/\/distilleryimage7-a.akamaihd.net\/55dcf0ba2a8c11e29cc822000a1f96e3_7.jpg","thumbnail_width":612,"thumbnail_height":612,"provider_name":"Instagram","title":"Tethered","html":"\u003cblockquote
|
49
|
+
class=\"instagram-media\" data-instgrm-captioned data-instgrm-version=\"4\"
|
50
|
+
style=\" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px
|
51
|
+
0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px;
|
52
|
+
padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100%
|
53
|
+
- 2px);\"\u003e\u003cdiv style=\"padding:8px;\"\u003e \u003cdiv style=\" background:#F8F8F8;
|
54
|
+
line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;\"\u003e
|
55
|
+
\u003cdiv style=\" background:url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf\/\/42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB\/lQPb79drWOyJVa\/DAvg9B\/rLB4cC+Nqgdz\/TvBbBnr6GBReqn\/nRmDgaQEej7WhonozjF+Y2I\/fZou\/qAAAAAElFTkSuQmCC);
|
56
|
+
display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px;
|
57
|
+
width:44px;\"\u003e\u003c\/div\u003e\u003c\/div\u003e \u003cp style=\" margin:8px
|
58
|
+
0 0 0; padding:0 4px;\"\u003e \u003ca href=\"https:\/\/instagram.com\/p\/R0NyCsK_xf\/\"
|
59
|
+
style=\" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal;
|
60
|
+
font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;\"
|
61
|
+
target=\"_top\"\u003eTethered\u003c\/a\u003e\u003c\/p\u003e \u003cp style=\"
|
62
|
+
color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px;
|
63
|
+
margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center;
|
64
|
+
text-overflow:ellipsis; white-space:nowrap;\"\u003eA photo posted by @corylown
|
65
|
+
on \u003ctime style=\" font-family:Arial,sans-serif; font-size:14px; line-height:17px;\"
|
66
|
+
datetime=\"2012-11-09T16:41:39+00:00\"\u003eNov 9, 2012 at 8:41am PST\u003c\/time\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/blockquote\u003e\n\u003cscript
|
67
|
+
async defer src=\"\/\/platform.instagram.com\/en_US\/embeds.js\"\u003e\u003c\/script\u003e","width":658,"version":"1.0","author_url":"https:\/\/instagram.com\/corylown","author_id":244467814,"type":"rich"}'
|
50
68
|
http_version:
|
51
|
-
recorded_at:
|
52
|
-
recorded_with: VCR 2.
|
69
|
+
recorded_at: Fri, 24 Apr 2015 14:02:19 GMT
|
70
|
+
recorded_with: VCR 2.9.3
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lentil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Casden
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-04-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
@@ -111,6 +111,20 @@ dependencies:
|
|
111
111
|
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: 1.1.2
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: hashie
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - "~>"
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 3.4.1
|
121
|
+
type: :runtime
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 3.4.1
|
114
128
|
- !ruby/object:Gem::Dependency
|
115
129
|
name: modernizr-rails
|
116
130
|
requirement: !ruby/object:Gem::Requirement
|
@@ -285,14 +299,14 @@ dependencies:
|
|
285
299
|
requirements:
|
286
300
|
- - "~>"
|
287
301
|
- !ruby/object:Gem::Version
|
288
|
-
version: 0.
|
302
|
+
version: 0.7.1
|
289
303
|
type: :runtime
|
290
304
|
prerelease: false
|
291
305
|
version_requirements: !ruby/object:Gem::Requirement
|
292
306
|
requirements:
|
293
307
|
- - "~>"
|
294
308
|
- !ruby/object:Gem::Version
|
295
|
-
version: 0.
|
309
|
+
version: 0.7.1
|
296
310
|
- !ruby/object:Gem::Dependency
|
297
311
|
name: kaminari
|
298
312
|
requirement: !ruby/object:Gem::Requirement
|
@@ -307,6 +321,34 @@ dependencies:
|
|
307
321
|
- - "~>"
|
308
322
|
- !ruby/object:Gem::Version
|
309
323
|
version: 0.16.1
|
324
|
+
- !ruby/object:Gem::Dependency
|
325
|
+
name: oj
|
326
|
+
requirement: !ruby/object:Gem::Requirement
|
327
|
+
requirements:
|
328
|
+
- - "~>"
|
329
|
+
- !ruby/object:Gem::Version
|
330
|
+
version: 2.12.4
|
331
|
+
type: :runtime
|
332
|
+
prerelease: false
|
333
|
+
version_requirements: !ruby/object:Gem::Requirement
|
334
|
+
requirements:
|
335
|
+
- - "~>"
|
336
|
+
- !ruby/object:Gem::Version
|
337
|
+
version: 2.12.4
|
338
|
+
- !ruby/object:Gem::Dependency
|
339
|
+
name: oj_mimic_json
|
340
|
+
requirement: !ruby/object:Gem::Requirement
|
341
|
+
requirements:
|
342
|
+
- - "~>"
|
343
|
+
- !ruby/object:Gem::Version
|
344
|
+
version: 1.0.1
|
345
|
+
type: :runtime
|
346
|
+
prerelease: false
|
347
|
+
version_requirements: !ruby/object:Gem::Requirement
|
348
|
+
requirements:
|
349
|
+
- - "~>"
|
350
|
+
- !ruby/object:Gem::Version
|
351
|
+
version: 1.0.1
|
310
352
|
- !ruby/object:Gem::Dependency
|
311
353
|
name: sqlite3
|
312
354
|
requirement: !ruby/object:Gem::Requirement
|
@@ -397,14 +439,14 @@ dependencies:
|
|
397
439
|
requirements:
|
398
440
|
- - "~>"
|
399
441
|
- !ruby/object:Gem::Version
|
400
|
-
version: 0.
|
442
|
+
version: 0.10.0
|
401
443
|
type: :development
|
402
444
|
prerelease: false
|
403
445
|
version_requirements: !ruby/object:Gem::Requirement
|
404
446
|
requirements:
|
405
447
|
- - "~>"
|
406
448
|
- !ruby/object:Gem::Version
|
407
|
-
version: 0.
|
449
|
+
version: 0.10.0
|
408
450
|
- !ruby/object:Gem::Dependency
|
409
451
|
name: pry-rails
|
410
452
|
requirement: !ruby/object:Gem::Requirement
|
@@ -467,14 +509,14 @@ dependencies:
|
|
467
509
|
requirements:
|
468
510
|
- - "~>"
|
469
511
|
- !ruby/object:Gem::Version
|
470
|
-
version: 1.
|
512
|
+
version: 1.5.1
|
471
513
|
type: :development
|
472
514
|
prerelease: false
|
473
515
|
version_requirements: !ruby/object:Gem::Requirement
|
474
516
|
requirements:
|
475
517
|
- - "~>"
|
476
518
|
- !ruby/object:Gem::Version
|
477
|
-
version: 1.
|
519
|
+
version: 1.5.1
|
478
520
|
- !ruby/object:Gem::Dependency
|
479
521
|
name: yard
|
480
522
|
requirement: !ruby/object:Gem::Requirement
|
@@ -647,6 +689,8 @@ files:
|
|
647
689
|
- db/migrate/20130506205348_add_do_not_request_donation_to_lentil_images.rb
|
648
690
|
- db/migrate/20131205181204_add_last_donor_agreement_failure_date_to_lentil_images.rb
|
649
691
|
- db/migrate/20141106172834_add_type_to_images.rb
|
692
|
+
- db/migrate/20150311004606_add_suppressed_to_images.rb
|
693
|
+
- db/migrate/20150422123522_add_indexes_to_images.rb
|
650
694
|
- db/seeds.rb
|
651
695
|
- lib/generators/lentil/USAGE
|
652
696
|
- lib/generators/lentil/install_generator.rb
|