Class: AndroidMarket::Session
- Inherits:
-
Object
- Object
- AndroidMarket::Session
- Defined in:
- lib/android_market/session.rb
Constant Summary collapse
- SERVICE =
"android"
- URL_LOGIN =
"https://www.google.com/accounts/ClientLogin"
- PROTOCOL_VERSION =
2
- ACCOUNT_TYPE =
{ :google => 'GOOGLE', :hosted => 'HOSTED', :both => 'HOSTED_OR_GOOGLE' }
Instance Attribute Summary collapse
-
#auth_sub_token ⇒ Object
Returns the value of attribute auth_sub_token.
-
#context_builder ⇒ Object
Returns the value of attribute context_builder.
Instance Method Summary collapse
- #append(request_group, &block) ⇒ Object
- #execute_protobuf(request) ⇒ Object
- #execute_raw_http_query(request) ⇒ Object
- #flush ⇒ Object
-
#initialize ⇒ Session
constructor
A new instance of Session.
- #login(email, password, account_type = ) ⇒ Object
- #set_auth_sub_token(auth_sub_token) ⇒ Object
- #set_locale(locale) ⇒ Object
- #set_operator(alpha, sim_alpha, numeric, sim_numeric) ⇒ Object
- #set_operator_o2 ⇒ Object
- #set_operator_sfr ⇒ Object
- #set_operator_simyo ⇒ Object
- #set_operator_sunrise ⇒ Object
- #set_operator_tmobile ⇒ Object
Constructor Details
#initialize ⇒ Session
Returns a new instance of Session.
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/android_market/session.rb', line 21 def initialize @callbacks = [] @request_builder = Request.new_builder() @context_builder = RequestContext.new_builder() @context_builder.set_unknown1(0) @context_builder.set_version(1002) @context_builder.set_android_id("0000000000000000") @context_builder.set_device_and_sdk_version("sapphire:7") set_locale(JavaUtil::Locale.get_default) set_operator_tmobile end |
Instance Attribute Details
#auth_sub_token ⇒ Object
Returns the value of attribute auth_sub_token.
19 20 21 |
# File 'lib/android_market/session.rb', line 19 def auth_sub_token @auth_sub_token end |
#context_builder ⇒ Object
Returns the value of attribute context_builder.
19 20 21 |
# File 'lib/android_market/session.rb', line 19 def context_builder @context_builder end |
Instance Method Details
#append(request_group, &block) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/android_market/session.rb', line 85 def append(request_group, &block) case request_group when Market::AppsRequest @request_builder.add_request_group(RequestGroup.new_builder.set_apps_request(request_group)) when Market::GetImageRequest @request_builder.add_request_group(RequestGroup.new_builder.set_image_request(request_group)) when Market::CommentsRequest @request_builder.add_request_group(RequestGroup.new_builder.set_comments_request(request_group)) when Market::CategoriesRequest @request_builder.add_request_group(RequestGroup.new_builder.set_categories_request(request_group)) end @callbacks << block if block_given? end |
#execute_protobuf(request) ⇒ Object
144 145 146 147 148 149 150 151 152 |
# File 'lib/android_market/session.rb', line 144 def execute_protobuf(request) request_string = String.from_java_bytes(request.to_byte_array) response_bytes = execute_raw_http_query(request_string) begin return Response.parse_from(response_bytes) rescue => ex raise RuntimeError, ex. end end |
#execute_raw_http_query(request) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/android_market/session.rb', line 155 def execute_raw_http_query(request) url = JavaNet::URL.new("http://android.clients.google.com/market/api/ApiRequest") connection = url.open_connection connection.set_do_output(true) connection.set_request_method('POST') connection.set_request_property('Cookie','ANDROID=' + @auth_sub_token) connection.set_request_property('User-Agent', 'Android-Market/2 (sapphire PLAT-RC33); gzip') connection.set_request_property('Content-Type', 'application/x-www-form-urlencoded') connection.set_request_property('Accept-Charset','ISO-8859-1,utf-8;q=0.7,*;q=0.7') request64 = Tools.urlsafe_encode64(request) request_data = "version=#{PROTOCOL_VERSION}&request=#{request64}".to_java connection.set_fixed_length_streaming_mode(request_data.get_bytes("UTF-8").length) os = connection.get_output_stream os.write(request_data.get_bytes) os.close if connection.get_response_code >= 400 raise RuntimeError, "Response Code = #{connection.get_response_code}, " + "Message = #{connection.}" end is = connection.get_input_stream gz_is = java.util.zip::GZIPInputStream.new(is) ba_os = java.io::ByteArrayOutputStream.new buff = Java::byte[1024].new #"a buffer string".to_java_bytes while(true) do nb = gz_is.read(buff) nb < 0 ? break : ba_os.write(buff, 0, nb) end is.close connection.disconnect return ba_os.to_byte_array end |
#flush ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/android_market/session.rb', line 100 def flush context = @context_builder.build @context_builder = RequestContext.new_builder(context) @request_builder.set_context(context) response = execute_protobuf(@request_builder.build) response.get_response_group_list.to_a.each do |res| value = res.get_apps_response if res.has_apps_response value = res.get_categories_response if res.has_categories_response value = res.get_comments_response if res.has_comments_response value = res.get_image_response if res.has_image_response @callbacks.first.call(context, value) end @request_builder = Request.new_builder @callbacks.clear end |
#login(email, password, account_type = ) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/android_market/session.rb', line 71 def login(email, password, account_type = ACCOUNT_TYPE[:both]) params = { 'Email' => email, 'Passwd' => password, 'service' => SERVICE, 'accountType' => account_type } Tools.post_url(URL_LOGIN, params)[/Auth=(.{200,204})$/i] if auth_key = $1 set_auth_sub_token(auth_key) else raise RuntimeError, "auth_key not found" end end |
#set_auth_sub_token(auth_sub_token) ⇒ Object
66 67 68 69 |
# File 'lib/android_market/session.rb', line 66 def set_auth_sub_token(auth_sub_token) @context_builder.set_auth_sub_token(auth_sub_token) self.auth_sub_token = auth_sub_token end |
#set_locale(locale) ⇒ Object
34 35 36 37 |
# File 'lib/android_market/session.rb', line 34 def set_locale(locale) @context_builder.set_user_language(locale.language.downcase) @context_builder.set_user_country(locale.country.downcase) end |
#set_operator(alpha, sim_alpha, numeric, sim_numeric) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/android_market/session.rb', line 39 def set_operator(alpha, sim_alpha, numeric, sim_numeric) @context_builder.set_operator_alpha(alpha) @context_builder.set_sim_operator_alpha(sim_alpha) @context_builder.set_operator_numeric(numeric) @context_builder.set_sim_operator_numeric(sim_numeric) end |
#set_operator_o2 ⇒ Object
54 55 56 |
# File 'lib/android_market/session.rb', line 54 def set_operator_o2 set_operator("o2 - de","o2 - de", "26207", "26207") end |
#set_operator_sfr ⇒ Object
50 51 52 |
# File 'lib/android_market/session.rb', line 50 def set_operator_sfr set_operator("F SFR", "F SFR", "20810", "20810") end |
#set_operator_simyo ⇒ Object
58 59 60 |
# File 'lib/android_market/session.rb', line 58 def set_operator_simyo set_operator("E-Plus", "simyo", "26203", "26203") end |
#set_operator_sunrise ⇒ Object
62 63 64 |
# File 'lib/android_market/session.rb', line 62 def set_operator_sunrise set_operator("sunrise", "sunrise", "22802", "22802") end |
#set_operator_tmobile ⇒ Object
46 47 48 |
# File 'lib/android_market/session.rb', line 46 def set_operator_tmobile set_operator("T-Mobile", "T-Mobile", "310260", "310260") end |