关于我正在做什么的一些背景知识。我正在尝试创建一个应用程序来增加我的编码组合,但我不能让这个应用程序与我合作。我遵循了部分指南,特别是将Steam OpenID / Omniuath与Ruby on Rails集成,因为它使用POST而没有CSRF令牌.... yadda yadda yadda。 Anyhoo,我到目前为止要做的就是通过Steam登录,就在这一刻,玩家拥有的游戏列表将会显示。然而,它不适合我。我的代码在我的控制器下面。
class WelcomeController < ApplicationController
skip_before_filter :verify_authenticity_token, :only => :auth_callback
def index
@gameslibrary = []
if session.key? :current_user
url = URI.parse("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=#{ENV['STEAM_WEB_API_KEY']}&account_id=#{session[:current_user][:uid]}")
res = Net::HTTP::get(url)
@gameslibrary = JSON.parse(res)['game_count']['app_id']['name']['playtime_forever'] || []
end
end
def auth_callback
auth = request.env['omniauth.auth']
session[:current_user] = { :nickname => auth.info['nickname'],
:image => auth.info['image'],
:uid => auth.uid }
redirect_to root_url
end
end
这是我的观看代码
<h1>Welcome#index</h1>
<%= link_to image_tag("http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_large_noborder.png"), '/auth/steam' %>
<% if session.key? :current_user %>
<h3>Current User:</h3>
<%= image_tag session[:current_user][:image] %>
<p><%= session[:current_user][:nickname] %></p>
<p><%= session[:current_user][:uid] %> </p>
<% end %>
<ul>
<% @gameslibrary.each do |game| %>
<li><%= puts game %></li>
<% end %>
</ul>
我的JSON解析返回以下
757: unexpected token at '<html> <head> <title>500 Internal Server Error</title> </head> <body> <h1>Internal Server Error</h1> </body> </html>'
现在Steam Web API支持JSON输出。 JSON解析后的那些项是数组中数组/项的实际名称。我在这做错了什么?为了获得更多帮助,我如何将数组中的JSON解析数据转换为哈希? (或者这是自动的吗?)我是大部分的新手,这是我第一次使用自己的应用程序。我正在使用Steam Web API中的GetOwnedGamesv0001,如果有人想看的话。
答案 0 :(得分:0)
问题肯定是响应,这是一个无效的JSON,你可以做什么首先将此代码移动到模型,然后检查你从尝试发送请求的URL获得的响应代码,如果它不同于200不要尝试JSON.parse响应,因为你会得到你现在得到的错误。
做类似的事情:
url = URI.parse("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=#{ENV['STEAM_WEB_API_KEY']}&account_id=#{session[:current_user][:uid]}")
if Net::HTTP.get_response(url).kind_of? Net::HTTPSuccess
@gameslibrary = JSON.parse(Net::HTTP::get(url))['game_count']['app_id']['name']['playtime_forever'] || []
else
... raise or log or something ...
end