steam-trade 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -6
- data/lib/Badge.rb +11 -5
- data/lib/Inventory.rb +52 -19
- data/lib/LoginExecutor.rb +2 -1
- data/lib/Misc.rb +24 -0
- data/lib/blueprints/game_inv_list.json +1 -0
- data/lib/meta/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 404b1b0e1b292caf96982ace83d1ff76f89f3b0e
|
4
|
+
data.tar.gz: 8fe1386619ccff5c5a070fd6f288f00b4b9dfefd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bd56dbd81304329324d0bfb95d9c96fabdd4352f4f38287a1420d8e679b7c4fa492a9647b7cc6b67f67be87074511ce0551db7f20f947f36d3b2538b207290e
|
7
|
+
data.tar.gz: d22b417c694361138746a5bc0edc93bfb537d955983d584fc88d81f267748d13977a02a602f18f8d0d4e653081e889b624e8c02901e2a8ba0836313102640f27
|
data/README.md
CHANGED
@@ -29,11 +29,10 @@ account.mobile_info('identity_secret')
|
|
29
29
|
|
30
30
|
```
|
31
31
|
## Getting someone's inventory
|
32
|
-
#### `normal_get_inventory('steamid','inventoryappid'
|
32
|
+
#### `normal_get_inventory('steamid','inventoryappid')`
|
33
33
|
- `steamid` is the target's steamid
|
34
|
-
- `inventoryappid` is the inventory type you want to load, ex : normal inventory(the one which holds trading cards), it's is 753
|
35
|
-
-
|
36
|
-
- if you call `normal_get_inventory()` with no params, it will be default use the current logged-in account `steamid`, `inventoryappid = 753` and `contextid = 6`
|
34
|
+
- `inventoryappid` is the inventory type you want to load, `ex : normal inventory(the one which holds trading cards), it's is 753`
|
35
|
+
- if you call `normal_get_inventory()` with no params, it will be default use the current logged-in account `steamid`, `inventoryappid = 753`
|
37
36
|
|
38
37
|
```ruby
|
39
38
|
require 'steam-trade'
|
@@ -43,7 +42,9 @@ account.mobile_info('identity_secret')
|
|
43
42
|
|
44
43
|
my_inventory = normal_get_inventory() #if you are logged in you can call this command with no parameters to get the logged account's inventory
|
45
44
|
|
46
|
-
partner_inventory = normal_get_inventory('76561198044170935')
|
45
|
+
partner_inventory = normal_get_inventory('76561198044170935') using steamid
|
46
|
+
partner_inventory = normal_get_inventory('https://steamcommunity.com/tradeoffer/new/?partner=410155236&token=H-yK-GFt') #using trade link
|
47
|
+
partner_inventory = normal_get_inventory('76561198044170935',)
|
47
48
|
```
|
48
49
|
the returned items from `normal_get_inventory()` are in the form of an array example : `[item1,item2,item3...itemN]`.
|
49
50
|
|
@@ -52,7 +53,15 @@ each item is a hash which contains information about the item in the form of `{"
|
|
52
53
|
`market_fee_app` key gives you the appid of the game's app ( for trading cards), for other items technically `inventoryappid` is the games appid.
|
53
54
|
|
54
55
|
`name` key gives you the item name.
|
55
|
-
####
|
56
|
+
#### `set_inventory_cache()`
|
57
|
+
`set_inventory_cache()` is:
|
58
|
+
|
59
|
+
- a switch to locally save each inventory you get to a local file.
|
60
|
+
- disabled by default, you need to initiate it by calling the command
|
61
|
+
- accepts a parameter `timer` which defaults to `timer = 120`, this parameter is the difference between the save file was created and the moment it was checked (upong trying to retrieve the inventory).
|
62
|
+
|
63
|
+
- this switch is useful if you are getting a "static" inventory or testing your code.
|
64
|
+
|
56
65
|
|
57
66
|
**IMPORTANT**: `normal_get_inventory()` will load the whole target inventory, for each **5k** of items, you are adding **~40MB** to your memory and of course will affect performance of the code and the computer
|
58
67
|
## Sending a trade offer
|
data/lib/Badge.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
module BadgeCommands
|
2
2
|
|
3
3
|
def sets_count(steamid = @steamid, use_nonmarketable = true)
|
4
|
-
|
5
|
-
|
6
4
|
if steamid == nil
|
7
5
|
output "no steamid specified"
|
8
6
|
return
|
9
7
|
end
|
10
8
|
|
9
|
+
if [TrueClass,FalseClass].include?(steamid.class) && @steamid != nil
|
10
|
+
use_nonmarketable = steamid
|
11
|
+
steamid = @steamid
|
12
|
+
elsif [TrueClass,FalseClass].include?(steamid.class) && @steamid == nil
|
13
|
+
raise "You are not logged in and did not specify a steamid"
|
14
|
+
end
|
15
|
+
|
16
|
+
steamid = verify_profileid_or_trade_link_or_steamid(steamid)
|
11
17
|
thread = Thread.new(steamid) { |steamid| ##getting name
|
12
18
|
targetname = ''
|
13
19
|
begin
|
@@ -49,7 +55,7 @@ module BadgeCommands
|
|
49
55
|
end
|
50
56
|
}
|
51
57
|
|
52
|
-
bigdata = JSON.parse(File.read("#{@libdir}
|
58
|
+
bigdata = JSON.parse(File.read("#{@libdir}blueprints/byappid.json",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))
|
53
59
|
counted = {}
|
54
60
|
|
55
61
|
sorted.each { |appid,cards|
|
@@ -90,8 +96,8 @@ module BadgeCommands
|
|
90
96
|
filename = persona
|
91
97
|
end
|
92
98
|
|
93
|
-
|
94
|
-
titles = JSON.parse(File.read("#{@libdir}
|
99
|
+
|
100
|
+
titles = JSON.parse(File.read("#{@libdir}blueprints/appid_title.json",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))
|
95
101
|
eachappidsets = eachappidsets.sort_by do |k,v|
|
96
102
|
v
|
97
103
|
end
|
data/lib/Inventory.rb
CHANGED
@@ -4,23 +4,52 @@ module InventoryCommands
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
def normal_get_inventory(steamid = @steamid ,appid = 753
|
7
|
+
def normal_get_inventory(steamid = @steamid ,appid = 753)
|
8
8
|
if steamid == nil
|
9
|
-
|
10
|
-
return
|
11
|
-
elsif steamid.to_i == 0 && steamid.include?("?partner=") ##supplied trade link
|
12
|
-
partner_raw = steamid.split('partner=',2)[1].split('&',2)[0]
|
13
|
-
steamid = partner_id_to_steam_id(partner_raw)
|
9
|
+
raise "not logged-in and no steamid specified"
|
14
10
|
end
|
15
|
-
|
11
|
+
|
12
|
+
|
13
|
+
appid = appid.to_s
|
14
|
+
context = 6
|
15
|
+
|
16
|
+
#verify given appid only
|
17
|
+
if (3..6).to_a.include?(steamid.to_i.to_s.length)
|
18
|
+
puts "we got an appid"
|
19
|
+
raise "You cannot give an appid only if you are not logged in" if @steamid == nil
|
20
|
+
appid = steamid.to_s
|
21
|
+
steamid = @steamid
|
22
|
+
end
|
23
|
+
# end given appid only
|
24
|
+
|
25
|
+
#verify given another game
|
26
|
+
if appid.to_s != "753"
|
27
|
+
puts "getting a new game"
|
28
|
+
context = 2
|
29
|
+
end
|
30
|
+
#end verify given another game
|
31
|
+
# end verify given appid only
|
32
|
+
#verify trade link
|
33
|
+
|
34
|
+
|
35
|
+
steamid = verify_profileid_or_trade_link_or_steamid(steamid)
|
36
|
+
|
37
|
+
raise "invalid steamid : #{steamid}, length of received :: #{steamid.to_s.length}, normal is 17" if steamid.to_s.length != 17
|
38
|
+
## verify appid
|
39
|
+
if ["753","730",'570','440'].include?(appid.to_s) == false
|
40
|
+
allgames = JSON.parse(File.read("#{@libdir}blueprints/game_inv_list.json"))
|
41
|
+
raise "invalid appid: #{appid}" if allgames.include?(appid.to_s) == false
|
42
|
+
end
|
43
|
+
## end verify appid
|
16
44
|
|
17
45
|
if @inventory_cache == true
|
18
|
-
verdict = verify_inventory_cache(steamid)
|
46
|
+
verdict = verify_inventory_cache(steamid,appid)
|
19
47
|
if verdict != false
|
20
48
|
return verdict
|
21
49
|
end
|
22
50
|
end
|
23
|
-
|
51
|
+
puts "steamid :#{steamid}"
|
52
|
+
puts "appid : #{appid}"
|
24
53
|
|
25
54
|
items = []
|
26
55
|
last_id = 0
|
@@ -34,7 +63,7 @@ module InventoryCommands
|
|
34
63
|
|
35
64
|
output "total loaded #{items.length} asset"
|
36
65
|
if @inventory_cache == true
|
37
|
-
File.open("./#{steamid}.inventory", 'w') {|f| f.puts items.to_json}
|
66
|
+
File.open("./#{steamid}_#{appid}.inventory", 'w') {|f| f.puts items.to_json}
|
38
67
|
end
|
39
68
|
|
40
69
|
return items
|
@@ -47,7 +76,11 @@ module InventoryCommands
|
|
47
76
|
html = open("https://steamcommunity.com/inventory/#{steamid}/#{appid}/#{context}?start_assetid=#{last_id}&count=5000").read
|
48
77
|
|
49
78
|
get = JSON.parse(html)
|
50
|
-
|
79
|
+
raise "something totally unexpected happened while getting inventory with appid #{appid} of steamid #{steamid} with contextid #{context}" if get.key?("error") == true
|
80
|
+
if get["total_inventory_count"] == 0
|
81
|
+
output "EMPTY :: inventory with appid #{appid} of steamid #{steamid} with contextid #{context}"
|
82
|
+
return {'assets' => [], 'new_last_id' =>false}
|
83
|
+
end
|
51
84
|
if get.keys[3].to_s == "last_assetid"
|
52
85
|
|
53
86
|
new_last_id = get.values[3].to_s
|
@@ -68,7 +101,7 @@ module InventoryCommands
|
|
68
101
|
}
|
69
102
|
|
70
103
|
assets.each { |asset| ## merging assets with names
|
71
|
-
|
104
|
+
classidxinstance = asset["classid"] + '_' + asset["instanceid"]
|
72
105
|
asset.replace(asset.merge(descriptions_classids[classidxinstance]))
|
73
106
|
}
|
74
107
|
|
@@ -81,25 +114,25 @@ module InventoryCommands
|
|
81
114
|
|
82
115
|
|
83
116
|
|
84
|
-
def verify_inventory_cache(steamid)
|
85
|
-
if File.exists?("./#{steamid}.inventory") == false
|
117
|
+
def verify_inventory_cache(steamid,appid)
|
118
|
+
if File.exists?("./#{steamid}_#{appid}.inventory") == false
|
86
119
|
return false
|
87
120
|
end
|
88
|
-
puts File.mtime("./#{steamid}.inventory").to_s
|
121
|
+
puts File.mtime("./#{steamid}_#{appid}.inventory").to_s
|
89
122
|
puts Time.now.to_s
|
90
|
-
file_last_time = Time.parse(File.mtime("./#{steamid}.inventory").to_s)
|
123
|
+
file_last_time = Time.parse(File.mtime("./#{steamid}_#{appid}.inventory").to_s)
|
91
124
|
current_time = Time.parse(Time.now.to_s)
|
92
125
|
calcule = current_time - file_last_time
|
93
126
|
puts "difference #{calcule}"
|
94
127
|
if calcule.to_i > @inventory_validity
|
95
|
-
File.delete("./#{steamid}.inventory")
|
128
|
+
File.delete("./#{steamid}_#{appid}.inventory")
|
96
129
|
return false
|
97
130
|
else
|
98
131
|
output "gonna use cached inventory which is #{calcule} seconds old"
|
99
132
|
begin
|
100
|
-
return JSON.parse(File.read("./#{steamid}.inventory",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))
|
133
|
+
return JSON.parse(File.read("./#{steamid}_#{appid}.inventory",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))
|
101
134
|
rescue
|
102
|
-
File.delete("./#{steamid}.inventory")
|
135
|
+
File.delete("./#{steamid}_#{appid}.inventory")
|
103
136
|
return false
|
104
137
|
end
|
105
138
|
end
|
data/lib/LoginExecutor.rb
CHANGED
@@ -34,8 +34,9 @@ module LoginCommands
|
|
34
34
|
if response["success"] == true
|
35
35
|
repeater = true
|
36
36
|
elsif repeater == 3
|
37
|
-
raise "Login failed username: #{@username}, password: #{@password} tried 3 times"
|
37
|
+
raise "Login failed username: #{@username}, password: #{@password}, shared_scret: #{@secret} tried 3 times"
|
38
38
|
else
|
39
|
+
print repsonse
|
39
40
|
puts "re-trying to login"
|
40
41
|
puts "sleeping for 6 seconds"
|
41
42
|
sleep(6)
|
data/lib/Misc.rb
CHANGED
@@ -67,6 +67,30 @@ module MiscCommands
|
|
67
67
|
puts "#{time} :: #{message}"
|
68
68
|
end
|
69
69
|
|
70
|
+
def verify_profileid_or_trade_link_or_steamid(steamid)
|
71
|
+
if steamid.to_i == 0 && steamid.include?("?partner=") ##supplied trade link
|
72
|
+
puts "got trade link"
|
73
|
+
partner_raw = steamid.split('partner=',2)[1].split('&',2)[0]
|
74
|
+
steamid = partner_id_to_steam_id(partner_raw)
|
75
|
+
return steamid
|
76
|
+
elsif steamid.to_i == 0
|
77
|
+
puts "got profileid"
|
78
|
+
parser = Nokogiri::XML(@session.get("https://steamcommunity.com/id/#{steamid}?xml=1").content)
|
79
|
+
if parser.xpath('//error').text == ('The specified profile could not be found.')
|
80
|
+
raise "No profile with #{steamid} as profileid"
|
81
|
+
end
|
82
|
+
steamid = parser.xpath('//steamID64').text
|
83
|
+
return steamid
|
84
|
+
elsif steamid.to_s.length == 17
|
85
|
+
return steamid
|
86
|
+
else
|
87
|
+
raise "invalid steamid : #{steamid}, length of received :: #{steamid.to_s.length}, normal is 17" if steamid.to_s.length != 17
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
70
94
|
|
71
95
|
|
72
96
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
["777010","614910","603750","562430","308080","270880","530700","290340","489940","740120","411480","485610","296300","238460","650580","550650","531960","529840","581160","429780","615050","397900","302670","544840","730","447820","346930","274940","663920","322330","570","374670","417860","227300","391240","364640","486780","571740","431240","369990","433850","581740","679990","433530","374280","560080","520530","348670","744760","363360","513510","295110","232090","731640","420900","534210","516940","749830","323850","4920","471550","643270","218620","578080","238960","321360","508710","338170","764030","708940","517710","328070","663690","270450","252490","244930","366440","464350","496960","530300","590790","528970","244850","207140","381250","753","250820","264710","321400","440","437220","793720","757160","676340","654700","304930","655010","749820","431960","230410","263920","771950","722670"]
|
data/lib/meta/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steam-trade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OmG3r
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- lib/Trade.rb
|
84
84
|
- lib/blueprints/appid_title.json
|
85
85
|
- lib/blueprints/byappid.json
|
86
|
+
- lib/blueprints/game_inv_list.json
|
86
87
|
- lib/meta/version.rb
|
87
88
|
- lib/steam-trade.rb
|
88
89
|
- steam-trade.gemspec
|