Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг JSON по URL. Как??? (https://javascript.ru/forum/misc/60206-parsing-json-po-url-kak.html)

EnoD 17.12.2015 02:35

Парсинг JSON по URL. Как???
 
Доброго времени суток уважаемые форумчане. Необходима ваша помощь и консультация. Я только начал знакомиться с javascript, и столкнулся со следующей проблемой:

Существует ресурс (магазин игровых вещей) предоставляющий информацию о товаре в виде JSON строки:

https://market.csgo.com/api/ItemInfo...52_0/en/?key=1

Я написал простой скрипт, позволяющий получать мне необходимые данные ( Имя товара, его качество и цену):

<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8"/>
</head>
<body>
<script type="text/javascript">
function info(){	
var jsontext = '{"classid":"1293510722","instanceid":"143865972","market_name":"Shadow Case Key","name":"Shadow Case Key","market_hash_name":"Shadow Case Key","rarity":"Base Grade","quality":"","type":"Key","mtype":"CSGO_Tool_WeaponCase","slot":"Normal","description":[{"type":"html","value":"This key only opens Shadow Cases"},{"type":"html","value":" "},{"type":"html","value":"","color":"00a000","app_data":{"limited":1}}],"tags":[{"internal_name":"CSGO_Tool_WeaponCase_KeyTag","name":"Key","category":"Type","category_name":"Type"},{"internal_name":"normal","name":"Normal","category":"Quality","category_name":"Category"},{"internal_name":"Rarity_Common","name":"Base Grade","category":"Rarity","color":"b0c3d9","category_name":"Quality"}],"hash":"5d3588cdec78090c5367203cce582e73","min_price":"15400","offers":[{"price":"15400","count":"6"},{"price":"15889","count":"5"},{"price":"15890","count":"3"},{"price":"15900","count":"9"},{"price":"16214","count":"38"},{"price":"17200","count":"2"},{"price":"19000","count":"6"},{"price":"2000000","count":"9"}],"buy_offers":[{"o_price":"14610","c":"2"},{"o_price":"14500","c":"1"},{"o_price":"14400","c":"1"},{"o_price":"14100","c":"1"},{"o_price":"14000","c":"2"},{"o_price":"13900","c":"1"},{"o_price":"13700","c":"1"},{"o_price":"13504","c":"1"},{"o_price":"13500","c":"1"},{"o_price":"13300","c":"1"},{"o_price":"13000","c":"1"},{"o_price":"12700","c":"1"},{"o_price":"12400","c":"1"},{"o_price":"12100","c":"1"},{"o_price":"11700","c":"1"},{"o_price":"11501","c":"1"},{"o_price":"11000","c":"3"},{"o_price":"10600","c":"1"},{"o_price":"10300","c":"1"},{"o_price":"10000","c":"2"},{"o_price":"1453","c":"1"},{"o_price":"100","c":"1"}]}';
var data = JSON.parse(jsontext);
console.log ("Имя: " + data.name + " Качество: " + data.slot + " Цена: " + data.min_price);
	}
 info();
</script>
</body>
</html>


Вся загвоздка заключается в том, что полученную JSON строку, мне в ручную приходится копировать в переменную "jsontext". Подумал, что наверняка можно парсить сразу по URL.

Почитав еще материал на данную тему - я нашел, что это можно осуществить с помощью $.getJSON. И столкнулся с таким понятием как кроссдоменные запросы. И тупик. Ошибка за ошибкой. Даже простой пример с получением JSON из локального файла, у меня и то не получился.:(

<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8"/>
<script src="jquery.js"></script>
</head>
<body>
<script type="text/javascript">
$.getJSON("test.json", function(json) {
    console.log(json); // this will show the info it in firebug console
});
</script>
<hr>
<script type="text/javascript">
</script>
</body>
</html>


XMLHttpRequest cannot load file:///C:/Users/Argot/Desktop/test.json. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.send @ jquery.js:8630

Читаю сейчас про кросдоменные запросы, для меня это темный лес.:cray:

Поэтому если кто нибуть, откликнется на мою просьбу и сможет помочь мне или сможет написать готовое решение с парсингом по url, его помощь не останется безвозмездной!:thanks:
Заранее благодарен.

laimas 17.12.2015 06:12

Кроссдоменные запросы, это JSONP, но работать будет только в том случае, если запрашиваемый сервер отдает заголовок разрешающий использование ресурса, в противном случае будет ошибка.
А с локального - ошибка о чем гласит? Только по протоколу и ....

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

EnoD 17.12.2015 10:40

Цитата:

Сообщение от laimas (Сообщение 400253)
Если ресурс не отдает заголовка, то только запросом через свой сервер, который получит данные, вернет клиенту, ну а далее уже разбор.

Если не ошибаюсь, то на что то подобное натыкался при поиске решения, предлагалось прокси организовать на php, и JSON получать уже оттуда. Но с php у меня ещё хуже чем с javascript. :-? Пришлось отложить этот вариант.

А за наводку на JSONP, благодарю!:yes: Будем почитать подробнее.

laimas 17.12.2015 14:06

Зачем прокси, есть же свой сайт, на чем он? Весь код сервере может быть и:

exit(file_get_contents('url сервера откуда получать json'))

и на клиенте запрашивать его посредством Ajax. Более серьезно, это запрос cURL, но тоже просто.

EnoD 17.12.2015 17:10

laimas,

Своего сайта нетю.:(
Попробовал JSONP. Сайт https://market.csgo.com его не поддерживает.
Ищу решение дальше.

laimas 17.12.2015 17:32

А для чего тогда эти JSON данные вам нужны, что вы пытаетесь сделать?

ruslan_mart 17.12.2015 18:03

Удивительно, сайт предоставляет API, но при этом запрещает к нему обращаться.

EnoD 17.12.2015 18:14

Цитата:

Сообщение от laimas (Сообщение 400294)
А для чего тогда эти JSON данные вам нужны, что вы пытаетесь сделать?

Для того чтобы отслеживать интересующую меня цену, на тот или иной товар.

Цитата:

Сообщение от Ruslan_xDD (Сообщение 400297)
Удивительно, сайт предоставляет API, но при этом запрещает к нему обращаться.

Возможно я ошибся, не разобравшись до конца. Именно поэтому очутился здесь, в поисках помощи.

Яростный Меч 17.12.2015 23:19

Цитата:

Сообщение от Ruslan_xDD (Сообщение 400297)
Удивительно, сайт предоставляет API, но при этом запрещает к нему обращаться.

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

EnoD, если не хочешь пользовать что-то кроме JS, раскуривай ноду

laimas 18.12.2015 06:21

Цитата:

Сообщение от EnoD
Для того чтобы отслеживать интересующую меня цену, на тот или иной товар.

Отслеживать где, на локальном компьютере? Если так, зачем браузер, без него можно обойтись, а именно он ругается на недоступность. Если доступ к ресурсу есть и он возвращает данные, то на локальном компьютере все это можно сделать без "ругани" со стороны браузера.


Часовой пояс GMT +3, время: 05:51.