Верно ли написан парсер?

171
.
_Казимир_
Просмотрите пожалуйста, допущены ли в написании парсера ошибки?
<?php
define('_IN_JOHNCMS', 1);

$headmod = 'smanager';
$textl = 'PARSER';
require_once ("../incfiles/core.php");
require_once ("../incfiles/head.php");


$file = file_get_contents('http://www.sports.ru/milan/?type=team');
preg_match('/<div class="stat mB15">(.*?)<\/div>/is', $file, $info);

preg_match_all("/<tr>\n<td>(.*?)<\/td>/is", $info['1'], $num);
preg_match_all("/<td [^\d] >\n<i class=\"flag-s flag-[\d] \" title=\"(.*?)\"/is", $info['1'], $nat);
preg_match_all("/<a style=\"name\" href=\"\/tags\/[\d] .html\">(.*?)<\/a>/is", $info['1'], $name);
preg_match_all("/<td title=\"(.*?)\">(.*?)<\/td>/is", $info['1'], $pos);
preg_match_all("/<\/td>\n<td>(.*?)<\/td>\n<td>(.*?)<\/td>\n<td>(.*?)<\/td>/is", $info['1'], $inf);

// массив номеров - $num['1']
// массив национальностей - $nat['1']
// массив имён - $name['1']
// массив амплуа - $pos['1'] это полностью, а $pos['2'] сокращенно(ПЗ, Защ и т.д.)
// массив возрастов - $inf['1'], рост $inf['2'], вес $inf['3']


for ($i = 0; $i < count($num['1']); $i ) {
$file = file_get_contents('http://www.sports.ru/milan/?type=team');

if ($file) {
mysql_query("INSERT INTO `m_team` SET
`id` = ''.$i.'',
`team` = '1',
`name` = ''.$name[1].'',
`flag` = ''.$nat[1].'',
`nomer` = ''.$num[1].'',
`pos` = ''.$pos[1].''
");
echo 'Пост '.$i.' - Готово!<br/>';
} else {
echo 'Пост '.$i.' - Eror!<br/>';
}

}

echo '</div>';
require_once ("../incfiles/end.php");

?>
.
Ей 25
Часть парсера моя... Так что там все правильно. А запись в БД... Ты в БД массив игроков записываешь а не отдельно каждого игрока.
Что бы отдельно записать надо пройтись циклом по массивам и записать поочередно все значения в базу.
.
Ей 25
Ааа... Цикл там есть, я жи вывод данных писал...
Ты запись в БД не так сделал. У тебя раз 20 сохранятся одинаковые массивы с игроками, позициями и т.д.
.
Ей 25
Вот же мой код: http://johncms.com/forum/index ... 30591
Смотри цикл там. Все что в цикле выкинь и вставь запрос в БД. В mysql запросе надо не просто $name['1'] писать, а $name['1'][$i] и так со всеми значениями(рост, вес, номер и т.д.).
Тогда цикл пройдет по массивам и запишет по отдельности всех игроков с их характеристиками.
Кстати, для полноты картины нехватает самостоятельного прохождения парсера по всем командам или по командам определённой лиги. Но для тебя я вижу проще будет ссылки подставлять, чем парсер дописать.
А еще связь игроков с таблицей команд учти, а то потом проблемы будут.
.
# ValekS (04.05.2014 / 10:03)
Вот же мой код: http://johncms.com/forum/index ... 47932
Смотри цикл там. Все что в цикле выкинь и вставь запрос в БД. В mysql запросе надо не просто $name['1'] писать, а $name['1'][$i]
Ясно, но почему когда перехожу по ссылке на парсер, то открывает пустую белую страницу?
.
Ей 25
# _Казимир_ (04.05.2014 / 10:17)
Ясно, но почему когда перехожу по ссылке на парсер, то открывает пустую белую страницу?
На тот что в первом посте? Не знаю что ты там намутил.
.
# ValekS (04.05.2014 / 10:30)
На тот что в первом посте? Не знаю что ты там намутил.
Да. Вот я и прошу найти ошибку.
.
# _Казимир_ (04.05.2014 / 08:42)
Просмотрите пожалуйста, допущены ли в написании парсера ошибки?
<?php
define('_IN_JOHNCMS', 1);

$headmod = 'smanager';
$textl = 'PARSER';
require_once ("../incfiles/core.php");
require_once ("
Помоему, у тебя нет запроса на вывод из базы,т.е. ты данные получил, сохранил их в базу, а в результат работы скрипта, почему-то, вывел данные переменной(счётчика цикла) $i.
.
_Казимир_, Так включи показ ошибок и узнаешь в чем проблема
.
# _Казимир_ (04.05.2014 / 08:42)
Просмотрите пожалуйста, допущены ли в написании парсера ошибки?
<?php
define('_IN_JOHNCMS', 1);

$headmod = 'smanager';
$textl = 'PARSER';
require_once ("../incfiles/core.php");
require_once ("
Я тебе вписал ошибки в комментарии, исправляй сам

<?php
 define('_IN_JOHNCMS', 1);

 $headmod = 'smanager';
 $textl = 'PARSER';
 require_once ("../incfiles/core.php");
 require_once ("../incfiles/head.php");


 $file = file_get_contents('http://www.sports.ru/milan/?type=team');
 preg_match('/<div class="stat mB15">(.*?)<\/div>/is', $file, $info);

 preg_match_all("/<tr>\n<td>(.*?)<\/td>/is", $info['1'], $num);
 preg_match_all("/<td [^\d] >\n<i class=\"flag-s flag-[\d] \" title=\"(.*?)\"/is", $info['1'], $nat);//1.пустой массив
 preg_match_all("/<a style=\"name\" href=\"\/tags\/[\d] .html\">(.*?)<\/a>/is", $info['1'], $name);//2.пустой массив
 preg_match_all("/<td title=\"(.*?)\">(.*?)<\/td>/is", $info['1'], $pos);
 preg_match_all("/<\/td>\n<td>(.*?)<\/td>\n<td>(.*?)<\/td>\n<td>(.*?)<\/td>/is", $info['1'], $inf);

 for ($i = 0; $i < count($num['1']); $i /*3.бесконечный цикл! вместо $i надо $i++*/) {
 $file = file_get_contents('http://www.sports.ru/milan/?type=team');//4.лишняя строка(дублирует стр.25)

 if ($file) {
 mysql_query("INSERT INTO `m_team` SET
 `id` = ''.$i.'',
 `team` = '1',
 `name` = ''.$name[1].'',
 `flag` = ''.$nat[1].'',
 `nomer` = ''.$num[1].'',
 `pos` = ''.$pos[1].''
 "); //5.$name[1],$nat[1],$num[1],$pos[1] - это массивы!
     //для записи в БД их надо сериализовать
 echo 'Пост '.$i.' - Готово!<br/>';
 } else {
 echo 'Пост '.$i.' - Eror!<br/>';
 }

 }

 echo '</div>';
 require_once ("../incfiles/end.php");

 ?>
Всего: 10