itunes_store_transporter 0.0.2 → 0.1.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 +7 -0
- data/Changes +7 -0
- data/README.rdoc +27 -3
- data/bin/itms +82 -7
- data/lib/itunes/store/transporter/version.rb +1 -1
- metadata +33 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 03bfd32d4a15484365dbcb15dbd92ef31f26245b
|
4
|
+
data.tar.gz: 664a9e8ec021008970be52d5b25589e88f492726
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 53aacb46d02bc9303bd96521cbb0d0600fe6b065bb32cdf70d638c3d3f71466a9a2cc8dd0e9ddeb4b8a84dc0c14e3b7d14022775e33acf2fdaebb64992d1838c
|
7
|
+
data.tar.gz: 47a88fa62dd96a654f9086f35d41b9e8972eed344abae81db17878451e84bf4d0f6e18ae6076d149efeeb6765f6852b0f5569e2c2121f7fc04880beb582baa58
|
data/Changes
CHANGED
data/README.rdoc
CHANGED
@@ -35,7 +35,7 @@ supports the following operations:
|
|
35
35
|
* Upload packages
|
36
36
|
* Validate packages
|
37
37
|
* Retrieve status information
|
38
|
-
* Lookup package metadata
|
38
|
+
* Lookup package metadata and video assets
|
39
39
|
* List providers
|
40
40
|
* Retrieve iTunes metadata schemas
|
41
41
|
|
@@ -73,6 +73,30 @@ This can be fixed by modifying +iTMSTransporter.CMD+ (note that the following do
|
|
73
73
|
* +COMMAND+ - The command (<code>iTunes::Store::Transporter</code> method) to run
|
74
74
|
* +OPTIONS+ - These are quivalent to the given +COMMAND+'s options except they must be given in long option format. For example <code>:apple_id => "X123"</code> would be <code>--apple-id=X123</code>. Boolean options can be negated with the <code>--no-</code> prefix.
|
75
75
|
|
76
|
+
==== Lookup command
|
77
|
+
|
78
|
+
The lookup command differs slightly from the gem by allowing you to download low-quality copies of the assets associated with the looked up metadata.
|
79
|
+
These assets are created by Apple (at the time of this writing, Apple only allows you to download full and preview assets, there is nothing
|
80
|
+
in +itms+ that would prevent you from downloading other types of assets if/when they're supported).
|
81
|
+
|
82
|
+
For example, to lookup the metadata for package +X123+ and download low-quality copies of all the assets:
|
83
|
+
|
84
|
+
itms lookup --vendor-id=X123 --assets
|
85
|
+
|
86
|
+
To download a particular asset type just provide its name:
|
87
|
+
|
88
|
+
itms lookup --vendor-id=X123 --assets=preview
|
89
|
+
|
90
|
+
If there are multiple territories this will download the preview assets for each of them. To only download assets in a given territory or territories use:
|
91
|
+
|
92
|
+
itms lookup --vendor-id=X123 --assets=preview:US
|
93
|
+
itms lookup --vendor-id=X123 --assets=preview:US:BR
|
94
|
+
|
95
|
+
If necessary multiple asset types can be seperated by a comma:
|
96
|
+
|
97
|
+
itms lookup --vendor-id=X123 --assets=full,preview
|
98
|
+
itms lookup --vendor-id=X123 --assets=full,preview:MX
|
99
|
+
|
76
100
|
==== Config file
|
77
101
|
|
78
102
|
Default options and email notifications can be placed in a YAML file at <code>$HOME/.itms</code>. To skip loading the config file use the <code>--no-config</code> option.
|
@@ -120,14 +144,14 @@ As you can see, command options are turned into template variables.
|
|
120
144
|
|
121
145
|
=== More Info
|
122
146
|
|
123
|
-
* Docs: http://ruby-doc.org/gems/docs/i/itunes_store_transporter-0.0
|
147
|
+
* Docs: http://ruby-doc.org/gems/docs/i/itunes_store_transporter-0.1.0/README_rdoc.html
|
124
148
|
* Bugs: http://github.com/sshaw/itunes_store_transporter/issues
|
125
149
|
* Source Code: http://github.com/sshaw/itunes_store_transporter
|
126
150
|
* Web Based GUI: http://github.com/sshaw/itunes_store_transporter_web
|
127
151
|
|
128
152
|
=== Author
|
129
153
|
|
130
|
-
Skye Shaw [sshaw AT
|
154
|
+
Skye Shaw [sshaw AT gmail.com]
|
131
155
|
|
132
156
|
=== License
|
133
157
|
|
data/bin/itms
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "erb"
|
4
|
+
require "uri"
|
4
5
|
require "yaml"
|
5
6
|
require "net/smtp"
|
7
|
+
require "net/http"
|
8
|
+
require "rexml/document"
|
6
9
|
require "itunes/store/transporter"
|
7
10
|
|
8
11
|
# Command line interface to the ITunes::Store::Transporter library.
|
@@ -44,11 +47,84 @@ module Command
|
|
44
47
|
end
|
45
48
|
|
46
49
|
class Lookup < Base
|
50
|
+
def initialize(options)
|
51
|
+
super
|
52
|
+
@assets = options.delete(:assets)
|
53
|
+
@assets = @assets.split(",").map { |x| x.split(":").grep(/\w/) } if String === @assets
|
54
|
+
@package = "#{options[:apple_id] || options[:vendor_id]}.itmsp"
|
55
|
+
Dir.mkdir(@package)
|
56
|
+
end
|
57
|
+
|
47
58
|
def execute(args = [])
|
48
|
-
filename = "#{@options[:apple_id] || @options[:vendor_id]}.xml"
|
49
59
|
metadata = @itms.lookup
|
50
|
-
File.open(
|
51
|
-
puts "Metadata saved
|
60
|
+
File.open("#@package/metadata.xml", "w") { |f| f.write(metadata) }
|
61
|
+
puts "Metadata saved in #@package"
|
62
|
+
retrieve_assets(metadata) if @assets
|
63
|
+
end
|
64
|
+
|
65
|
+
def retrieve_assets(metadata)
|
66
|
+
doc = REXML::Document.new(metadata)
|
67
|
+
assets = build_asset_list(doc)
|
68
|
+
|
69
|
+
if assets.none?
|
70
|
+
puts "No assets found"
|
71
|
+
else
|
72
|
+
assets.each do |asset|
|
73
|
+
puts "Downloading #{asset[:type]} asset #{asset[:filename]}"
|
74
|
+
uri = URI.parse(asset[:url])
|
75
|
+
|
76
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
77
|
+
File.open("#@package/#{asset[:filename]}", "w") do |io|
|
78
|
+
http.request_get(uri.path) do |res|
|
79
|
+
raise res.message unless Net::HTTPSuccess === res
|
80
|
+
res.read_body do |data|
|
81
|
+
io.write data
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
rescue => e
|
89
|
+
raise "Asset retrieval failed: #{e}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def build_asset_list(doc)
|
93
|
+
asset_info = lambda do |xpath|
|
94
|
+
doc.get_elements(xpath).map do |e|
|
95
|
+
file = {}
|
96
|
+
file[:url] = e.get_text("//*[ @key = 'proxy-encode-url' ]").to_s
|
97
|
+
type = e.attribute("type")
|
98
|
+
file[:type] = type.value if type
|
99
|
+
file[:filename] = e.get_text(".//data_file[ @role = 'source' ]/file_name").to_s
|
100
|
+
file[:territories] = e.get_elements(".//territory").map { |t| t.get_text.to_s }
|
101
|
+
file
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
files = []
|
106
|
+
if @assets == true
|
107
|
+
files = asset_info["//asset[ .//*[ @key = 'proxy-encode-url' ]]"]
|
108
|
+
else
|
109
|
+
@assets.each do |asset|
|
110
|
+
type, regions = asset.shift, asset
|
111
|
+
regions.clear if type == "full" # There's only one full asset per package
|
112
|
+
|
113
|
+
xpath = "//asset[ @type = '#{type}'"
|
114
|
+
if regions.any?
|
115
|
+
xpath << " and (%s)" % regions.map { |code| ".//territory = '#{code}'" }.join(" or ")
|
116
|
+
end
|
117
|
+
xpath << "and .//*[ @key = 'proxy-encode-url' ]]"
|
118
|
+
|
119
|
+
info = asset_info[xpath]
|
120
|
+
unknown = regions - info.map { |file| file[:territories] }.flatten
|
121
|
+
raise "No #{type} asset for #{unknown.join ", "}" if unknown.any?
|
122
|
+
|
123
|
+
files.concat info
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
files
|
52
128
|
end
|
53
129
|
end
|
54
130
|
|
@@ -57,7 +133,6 @@ module Command
|
|
57
133
|
filename = "#{@options[:version]}-#{@options[:type]}.rng"
|
58
134
|
schema = @itms.schema
|
59
135
|
File.open(filename, "w") { |f| f.write(schema) }
|
60
|
-
puts "Schema saved to #{filename}"
|
61
136
|
end
|
62
137
|
end
|
63
138
|
|
@@ -70,7 +145,7 @@ module Command
|
|
70
145
|
super
|
71
146
|
end
|
72
147
|
|
73
|
-
def execute(args = [])
|
148
|
+
def execute(args = [])
|
74
149
|
info = @itms.status
|
75
150
|
info.each do |k, v|
|
76
151
|
next if k == :status
|
@@ -131,7 +206,7 @@ class Email
|
|
131
206
|
|
132
207
|
def initialize(config = {})
|
133
208
|
unless config["to"]
|
134
|
-
raise "No email
|
209
|
+
raise "No email recipients provided, you must specify at least one"
|
135
210
|
end
|
136
211
|
|
137
212
|
@config = config
|
@@ -264,7 +339,7 @@ rescue ITunes::Store::Transporter::ExecutionError => e
|
|
264
339
|
options[:error] = e
|
265
340
|
send_email(email_options["failure"], options)
|
266
341
|
exit 1
|
267
|
-
rescue
|
342
|
+
rescue => e
|
268
343
|
$stderr.puts e
|
269
344
|
exit 2
|
270
345
|
end
|
metadata
CHANGED
@@ -1,53 +1,60 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itunes_store_transporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Skye Shaw
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: childprocess
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 0.3.2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.2
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: optout
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 0.0.2
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.2
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: rake
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
45
|
- - ~>
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: 0.9.2
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.2
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: rspec
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -57,11 +64,18 @@ dependencies:
|
|
57
64
|
version: '3'
|
58
65
|
type: :development
|
59
66
|
prerelease: false
|
60
|
-
version_requirements:
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ~>
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '2.9'
|
72
|
+
- - <
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3'
|
61
75
|
description: ! " iTunes::Store::Transporter is a wrapper around Apple's iTMSTransporter
|
62
76
|
program. It allows you to upload packages to the \n Apple Store, validate them,
|
63
77
|
retrieve status information, lookup metadata, and more!\n"
|
64
|
-
email:
|
78
|
+
email: skye.shaw@gmail.com
|
65
79
|
executables:
|
66
80
|
- itms
|
67
81
|
extensions: []
|
@@ -100,27 +114,26 @@ files:
|
|
100
114
|
homepage: http://github.com/sshaw/itunes_store_transporter
|
101
115
|
licenses:
|
102
116
|
- MIT
|
117
|
+
metadata: {}
|
103
118
|
post_install_message:
|
104
119
|
rdoc_options: []
|
105
120
|
require_paths:
|
106
121
|
- lib
|
107
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
-
none: false
|
109
123
|
requirements:
|
110
124
|
- - ! '>='
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '0'
|
113
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
128
|
requirements:
|
116
129
|
- - ! '>='
|
117
130
|
- !ruby/object:Gem::Version
|
118
131
|
version: '0'
|
119
132
|
requirements: []
|
120
133
|
rubyforge_project:
|
121
|
-
rubygems_version:
|
134
|
+
rubygems_version: 2.0.3
|
122
135
|
signing_key:
|
123
|
-
specification_version:
|
136
|
+
specification_version: 4
|
124
137
|
summary: Upload and manage your assets in the iTunes Store using the iTunes Store's
|
125
138
|
Transporter (iTMSTransporter).
|
126
139
|
test_files:
|