Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2015, 10:44   #1
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию вытащить название картинок(парсинг)

Здравствуйте!
Застрял в самом начале..

Есть много графиков по нагрузке оборудования.
Хочу вытащить из этого ресурса название графиков, т.к. в названиях присутствуют цифры нагрузки для каждого объекта.

Исходники (в html) выглядят примерно так:
Код HTML:
alt="20150810-center-Soronto-220-0.021.png"
alt="20150810-center-Frisco-220-0.002.png"
alt="20150810-center-Denwer-217-0.0167.png"
Я хочу вытащить эту информацию, что бы в таблице было:
1. Название типа Soronto-220
2. Коэффициент нагрузки типа 0.021

Т.е. парсим ресурс:

PHP код:
$content file_get_contents('http://192.168.1.1/img.html');
echo 
'Содержимое:<br>';
echo 
$content;
echo 
'<hr>';
$pattern "/20150810-center-(.*).png/"


preg_match_all($pattern,$content,$a);
echo 
$pattern; echo '<br>111<br>';
echo 
$a[1]; 
вот тут выводится не содержимое, а "Array"
Подскажите, как точно занести в массив все что нашлось и вывести на страничку?
Спасибо.
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Старый 12.08.2015, 11:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

для отладки и просмотра содержимого массивов очень удобно использовать функцию print_r() (описание)

после этого легко увидеть, что всё, что Вам нужно, уже есть в массиве $a:
Код:
preg_match_all($pattern,$content,$a); 
echo $pattern; 
echo '<br>111<br>'; 
//print_r($a);
foreach($a[1] as $element) {
	echo $element.'<br>';
}

Последний раз редактировалось Serge_Bliznykov; 12.08.2015 в 11:39.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.08.2015, 11:51   #3
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Ура!
Все начинает получаться!
Спасибо!
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Старый 19.08.2015, 10:35   #4
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Что бы не уподобляться стандартам форумов (а, спасибо, все заработало.. и ни слова каким образом..) немного поясну как именно у меня "Ура все заработало".

Итак, есть сайт с графиками.
Много информации, очень много, глазами не охватить.
Для графика каждого города есть картинка.
И ее альт.название = название_города_Кол-во-ошибок.png.
Код:
alt="20150810-center-Soronto-220-0.021.png"
alt="20150810-center-Frisco-220-0.002.png"
alt="20150810-center-Denwer-217-0.0167.png"
Вот и надо вытащить эти названия.

делаю так:

Код:
$content = file_get_contents('http://192.168.1.1/img.html'); # идем на адрес и получаем содержимое все
$pattern = "/div>20150813-center-(.*).png/";# составляем маску поиска, или как там ее..
preg_match_all($pattern,$content,$a);#По условию поиска...
foreach($a[1] as $element) {
$type_hard = explode ("-0.", $element);#вот такому условию пройдем все содержимое того, что получили

$dates ='20150813';
$info = $type_hard[0];
$info1 = $type_hard[1];# в массиве результата берем значения и пишем таблицу:
echo '<tr><td>'.$dates.'</td><td>'.$info.'</td><td>'.$info1.'</td></tr>';
}
echo '</table>';
получаем таблицу типа:

20150813 Frisco-220 0.002

Далее я просто сохранял таблицу в *csv в ексель, и импортировал ее в базу.
Но тут надо получить график за неделю, как оно там менялось.. да чтоб красиво было уже..

Тут я сделал так:
Конечно запрос в базу, вытаскиваем число, город, ошибки, сортируем по числу...
И рисуем прямоугольник в правой ячейке.
вот так:
Код:
<TD><img src="imagevide.php?ind='.$row["errors"].'"></TD>
сам imagevide:

Код:
<?php 
    header ("Content-type: image/png"); 
	#$im = ImageCreate (200, 300)  200 ширина 330 высота
	$ind = $_GET['ind'];
	if ($ind === "0")# А если ошибок ноль? то будет ошибка создания прямоугольника, 
	{
	$ind = "1";# поэтому то что равно нулю = пусть будет равно единице..
	}
    $im = ImageCreate ($ind, 10) 
            or die ("Ошибка при создании изображения");         
    $couleur_fond = ImageColorAllocate ($im, 133, 194, 142); 
    ImagePng ($im); 
?>
Т.е. в вызове картинки я сообщаю, какой ширины будет прямоугольник.
А ширина как раз и есть кол-во ошибок что зафиксировано..
Вобщем то что я хотел - получилось )
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".

Последний раз редактировалось bush007; 19.08.2015 в 10:51.
bush007 вне форума Ответить с цитированием
Старый 19.08.2015, 11:35   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
составляем маску поиска, или как там ее..
Регулярное выражение (Reg Exp) это называется.

Можно было, кстати, вместо explode сразу для всех значений использовать группы.
PHP код:
$date '20150810';

$content 'alt="20150810-center-Soronto-220-0.021.png"' "\r\n".
    
'alt="20150810-center-Frisco-220-0.002.png"' "\r\n" .
    
'alt="20150810-center-Denwer-217-0.0167.png"';

$pattern '/'.$date."-center-(.+?)-(\d+)-0\.(\d+)\.png/";

preg_match_all($pattern$content$matchesPREG_SET_ORDER);

echo 
'<table>';
foreach(
$matches as $match) {
    
$name $match[1];
    
$info $match[2];
    
$info1 $match[3];
    
    echo 
'<tr>'.
    
'<td>'.$date.'</td>'.
    
'<td>'.$name.'</td>'.
    
'<td>'.$info.'</td>'.
    
'<td>'.$info1.'</td>'.
    
'</tr>';
}
echo 
'</table>'
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 19.08.2015 в 11:39.
Alex11223 вне форума Ответить с цитированием
Старый 20.08.2015, 11:59   #6
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Alex спасибо за информацию!
Может у меня получилось не так прям как надо (код) но оно работает именно так, как я ожидал увидеть.
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с чего начать решение? Считать из файла название объемных геометрических фигур,вывести название,количество граней,рисунок (Delphi) леночка93 Помощь студентам 6 16.05.2013 13:14
парсинг текста, вытащить дату HellMercenariess Общие вопросы Delphi 5 27.07.2012 16:07
парсинг картинок demotivators.ru Pein95 Работа с сетью в Delphi 5 14.01.2012 01:54
через API получаю полный путь и название процесса, а получаю только название процесса Den7656 Win Api 5 12.09.2011 09:03
Даны сведения о книгах в библиотеке: фамилия автора, название книги и год издания. Напечатать автора и название книг, го greshnik92 Общие вопросы C/C++ 3 21.06.2011 10:45