wwdcdownloader 20.16.0 → 20.17.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/Readme.md +3 -3
- data/VERSION +1 -1
- data/lib/wwdcdownloader.rb +67 -6
- data/wwdcdownloader.gemspec +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 434cdc1a01d9bbda7696e45a6870648aa8de563d
|
4
|
+
data.tar.gz: d4732cbaaedfde0eb0541e1db03c5d6eed5e3b6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 961178f2c810fd9c2c57eae4a8f1e18985e656b6246c6246b1330c3cc055f7054c1dd336897b620e73ff1c4e54f1e80a1008ae61516a7832aa0303e5c58a89cb
|
7
|
+
data.tar.gz: 5b75935d3e17af52501f3e146f2694bc6ea24baa46e3600158e2541a17958977df5f76240e4e3cef549d59ae4dc02d9e7a01edbf5e724fc3405bd9f3e0cfa188
|
data/LICENSE.txt
CHANGED
data/Readme.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# WWDC
|
1
|
+
# WWDC 2017 Sample Code Downloader
|
2
2
|
|
3
3
|
![First World WWDC Sample Code Problem](http://cdn.memegenerator.net/instances/400x/21928207.jpg)
|
4
4
|
|
5
5
|
## Sad days are over
|
6
6
|
|
7
|
-
This script will download all the session material for you if you are a WWDC
|
7
|
+
This script will download all the session material for you if you are a WWDC 2017 attendee OR NOT!
|
8
8
|
You can now simply install WWDC-Downloader as a ruby gem like this:
|
9
9
|
|
10
10
|
gem install wwdcdownloader
|
@@ -17,6 +17,6 @@ Run the script like this:
|
|
17
17
|
|
18
18
|
wwdcdownloader [<target-dir>]
|
19
19
|
|
20
|
-
The script will create a directory called "
|
20
|
+
The script will create a directory called "wwdc2017-assets" (or `target-dir` if given) in the directory you run the script from.
|
21
21
|
|
22
22
|
That's it. Enjoy and see you next year.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
20.
|
1
|
+
20.17.0
|
data/lib/wwdcdownloader.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# Have fun. Use at your own risk.
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2017 Johannes Fahrenkrug
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'fileutils'
|
6
6
|
require 'net/http'
|
7
|
+
require 'uri'
|
7
8
|
|
8
9
|
begin
|
9
10
|
require 'json'
|
@@ -22,9 +23,9 @@ rescue LoadError => e
|
|
22
23
|
end
|
23
24
|
|
24
25
|
class WWDCDownloader
|
25
|
-
|
26
|
+
BASE_URI = 'https://devimages-cdn.apple.com/wwdc-services/h8a19f8f/049CCC2F-0D8A-4F7D-BAB9-2D8F5BAA7030/contents.json'
|
26
27
|
|
27
|
-
WWDC_LIBRARIES = [{:base => 'https://developer.apple.com/library/
|
28
|
+
WWDC_LIBRARIES = [{:base => 'https://developer.apple.com/library/content', :lib => '/navigation/library.json'}]
|
28
29
|
|
29
30
|
attr_accessor :downloaded_files, :dl_dir, :min_date, :proxy_uri
|
30
31
|
|
@@ -118,6 +119,66 @@ class WWDCDownloader
|
|
118
119
|
def load
|
119
120
|
mkdir(dl_dir)
|
120
121
|
|
122
|
+
# get the sessions JSON
|
123
|
+
self.read_url(BASE_URI) do |body|
|
124
|
+
res = JSON.parse(body)
|
125
|
+
|
126
|
+
sessions = res['contents']
|
127
|
+
resources = res['resources']
|
128
|
+
|
129
|
+
if sessions.size > 0
|
130
|
+
|
131
|
+
sessions.each do |session|
|
132
|
+
if session['type'] == 'Session' && session['eventId'] == 'wwdc2017'
|
133
|
+
title = session['title']
|
134
|
+
session_id = session['id'].gsub('wwdc2017-', '')
|
135
|
+
puts "Session #{session_id} '#{title}'..."
|
136
|
+
|
137
|
+
if session['related'] && session['related']['resources']
|
138
|
+
# Iterate over the resources
|
139
|
+
related_resource_ids = session['related']['resources']
|
140
|
+
did_download = false
|
141
|
+
|
142
|
+
# get the files
|
143
|
+
dirname = "#{dl_dir}/#{session_id}-#{title.gsub(/\/|&|!/, '')}"
|
144
|
+
puts " Creating #{dirname}"
|
145
|
+
did_create_dir = mkdir(dirname)
|
146
|
+
|
147
|
+
resources.each do |resource|
|
148
|
+
if resource['resource_type'] == 'samplecode' && related_resource_ids.include?(resource['id'])
|
149
|
+
puts " Found related resource #{resource['url']}"
|
150
|
+
|
151
|
+
# Zip file? download right away
|
152
|
+
if resource['url'] =~ /(\w+\.zip)$/
|
153
|
+
uri = URI.parse(resource['url'])
|
154
|
+
filename = File.basename(uri.path)
|
155
|
+
|
156
|
+
if download_file(resource['url'], filename, dirname, true)
|
157
|
+
did_download = true
|
158
|
+
end
|
159
|
+
# Sample code landing page?
|
160
|
+
else
|
161
|
+
# Sanitize URL
|
162
|
+
url = resource['url'].split('/Introduction/Intro.html')[0]
|
163
|
+
|
164
|
+
if download_sample_code_from_book_json("#{url}/book.json", url, dirname, false)
|
165
|
+
did_download = true
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
if !did_download and did_create_dir
|
172
|
+
Dir.delete(dirname)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
else
|
178
|
+
print "No sessions :(.\n"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
121
182
|
# scrape the WWDC libraries...
|
122
183
|
puts
|
123
184
|
puts "Scraping the WWDC libraries..."
|
@@ -165,7 +226,7 @@ class WWDCDownloader
|
|
165
226
|
end
|
166
227
|
|
167
228
|
def self.run!(*args)
|
168
|
-
puts "WWDC
|
229
|
+
puts "WWDC 2017 Session Material Downloader"
|
169
230
|
puts "by Johannes Fahrenkrug, @jfahrenkrug, springenwerk.com"
|
170
231
|
puts "See you next year!"
|
171
232
|
puts
|
@@ -175,10 +236,10 @@ class WWDCDownloader
|
|
175
236
|
dl_dir = if args.size == 1
|
176
237
|
args.last
|
177
238
|
else
|
178
|
-
'
|
239
|
+
'wwdc2017-assets'
|
179
240
|
end
|
180
241
|
|
181
|
-
w = WWDCDownloader.new(dl_dir, '
|
242
|
+
w = WWDCDownloader.new(dl_dir, '2017-06-01')
|
182
243
|
w.load
|
183
244
|
return 0
|
184
245
|
end
|
data/wwdcdownloader.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "wwdcdownloader"
|
8
|
-
s.version = "20.
|
8
|
+
s.version = "20.17.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Johannes Fahrenkrug"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2017-06-07"
|
13
13
|
s.description = "At each year's WWDC, Apple releases great sample projects. Unfortunately it is very tedious to manually download all these treasures through your browser. WWDC-Downloader solves this problem for you!"
|
14
14
|
s.email = "johannes@springenwerk.com"
|
15
15
|
s.executables = ["wwdcdownloader"]
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.homepage = "https://github.com/jfahrenkrug/WWDC-Downloader"
|
31
31
|
s.licenses = ["MIT"]
|
32
32
|
s.require_paths = ["lib"]
|
33
|
-
s.rubygems_version = "2.0.14"
|
33
|
+
s.rubygems_version = "2.0.14.1"
|
34
34
|
s.summary = "A small tool to download all the sample code of Apple's latest WWDC developer conference"
|
35
35
|
|
36
36
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wwdcdownloader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 20.
|
4
|
+
version: 20.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johannes Fahrenkrug
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.0.14
|
94
|
+
rubygems_version: 2.0.14.1
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: A small tool to download all the sample code of Apple's latest WWDC developer
|