d3.js — d3 средство чтения прокси-данных через переполнение стека

В существующей литературе SO я видел примеры, которые используют jquery и PHP для прокси-данных:

JQuery

function loadTheUrl(x){
$.ajax({ url: 'loader.php',
data: {url: x},
type: 'get',
success: function(output) {
$('.loading-space').html(output);
}
});

}

PHP

<?php
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o']));
echo $doc->saveHTML();

Вот как выглядят первые несколько строк данных по URL, указанному в PHP выше. Это страница простого текста, например:

MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=300
COLUMNS=DATE,OPEN
DATA=
TIMEZONE_OFFSET=-240
a1521120900,555.45
1,554.53
2,554.07
3,553.9
4,552.67
...

Насколько я знаю, PHP правильный. Для моего случая использования мне нужно повторить вышеупомянутый jquery с помощью d3. Я надеялся, что у d3 будет что-то, что можно использовать для взаимодействия с данными, которые выкладывает мой php-файл.

Если вам интересно, почему я иду на такую ​​длину, то это потому, что мои браузеры не позволяют мне запускать сценарии (т.е. d3.text(), d3.csv() эт все) прямо скажем d3.text('https://www.google.com/finance...') из-за печально известной ошибки заголовка источника контроля доступа. Поэтому я планирую зеркально отразить данные из Google-засыпки в локальном php-файле, который я отправляю с моего сервера. Таким образом, все счастливы (или, по крайней мере, я).

Когда я пытаюсь позвонить d3.text() в моем php-файле мои данные были загружены неправильно. Другими словами я пытался: d3.text('my_loader.php'), Но это привело к большому количеству NaN ошибки, которые я обычно замечал, являются признаками какой-то ошибки синтаксического анализа. Проверяя мой код, все выглядит хорошо. У меня одинарный разбор на месте, строки должны быть приведены к числам. На самом деле все работало нормально в автономном режиме. Я мог бы загружать и анализировать данные непосредственно, когда в моей IDE. Только когда я опубликовал свой график d3 в Интернете, я понял, что не могу проанализировать данные из разных источников. Это точка, где я добавил компонент PHP. Я догадывался, что d3 фактически пытался разобрать мою страницу PHP, а не URL, на который указывал PHP. Я позже подтвердил это, передав data вернулся d3.text() в консоли, и это действительно была сама страница PHP.

Вопрос: В свете моей ситуации с данными о происхождении, что я могу сделать из d3 сторона или PHP сторона, чтобы сделать два интерфейса друг с другом правильно? Интересно, подходит ли d3 только для данных с одним и тем же происхождением, или же на самом деле существует метод для чтения / анализа данных из разных источников, используя технику, о которой я не знаю (PHP или иным образом).

4

Решение

URL, который вы выбираете, не существует в $_GET переменная.

Параметры, которые вы отправляете, являются массивом:

$_GET = ['url' => 'some_url'];

Что означает это:

$_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o]

неправильно (также отсутствует знак кавычки в конце строки).

Так должно быть $_GET['url']

Без проверки:

<?php
header('Content-Type: text/plain');
echo file_get_contents($_GET['url']);

Но это ни здесь, ни там.

Проблема, я думаю, связана с передачей URL. Содержит знак вопроса и несколько амперсандов (? а также &). Я думаю, что это $_GET параметр, так что все, что вы получаете, это https://www.google.com/finance/getprices?q=.NSEI, Вы должны обернуть URL в encodeURIComponent:

var url = encodeURIComponent('https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o');
d3.text('/path/to/myscript.php?url=' + url);
1

Другие решения

Перекрестное происхождение применяется ко всем запросам ajax вместо запроса d3.text (‘https://www.google.com/finance…’) почему бы не попробовать d3.text (‘ mymethod.php ‘) и убедиться, что метод возвращает текстовый файл, а не HTML через заголовки:

<?php
header('Content-Type: text/plain');
$file = file_get_contents('https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o');
echo $file;

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector