Поскольку я не могу работать сегодня (пост-аппендэктомия), но все же хочу работать над своими навыками 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, но не здесь. Почему?
['Invoke-RestMethod'] (https://technet.microsoft.com/en-us/library/hh849971.aspx) должен преобразовывать ответы JSON в объекты, и если я делаю это на вашем примере контента, то '$ x.auctions' отлично работает. Поэтому я предполагаю, что сервер не отправляет ничего (например, заголовок типа контента), чтобы сообщить PS, чтобы преобразовать его из JSON, и рассматривает его как обычный текстовый ответ. Попробуйте преобразовать его самостоятельно с помощью '$ response = $ response | ConvertFrom-JSON' then '$ response.auctions' – TessellatingHeckler
Я пробовал конвертировать из JSON, но из-за того, что файл вытаскивается ~ 10 Мб, он задыхается и дает мне ошибку о максимальном размере файла. Я изучаю эту ошибку отдельно, но ответы, которые я нашел до сих пор, кажутся беспорядочными. Я думаю, что вы на что-то еще. Первый $ response возвращается как PSCustomObject, второй - как String. Сам файл называется «http://auction-api-us.worldofwarcraft.com/auction-data/5bc6c35600c6bc1c75581be4a68b82a4/auctions.json» – Tchotchke
Я бы подумал, что один из методов, описанных здесь, решит проблему с размером: http://stackoverflow.com/questions/16854057/convertfrom-json-max-length. –