Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2015, 02:35
Новичок на форуме
Отправить личное сообщение для EnoD Посмотреть профиль Найти все сообщения от EnoD
 
Регистрация: 17.12.2015
Сообщений: 5

Парсинг 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

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

Поэтому если кто нибуть, откликнется на мою просьбу и сможет помочь мне или сможет написать готовое решение с парсингом по url, его помощь не останется безвозмездной!
Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2015, 06:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

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

Последний раз редактировалось laimas, 17.12.2015 в 06:21.
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2015, 10:40
Новичок на форуме
Отправить личное сообщение для EnoD Посмотреть профиль Найти все сообщения от EnoD
 
Регистрация: 17.12.2015
Сообщений: 5

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

А за наводку на JSONP, благодарю! Будем почитать подробнее.
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2015, 14:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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

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

и на клиенте запрашивать его посредством Ajax. Более серьезно, это запрос cURL, но тоже просто.
Ответить с цитированием
  #5 (permalink)  
Старый 17.12.2015, 17:10
Новичок на форуме
Отправить личное сообщение для EnoD Посмотреть профиль Найти все сообщения от EnoD
 
Регистрация: 17.12.2015
Сообщений: 5

laimas,

Своего сайта нетю.
Попробовал JSONP. Сайт https://market.csgo.com его не поддерживает.
Ищу решение дальше.
Ответить с цитированием
  #6 (permalink)  
Старый 17.12.2015, 17:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А для чего тогда эти JSON данные вам нужны, что вы пытаетесь сделать?
Ответить с цитированием
  #7 (permalink)  
Старый 17.12.2015, 18:03
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Удивительно, сайт предоставляет API, но при этом запрещает к нему обращаться.
Ответить с цитированием
  #8 (permalink)  
Старый 17.12.2015, 18:14
Новичок на форуме
Отправить личное сообщение для EnoD Посмотреть профиль Найти все сообщения от EnoD
 
Регистрация: 17.12.2015
Сообщений: 5

Сообщение от laimas Посмотреть сообщение
А для чего тогда эти JSON данные вам нужны, что вы пытаетесь сделать?
Для того чтобы отслеживать интересующую меня цену, на тот или иной товар.

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

Последний раз редактировалось EnoD, 17.12.2015 в 18:29.
Ответить с цитированием
  #9 (permalink)  
Старый 17.12.2015, 23:19
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

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

EnoD, если не хочешь пользовать что-то кроме JS, раскуривай ноду
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2015, 06:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Как распарстить JSON Nesquik AJAX и COMET 7 02.03.2015 04:33
как получить json в onComplete? imedia Элементы интерфейса 2 07.12.2014 20:26
Как обработать json с сервера Dimaz jQuery 0 25.11.2012 14:48
переход на выбор сайт через поле ввода url (как убрать функцию "открыть все") ? rashid86 Элементы интерфейса 1 31.03.2011 14:54