Я пытаюсь получить JSON данные по следующему адресу:Получить JSon содержимое из диаграммы URL Google
https://chart.googleapis.com/chart?cht=gv&chl=digraph рамочным {1 [цвет = красный]; 2; 3 [цвет = красный]; 4; 5; 6; 7; 8; 9; 10; 11; 12 [цвет = красный]; 13; 14 [цвет = красный]; 15; 16 [цвет = красный]; 17 [цвет = красный]; 2 -> 1; 3 -> 1; 4 -> 1; 5 -> 1; 6 -> 2; 8 -> 9; 9 -> 8; 12 -> 2; 12 -> 3; 12 -> 4; 12 -> 5; 7 -> 6; 7 -> 10; 7 -> 11; 8 -> 7; 13 -> 5; 14 -> 13; 15 -> 6; 16 -> 15; 17 -> 12; 10 -> 4; 11 -> 3; 14 -> 16; 16 -> 17; } & chof = JSON
Я попробовал несколько методов, которые были предложены в других вопросах:
$jsonurl = "https://chart.googleapis.com/chart?cht=gv&chl=digraph framework { 1[color=red]; 2; 3[color=red]; 4; 5; 6; 7; 8; 9; 10; 11; 12[color=red]; 13; 14[color=red]; 15; 16[color=red]; 17[color=red]; 2 -> 1; 3 -> 1; 4 -> 1; 5 -> 1; 6 -> 2; 8 -> 9; 9 -> 8; 12 -> 2; 12 -> 3; 12 -> 4; 12 -> 5; 7 -> 6; 7 -> 10; 7 -> 11; 8 -> 7; 13 -> 5; 14 -> 13; 15 -> 6; 16 -> 15; 17 -> 12; 10 -> 4; 11 -> 3; 14 -> 16; 16 -> 17; }&chof=json"
//Method 1
$json = file_get_contents($jsonurl);
// returns an error from the google page: 400. That’s an error. Your client has issued a malformed or illegal request. That’s all we know
//Method 2
$curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, $jsonurl);
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
$json_decoded = json_decode(curl_exec($curlSession));
curl_close($curlSession);
// returns NULL
// This makes sense if the JSON isn't not returned correctly. I think json_decode() returns NULL if the input is not correct json data.
//Method 3
$json = file_get_contents(urlencode($jsonurl));
// Gives another error: [function.file-get-contents]: failed to open stream: File name too long
Если я просто опубликовать исходные данные в формате JSON в моем коде остальные моего алгоритма отлично работает. Дело в том, что в моем фактическом коде URL-адрес динамический, и мне нужно иметь возможность получать данные JSON с URL-адреса.
Это похоже на проблему безопасности с Google. Однако я не знаю, как это решить.
Это мой первый вопрос в Stackoverflow. Пожалуйста, дайте мне знать, если вы хотите узнать больше/если я должен каким-то образом изменить свой вопрос.
Заранее благодарен!
Я не думаю, что ваш URL JSON - это то, что вы думаете. Попробуйте обернуть его в кавычки, чтобы начать с него, поскольку он содержит пробелы и полуколоны, которые являются специальными символами для PHP. – hrunting
Извините, это указано в моем исходном коде, это была опечатка. Я думаю, что данные json - это то, что это какая-то структура данных, которая содержит информацию о диаграмме/изображении. Если вы вставляете URL-адрес в свой браузер, он запрашивает загрузку, содержащую данные. Все, что я хочу сделать, так это содержать эти данные в переменной, поэтому я могу использовать 'json_decode()' на ней и в конечном итоге сделать карту изображения. – Spiderbro
Если вы вставляете этот URL-адрес в свой браузер, ваш браузер преобразует все пробелы и специальные символы в последовательности с символом% -escaped. Попробуйте вставить его в Chrome, а затем скопируйте полученный URL-адрес и используйте этот URL вместо него (в нем не будет пробелов). Похоже, что скобки также должны быть экранированы, какие браузеры обычно не делают. См. Этот ответ: [Как мне избежать URL-манипуляции с PHP cURL?] (Http://stackoverflow.com/questions/5137027/how-do-i-avoid-url-globbing-with-php-curl) – hrunting