[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсинг HTML
ArtemKrass
Всем доброго дня!

В ответ на 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




Спустя 36 минут, 52 секунды (13.07.2012 - 15:09) SlavaFr написал(а):
без слеш выглэдит как обычный json.
смотри здесь : http://de2.php.net/manual/ru/function.json-decode.php

Спустя 3 часа, 4 минуты, 5 секунд (13.07.2012 - 18:13) ArtemKrass написал(а):
Не получается декодировать 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 может меняться... Как заменить изменяемые символы и не включать их в массив? Пробовал (.*), но на выходе такая билеберда...


"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},
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.