Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсинг JSON файла со стороннего сервера

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
go.to
Отправлено: 07 Февраля, 2014 - 09:06:28
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




В общем у нас есть сайт, который отдает данные для таблицы в формате json :http://mapi[dot]sochi2014[dot]com/v1/ru/[dot][dot][dot]pic/medal/rating

Но при этом, сам файл не является разрешением .json

Суть в том что я застрял в самом начале. Я даже спарсить не могу ничего оттуда.

Что нужно: Спарсить это, вывести в таблицу первую 10ку лучших по общему количеству медалей. Плюс в этом списке должна быть Россия не зависимо от места. Подскажите кто что сможет. Буду очень благодарен. Ниндзя
 
 Top
Мелкий Супермодератор
Отправлено: 07 Февраля, 2014 - 09:18:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Т.е. как не является? Даже content-type верный высылается.


-----
PostgreSQL DBA
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 09:23:16
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Допустим если я беру другую ссылку то на экран выводиться содержимое
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $fp = fopen('http://api.dotaprj.me/jd/matches/v130/api.json','r');
  3. $buf = fread($fp,filesize('http://api.dotaprj.me/jd/matches/v130/api.json'));
  4. $buf = ereg_replace(' ','
  5. ',$buf);
  6. echo "<pre>" . file_get_contents("http://api.dotaprj.me/jd/matches/v130/api.json") . "</pre>";
  7.  
  8. ?>


А если так то нет:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $fp = fopen('http://mapi.sochi2014.com/v1/ru/olympic/medal/rating','r');
  3. $buf = fread($fp,filesize('http://mapi.sochi2014.com/v1/ru/olympic/medal/rating'));
  4. $buf = ereg_replace(' ','
  5. ',$buf);
  6. echo "<pre>" . file_get_contents("http://mapi.sochi2014.com/v1/ru/olympic/medal/rating") . "</pre>";
  7. ?>
  8.  


Но это все пример.

Как мне поступить с поставленной задачей все таки? Голову уже взрывается
 
 Top
Мелкий Супермодератор
Отправлено: 07 Февраля, 2014 - 09:31:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Включите вывод ошибок.

Ну 403 так 403. Берите curl и поменяйте user-agent на что-нибудь более браузерное. Нет, код не дам. Его полно в гугле, начиная с мануала.


-----
PostgreSQL DBA
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 09:36:00
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Мелкий пишет:
Включите вывод ошибок.

Ну 403 так 403. Берите curl и поменяйте user-agent на что-нибудь более браузерное. Нет, код не дам. Его полно в гугле, начиная с мануала.


Если честно уже второй гугл изучаю на эту тему. Ничего подходящего не нашел. Куча способов как спарсить файл который лежит вместе со скриптом, а как спарсить именно такой файл без формата с сервера никак не могу найти.
 
 Top
Ch_chov
Отправлено: 07 Февраля, 2014 - 09:58:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Формат тут не причем. Скорей всего сервер проверяет заголовки входящего запроса и отдает 403 если они не такие, как он ожидает.
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 10:14:20
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?
  2. $json = file_get_contents('http://mapi.sochi2014.com/v1/ru/olympic/medal/rating'); //ввести название канала вместо semijew
  3.  
  4. if($json) {
  5. $info = json_decode($json, true);
  6. $data = $info['0'];
  7. echo "Онлайн: ". ($data['name'])."<br>";
  8.  
  9.  
  10. } else {
  11. echo 'Error';
  12. }
  13. ?>


так тоже ничего Недовольство, огорчение
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 10:25:11
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




go.to, вам же написали file_get_contents замените на curl и добавьте заголовок user-agent. Чтоб сервер думал что вы человек и пользуетесь браузером.
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 10:28:14
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Все равно не работает.
(Добавление)
Я нашел то, что мне нужно реализовать : http://www[dot]sochi2014[dot]com/widgets[dot][dot][dot]tandings?rows=10

Только должна быть еще Россия.
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 10:29:00
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




Код покажите
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 10:33:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




<?
$json = file_get_contents('http://api.dotaprj.me/jd/matches/v130/api.json'); //ввести название канала вместо semijew

if($json) {
$info = json_decode($json, true);
$data = $info['1'];
echo "Онлайн: ". ($data['id'])."<br>";


} else {
echo 'Error';
}
?>
 
 Top
dcweb
Отправлено: 07 Февраля, 2014 - 10:38:51
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Окт. 2013  


Помог: 0 раз(а)




dcweb пишет:
go.to, вам же написали file_get_contents замените на curl и добавьте заголовок user-agent. Чтоб сервер думал что вы человек и пользуетесь браузером.
 
 Top
go.to
Отправлено: 07 Февраля, 2014 - 10:40:57
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Не то отправил.

PHP:
скопировать код в буфер обмена
  1. <?
  2. $json = curl('http://mapi.sochi2014.com/v1/ru/olympic/medal/rating'); //ввести название канала вместо semijew
  3.  
  4. if($json) {
  5. $info = json_decode($json, true);
  6. $data = $info['1'];
  7. echo "Онлайн: ". ($data['id'])."<br>";
  8.  
  9.  
  10. } else {
  11. echo 'Error';
  12. }
  13. ?>


Заголовок не помогает
 
 Top
esterio
Отправлено: 07 Февраля, 2014 - 10:57:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




go.to А где тут заголовок, или работа с cURL. Я увидел только вызов функции curl. А ее самой не увидел. Приведите полностю код
 
 Top
reames
Отправлено: 09 Февраля, 2014 - 19:10:56
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $json = curl_init('http://mapi.sochi2014.com/v1/ru/olympic/medal/rating');
  4. curl_setopt($json, CURLOPT_RETURNTRANSFER, 1); // что-бы сразу в браузер не выводил
  5. $result = curl_exec($json);
  6. curl_close($json);
  7. $data = json_decode($result, true);
  8. for ($i = 0; $i < 10; $i++) {
  9.     echo $data[$i][id].'</br>';
  10. }
  11.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB