2016-09-02 5 views
0

Поскольку я не могу работать сегодня (пост-аппендэктомия), но все же хочу работать над своими навыками PowerShell, я решил, что попытаюсь получить доступ API World of Warcraft и вытащить данные аукционного дома для развлечения.Разбор JSON с Powershell от dev.battle.net (API World of Warcraft)

$apiKey = "myapikey" 
$serverName = "MyServer" 
$webAddress = "https://us.api.battle.net/wow/auction/data/" 

$url = $webAddress + $serverName + "?apikey=" + $apiKey 

$response = Invoke-RestMethod -Uri $url -ContentType "application/json" 

$aucURL = $response.files.url 
$aucTime = $response.files.lastModified 

$response = Invoke-RestMethod -Uri $aucURL 

$aucData = $response.auctions #Always returns blank 

добраться до этой точки и получить огромный список данных, который выглядит, как показано ниже, и для жизни меня я не могу получить доступ к данным аукционов.

{ 
"realms": [ 
    {"name":"MyServer","slug":"MyServer"}], 
"auctions": [ 
    {"auc":723774847,"item":109167,"owner":"Laddypally","bid":369550,"buyout":389000,"quantity":1,"timeLeft":"VERY_LONG","rand":0,"seed":0,"context":1}, 
    {"auc":724234542,"item":2996,"owner":"Mazramtaim","bid":760000,"buyout":800000,"quantity":20,"timeLeft":"VERY_LONG","rand":0,"seed":0,"context":0}, 
    {"auc":723207271,"item":133563,"owner":"Alsalak","bid":1187500,"buyout":1250000,"quantity":5,"timeLeft":"LONG","rand":0,"seed":0,"context":0}]} 

Мой метод принятия $ response.whatever работал в прошлом с моей работой, связанной с PS, но не здесь. Почему?

+2

['Invoke-RestMethod'] (https://technet.microsoft.com/en-us/library/hh849971.aspx) должен преобразовывать ответы JSON в объекты, и если я делаю это на вашем примере контента, то '$ x.auctions' отлично работает. Поэтому я предполагаю, что сервер не отправляет ничего (например, заголовок типа контента), чтобы сообщить PS, чтобы преобразовать его из JSON, и рассматривает его как обычный текстовый ответ. Попробуйте преобразовать его самостоятельно с помощью '$ response = $ response | ConvertFrom-JSON' then '$ response.auctions' – TessellatingHeckler

+0

Я пробовал конвертировать из JSON, но из-за того, что файл вытаскивается ~ 10 Мб, он задыхается и дает мне ошибку о максимальном размере файла. Я изучаю эту ошибку отдельно, но ответы, которые я нашел до сих пор, кажутся беспорядочными. Я думаю, что вы на что-то еще. Первый $ response возвращается как PSCustomObject, второй - как String. Сам файл называется «http://auction-api-us.worldofwarcraft.com/auction-data/5bc6c35600c6bc1c75581be4a68b82a4/auctions.json» – Tchotchke

+0

Я бы подумал, что один из методов, описанных здесь, решит проблему с размером: http://stackoverflow.com/questions/16854057/convertfrom-json-max-length. –

ответ

0

Обновление до версии PowerShell 5 исправило проблему. Я не изменил код, поэтому проблема должна заключаться в том, как PS4 имеет дело с большими запросами JSON.