В ответ на Get запрос сервер мне присылает код:
.....{\"id\":\"Aw4Cgww=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":12,\"ox\":194,\"oy\":355},\"AwgCkAI=\":{\"id\":\"AwgCkAI=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":2,\"ox\":325,\"oy\":79},\"Aw4CgwQ=\":{\"id\":\"Aw4CgwQ=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":4,\"ox\":814,\"oy\":221},\"Aw4CgwM=\":{\"id\":\"Aw4CgwM=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":3,\"ox\":748,\"oy\":153},\"AwgCkAs=\":{\"id\":\"AwgCkAs=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":11,\"ox\":789,\"oy\":326},\"AwgCkAU=\":{\"id\":\"AwgCkAU=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":5,\"ox\":536,\"oy\":122},\"AwgCkBE=\":{\"id\":\"AwgCkBE=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":17,\"ox\":275,\"oy\":373},\"AwgCkA0=\":{\"id\":\"AwgCkA0=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":13,\"ox\":650,\"oy\":393},\"Aw4CgwA=\":{\"id\":\"Aw4CgwA=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":0,\"ox\":553,\"oy\":137},\"AwgCkAY=\":{\"id\":\"AwgCkAY=\",\"type\":\"free\",\"x\":776,\"y\":656,\"nr\":6,\"ox\":638,\"oy\":125},\"Aw4Cgw0=\":{\"id\":\"Aw4Cgw0=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":13,\"ox\":128,\"oy\":288},\"Aw4CgxM=\":{\"id\":\"Aw4CgxM=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":19,\"ox\":259,\"oy\":200},\"Aw4CgxA=\":{\"id\":\"Aw4CgxA=\",\"type\":\"free\",\"x\":782,\"y\":643,\"nr\":16,\"ox\":332,\"oy\":106},\"37\":{\"id\":18394,\"name\":\"<red>\\u0413\\u0430\\u0432\\u0438\\u0444\</red>",\"dir\":\"n\",\"expansion_stage\":2,\"x\":782,\"y\":643,\"ox\":211,\"oy\":180,\"offer\":\"iron\",\"demand\":\"stone\"},\"38\":{\"id\":18395,\"name\":\"\\u0413\\u0430\\u0432\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":782,\"y\":643,\"ox\":397,\"oy\":392,\"offer\":\"wood\",\"demand\":\"stone\"},\"39\":{\"id\":18397,\"name\":\"\\u042d\\u0434\\u043e\",\"dir\":\"n\",\"expansion_stage\":2,\"x\":782,\"y\":643,\"ox\":399,\"oy\":325,\"offer\":\"stone\",\"demand\":\"wood\"},\"40\":{\"id\":18398,\"name\":\"\\u0425\\u0438\\u043a\\u0438\\u0440\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":782,\"y\":643,\"ox\":258,\"oy\":325,\"offer\":\"wood\",\"demand\":\"stone\"},\"41\":{\"id\":18400,\"name\":\"\\u041a\\u043e\\u0443\\u0441\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":782,\"y\":643,\"ox\":738,\"oy\":236,\"offer\":\"stone\",\"demand\":\"wood\"},\"42\":{\"id\":18545,\"name\":\"\\u041d\\u044d\\u0439\\u044d\\u0433\\u0430\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":776,\"y\":656,\"ox\":536,\"oy\":361,\"offer\":\"wood\",\"demand\":\"stone\"},\"43\":{\"id\":18547,\"name\":\"\\u041a\\u0438\\u0440\\u043e\\u0441\\u0444\\u043e\\u0441\\u043a\\u043e\",\"dir\":\"n\",\"expansion_stage\":1,\"x\":776,\"y\":656,\"ox\":686,\"oy\":336,\"offer\":\"stone\",\"demand\":\"wood\"},\"44\":{\"id\":18548,\"name\":\"\\u041a\\u043e\\u0443\\u0441\\u0440\\u043e\\u0441\\u0442\\u0430\\u0444\\u043e\\u0441\",\"dir\":\"n\",\"expansion_stage\":4,\"x\":776,\"y\":656,\"ox\":576,\"oy\":175,\"offer\":\"iron\",\"demand\":\"wood\"},\"45\":{\"id\":18549,\"name\":\"\\u0413\\u0430\\u0432\\u0441\\u0442\\u0440\\u0430\\u0439\",\"dir\":\"n\",\"expansion_stage\":3,\"x\":776,\"y\":656,\"ox\":363,\"oy\":336,\"offer\":\"wood\",\"demand\":\"stone\"},....
Код очень большой, поэтому выложил кусочек...
Как мне ПРАВИЛЬНО спарсить "id и "name?
Может воспользоваться какой-нибудь библиотекой или все-таки регуляркой???
Посоветуйте что почитать, где искать?
![user posted image](http://s017.radikal.ru/i407/1207/47/45c7b1031106t.jpg)
Спустя 36 минут, 52 секунды (13.07.2012 - 15:09) SlavaFr написал(а):
без слеш выглэдит как обычный json.
смотри здесь : http://de2.php.net/manual/ru/function.json-decode.php
смотри здесь : http://de2.php.net/manual/ru/function.json-decode.php
Спустя 3 часа, 4 минуты, 5 секунд (13.07.2012 - 18:13) ArtemKrass написал(а):
Не получается декодировать Json...
Синтаксическая ошибка, не корректный JSON
Как такое может быть? Если этот Json мне сервер отсылает?
Пожалуйста помогите разобраться
Синтаксическая ошибка, не корректный JSON
Как такое может быть? Если этот Json мне сервер отсылает?
Пожалуйста помогите разобраться
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-Type: text/html; charset=utf-8");
header("Pragma: no-cache");
error_reporting( E_ALL );
$url = 'http://ru.grepolis.com';
$urlTo_start_page = 'http://ru.grepolis.com/start/index?action=login_from_start_page';
$urlTo_start_page_next = 'http://ru.grepolis.com/start/index?action=fetch_news';
$urlTo_login_to_game = 'http://ru.grepolis.com/start?action=login_to_game_world';
$name = 'Tartang'; // Логин
$password = '7TXzMQvUZt3qUqh'; // Пароль
define('ROOT', dirname(__FILE__).'/');
$cookie_filename = ROOT . uniqid(md5(time()), true).'.tmp';
// Настройка курла
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30 );
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_REFERER, 'http://google.com' );
curl_setopt($curl, CURLOPT_URL, $url);
$html = curl_exec($curl); // Запускаем курл, что бы получить куки
$post = 'json={"name":"' . $name . '","password":"' . $password . '","passwordhash":"","autologin":false}';
curl_setopt($curl, CURLOPT_URL, $urlTo_start_page);
curl_setopt($curl, CURLOPT_REFERER, $url );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);
$post = 'json={}';
curl_setopt($curl, CURLOPT_URL, $urlTo_start_page_next);
curl_setopt($curl, CURLOPT_REFERER, $urlTo_start_page );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);
$post = 'world=ru11&facebook_session=&facebook_login=&gift_key=portal_sid=name=' . $name . '&password=' . $password;
curl_setopt($curl, CURLOPT_URL, $urlTo_login_to_game );
curl_setopt($curl, CURLOPT_REFERER, $urlTo_start_page_next );
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($curl);
preg_match("#Game\.csrfToken = '(\S+)'#", $html, $token);
//print $token[1];
$time = explode(' ', microtime());
$timef = $time[1] . substr($time[0], 2, 3);
//print $timef;
//print $token[1];
// Проверка Json
$json[] = $html;
foreach ($json as $string) {
echo 'Декодируем: ' . $string;
json_decode($string);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - Ошибок нет';
break;
case JSON_ERROR_DEPTH:
echo ' - Достигнута максимальная глубина стека';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Некорректные разряды или не совпадение режимов';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Некорректный управляющий символ';
break;
case JSON_ERROR_SYNTAX:
echo ' - Синтаксическая ошибка, не корректный JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Некорректные символы UTF-8, возможно неверная кодировка';
break;
default:
echo ' - Неизвестная ошибка';
break;
}
echo PHP_EOL;
}
curl_close($curl); // Завершаем сеанс
?>
Спустя 43 минуты, 31 секунда (13.07.2012 - 18:57) ArtemKrass написал(а):
Json_decode не срабатывает потому что код состоит не только из Json. Попадаются элементы Html...
Есть ли выход???
Есть ли выход???
Спустя 19 часов, 58 минут, 42 секунды (14.07.2012 - 14:55) walerus написал(а):
Прикрепи файл, со всем кодом где Json, укажи от куда до куда нужно разобрать, попробуем разобраться.
Спустя 8 часов, 53 минуты, 37 секунд (14.07.2012 - 23:49) Bodich написал(а):
убери str_replace слеши и будет json ))
если не получится то регулярными
если не получится то регулярными
Спустя 19 часов, 28 минут (15.07.2012 - 19:17) ArtemKrass написал(а):
Цитата (walerus @ 14.07.2012 - 11:55) |
Прикрепи файл, со всем кодом где Json, укажи от куда до куда нужно разобрать, попробуем разобраться. |
Вложение полный код, который присылает мне сервер...
http://narod.ru/disk/56515222001.d06c63ea8...2/Json.doc.html
Я пометил нужный блок красным цветом, в нем мне нужно выбрать значения "id" и "name"...
Может как-то в несколько этапов парсить?
Помогите пожалуйста...
Топчусь на месте...
Спустя 16 часов, 30 минут, 59 секунд (16.07.2012 - 11:48) Guest написал(а):
Вот что мне посоветовали:
Но это регулярка... Может есть способ лучше???
preg_match_all('|id":([0-9]+),"name":"([^"]+)|i',str_replace('u0','\u0',stripcslashes($html)) ,$out);
for($i=0;$i<count($out[1]); $i++){
echo $out[1][$i].' - '.$out[2][$i].'<br/>';
}
Но это регулярка... Может есть способ лучше???
Спустя 20 часов, 50 минут, 19 секунд (17.07.2012 - 08:38) ArtemKrass написал(а):
Json_decode так и не удался... Решил просто регуляркой. Значения ID и Name удается выдернуть...
Но мне нужно, чтобы еще и значение relation_status выдергивалось... Только вот то, что находится между Name и relation_status может меняться... Как заменить изменяемые символы и не включать их в массив? Пробовал (.*), но на выходе такая билеберда...
Но мне нужно, чтобы еще и значение relation_status выдергивалось... Только вот то, что находится между Name и relation_status может меняться... Как заменить изменяемые символы и не включать их в массив? Пробовал (.*), но на выходе такая билеберда...
"55":{"id":19410,"name":"\u0413\u0430\u0433\u0430\u0432\u0442\u0430\u044d","dir":"n","expansion_stage":3,"x":788,"y":648,"ox":472,"oy":147,"offer":"wood","demand":"stone","mood":100,"relation_status":1,"ratio":1.25,"loot":1342460846,"lootable_human":"16.07.12 \u0432 21:47","looted":1342460546},