Очень сложная задача! (для меня)

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-11 10:16:42

zg писал(а):
spy писал(а):Получилось вот что
код выложи
только не смейся )))

Код: Выделить всё

@$data=file_get_contents("http://spysoft.us/test/?ses=razdel&id=1",FALSE,$data);
@$data=stristr($data,"Продуктовые магазины");
@$data=eregi_replace("<table border=1>","<br>",$data);
@$data=eregi_replace("<tr><td>Наименование магазина</td><td>Дополнительная информация</td></tr>","",$data);
@$data=eregi_replace("<tr><td><a href=\"","",$data);
@$data=eregi_replace("\">","&nbsp;-&nbsp;",$data);
@$data=eregi_replace("</a></td><td>","&nbsp;-&nbsp;",$data);
@$data=eregi_replace("</td></tr>","<br>",$data);
unix# ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-11 10:39:25

твоя задача не просто убрать всё лишнее, а нужно в итоге получить целевые значения.
spy писал(а):"&nbsp;-&nbsp;"
тут можно пойти на хитрость и подставить символ, который, условно, никогда здесь не появится, например две прямых черты ("||"). Это нужно, чтобы в дальнейшем надёжно разделить получившеся строки на ячейки.

Сейчас тебе надо разбить результат на строки, а строки на ячейки и получить целевой массив данных, чтобы был примерно такой результат

Код: Выделить всё

print_r($shops);
Array
(
    [0] => Array
        (
            [href] => ?ses=magaz&id=1
            [name] => Магазин 1
            [desc] => Овощной магазин
        )

    [1] => Array
        (
            [href] => ?ses=magaz&id=2
            [name] => Магазин 2
            [desc] => Овощной магазин
        )

)

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 5:54:54

Вот что у меня получилось:

Код: Выделить всё

Наименовани магазина: Магазин 1
Ссылка: ?ses=magaz&id=1
Описание: Овощной магазин

Наименовани магазина: Магазин 2
Ссылка: ?ses=magaz&id=2
Описание: Овощной магазин
не идеально но лучше чем ничего

Код: Выделить всё

@$data=file_get_contents("http://spysoft.us/test/?ses=razdel&id=1",FALSE,$data);
//@$data = htmlspecialchars($data);
@$data=stristr($data,"?");
@$data=eregi_replace("<table border=1>","<br>",$data);
@$data=eregi_replace("<tr><td>Наименование магазина</td><td>Дополнительная информация</td></tr>","",$data);
@$data=eregi_replace("<tr><td><a href=\"","",$data);
@$data=eregi_replace("\">","||",$data);
@$data=eregi_replace("</a></td><td>","||",$data);
@$data=eregi_replace("</td></tr>","||&&",$data);
$str_exp = explode("&&", $data);
$s=count($str_exp);
$s=$s-1;
//print "<b>".$s." строки в массиве<br></b>";
for($i=0; $i<$s; $i++)
{
//@print $i."&nbsp;".$str_exp[$i]."<br>";
$str_expe = explode("||", $str_exp[$i]);
print "<p><b>Наименовани магазина:</b> ".$str_expe[1]."<br><b>Ссылка:</b> ".$str_expe[0]."<br><b>Описание:</b> ".$str_expe[2]."</p>";

}
Теперь я смело могу писать список магазинов с сылками и описанием в базу...

Теперь следующий этам надо отправлять паука глубже за сборами цен... чем я и займусь сейчас))
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 6:30:44

spy писал(а):Вот что у меня получилось:
-))) половина дела сделана
spy писал(а):Теперь следующий этам надо отправлять паука глубже за сборами цен... чем я и займусь сейчас))
да, но для этого тебе нужно будет написать воторой скрипт, иначе через некоторое время просто погрязнешь в куче бессмысленных строк. :smile: Заполнив таблицу базы данных, ты подготовил исходные данные для воторого этапа. Про первый скрипт надо пока забыть и не использовать, а данные брать из таблицы.

На втором этапе ты должен получить списки товаров по магазинам и просто внести их в другую таблицу базы. Обработка товаров — это тертий этап.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 8:28:33

В базу все записывается... http://spysoft.us/test/test.php

беру из базы линки, но больше одной он не хочет обрабатывать http://spysoft.us/test/test0.php

Код: Выделить всё

                                    $r=mysql_query("SELECT * from obj_2199_tab");
                                    if(mysql_num_rows($r)!=0)
                                    {
                                    for ($i=1; $i<=mysql_num_rows($r); $i++)
                                    {
                                    $f=mysql_fetch_array($r);
$url="http://spysoft.us/test/".$f[link];
print "<br>".$url;
@$url_magaz=file_get_contents($url, FALSE,$url_magaz);
@$url_magaz=stristr($url_magaz,"Огурцы");
@$url_magaz=eregi_replace(" ","||",$url_magaz);
@$url_magaz=eregi_replace("<br>","",$url_magaz);
@$url_magaz=eregi_replace("рублей","&&",$url_magaz);

$str_exp_magaz = explode("&&", $url_magaz);
$s=count($str_exp_magaz);
$s=$s-1;
for($o=0; $o<$s; $o++)
{
@$str_exp_magaze = explode("||", $str_exp_magaz[$o]);
@print "<br><b><font color=#FF8080>Наименование:</font></b> ".$str_exp_magaze[0]." <b><font color=#FF8080>Цена:</font></b> ".$str_exp_magaze[1]." рублей";
}
}

}
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 9:26:57

для начала нужно оформить код

Код: Выделить всё

<?
$r = mysql_query("SELECT * from obj_2199_tab");

if ( mysql_num_rows($r) != 0 )
{
	for ($i = 1; $i <= mysql_num_rows($r); $i++)
	{
		$f = mysql_fetch_array($r);
		
		$url = "http://spysoft.us/test/". $f[link];
		
		print "<br>".$url;
		
		@$url_magaz = file_get_contents($url);
		@$url_magaz = stristr($url_magaz,"Огурцы");
		@$url_magaz = eregi_replace(" ","||",$url_magaz);
		@$url_magaz = eregi_replace("<br>","",$url_magaz);
		@$url_magaz = eregi_replace("рублей","&&",$url_magaz);

		$str_exp_magaz = explode("&&", $url_magaz);
		
		$s = count($str_exp_magaz);
		$s = $s-1;
		
		for($o = 0; $o < $s; $o++)
		{
			@$str_exp_magaze = explode("||", $str_exp_magaz[$o] );
			@print "<br><b><font color=#FF8080>Наименование:</font></b> ". $str_exp_magaze[0] ." <b><font color=#FF8080>Цена:</font></b> ". $str_exp_magaze[1] ." рублей";
		}
	}

}
?>
spy писал(а):но больше одной он не хочет обрабатывать
-))) во-первых, ты неправильно используешь file_get_contents, в твоём случае она должна выглядеть так

Код: Выделить всё

$url_magaz = file_get_contents($url);
во-вторых, не стоит глушить вывод ошибок :smile:

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 9:31:48

:smile: http://spysoft.us/test/test0.php
Все сработало теперь...

Теперь надо смоделировать авторизацию и проверить как оно будет работать, точнее как оно не буде работать :(
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 9:41:10

spy писал(а):Все сработало теперь...
-))) а знаешь почему?
spy писал(а):Теперь надо смоделировать авторизацию и проверить как оно будет работать, точнее как оно не буде работать
если будет базоая авторизация средствами апача, то пример её использования я уже выкладывал. Если самописанная, то надо смотреть как она сделана.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 10:10:38

ну вот что и требовалось доказать http://spysoft.us/test/test0.php скрипт не работает с авторизацией...

Авторизация наипростейшая

login.php

Код: Выделить всё

<?
session_start();
$HTTP_SESSION_VARS['username']=$login;
$HTTP_SESSION_VARS['password']=$pass;
include("c.php");
if($login=="test" and $pass="test")
{
?><META HTTP-EQUIV="REFRESH" CONTENT='0; URL=index.php'><?
}
?>
index.php

Код: Выделить всё

if(@$HTTP_SESSION_VARS['username']!="")
{

}
else
{

}
Как ему сказать что сборщик авторизован :unknown:
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 10:21:42

spy писал(а):Авторизация наипростейшая
наипростейшая, это базовая, средствами веб-сервера.
spy писал(а):$HTTP_SESSION_VARS['username']=$login;
эм... ты это где раскопал? тут ошибок больше чем кода..

Если с авторизацией есть непонятки, лучше испуользуй базовую.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 10:31:27

дык это пример...
принцип такой, что вводим регистрационные данные на главной странице, потом они уходят login.php, и если все верно то возвращаемся на главную страницу.
Авторизоваться можно просто введя строку http://spysoft.us/test/login.php?login=test&pass=test
Как пауку обойти авторизацию :unknown:
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 10:42:09

spy писал(а):дык это пример...
есть разные типы авторизаций:
1. базовая (на апаче)
2. на куках (сессия)
3. через урл

смотря какой тип используется так и надо делать.

Если брать пример, который привёл ты, то нужно найти идентификатор сессии и дописывать его к адресу при получении удалённых файлов.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 10:45:41

zg писал(а): есть разные типы авторизаций:
1. базовая (на апаче)
2. на куках (сессия)
3. через урл
у меня второй тип получился??
А как в первом случае бороться с авторизацией, и что это за базовая авторизация?
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 10:52:49

spy писал(а):у меня второй тип получился??
ага, там сначала идёт запрос на авторизацию и получение номера сессии, а потом работа.
spy писал(а):и что это за базовая авторизация?
например такая

Код: Выделить всё

%cat .htaccess
AuthName "Admin password, please"
AuthType Basic
AuthUserFile .www_acl/users
require valid-user
%
но можно и средствами пхп организовать.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 10:57:13

Ну а чаще что встречается, например на этом форуме какой тип авторизации??? сессии ведь?
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 11:03:05

spy писал(а):Ну а чаще что встречается
я использую базовую
spy писал(а):например на этом форуме какой тип авторизации??? сессии ведь?
сессия

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 11:07:44

тогда следующий вопрос, как мне получить этот идентификатор ссесии и как его прикрутить к ссылке :unknown:
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 11:23:10

через сокеты отсылаешь запрос на логирование с заполненными полями и читаешь ответ. В ответе находишь номер сессии, который и надо будет подставлять к ссылкам через контекст или URI

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 11:26:43

zg писал(а):через сокеты отсылаешь запрос на логирование с заполненными полями и читаешь ответ. В ответе находишь номер сессии, который и надо будет подставлять к ссылкам через контекст или URI
:shock: :crazy: чЁ?
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 11:29:30

spy писал(а):чЁ?
-))) http://ru2.php.net/manual/en/function.fsockopen.php

твоя задача сформировать правильный запрос на авторизацию и отослать на логирование.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 11:39:23

zg писал(а):
spy писал(а):чЁ?
-))) http://ru2.php.net/manual/en/function.fsockopen.php

твоя задача сформировать правильный запрос на авторизацию и отослать на логирование.
я что то похожее делал, но не понимаю как это работает, и в каком виде и чего я должен увидеть :unknown:
Можно немного подправить и получиться

Код: Выделить всё

$hostname = "www.spysoft.us";
$path = "/post";
$fp = fsockopen("www.spysoft.us", 80, $errno, $errstr, 30);
$line = "";
    if (!$fp)
{ 
    echo "$errstr ($errno)<br />\n";
}
    else
{
    $data ="/test/login.php?login=test&pass=test\r\n\r\n";
    $headers = "POST $path HTTP/1.1\r\n";
    $headers .= "Host: $hostname\r\n";
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    $headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
    fwrite($fp, $headers.$data);
    
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
    fclose($fp);
    }

unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 11:45:09

spy писал(а):и в каком виде и чего я должен увидеть
замени цикл на такой код

Код: Выделить всё

while (!feof($fp))
{
  $line = fgets($fp, 1024);
  echo $line, '<br />';
}

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 11:48:47

http://spysoft.us/test/test3.php
Вот это вроде работает

Код: Выделить всё

$host = 'www.spysoft.us';
$service_uri = '/test/login.php';
$vars ='login=test&pass=test';

# compose HTTP request header
$header = "Host: $host\r\n";
$header .= "User-Agent: PHP Script\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($vars)."\r\n";
$header .= "Connection: close\r\n\r\n";

$fp = pfsockopen($host, 80, $errno, $errstr);
if (!$fp) {
   echo "$errstr ($errno)<br/>\n";
   echo $fp;
} else {
    fputs($fp, "POST $service_uri  HTTP/1.1\r\n");
    fputs($fp, $header.$vars);
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
но только все равно выводит на форму авторизации хотя и видно что дает PHPSESSID
unix# ?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение zg » 2009-05-12 12:02:24

spy писал(а):но только все равно выводит на форму авторизации хотя и видно что дает PHPSESSID
-))) он правильно работает и выдаёт такой код

Код: Выделить всё

HTTP/1.1 200 OK
Date: Tue, 12 May 2009 08:57:41 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8b mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.6
X-Powered-By: PHP/5.2.6
Set-Cookie: PHPSESSID=bba0e961fb7d6f1470c2c4f1e89dba1a; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 56
Connection: close
Content-Type: text/html


<META HTTP-EQUIV="REFRESH" CONTENT='5; URL=index.php'>
к тому же выдаёт рефрешь, значит логин и пароль подошли. Теперь твоя задача получить PHPSESSID, что не сложно.

Аватара пользователя
spy
сержант
Сообщения: 276
Зарегистрирован: 2008-05-21 10:27:31
Откуда: Красноярск

Re: Очень сложная задача! (для меня)

Непрочитанное сообщение spy » 2009-05-12 12:23:23

не сложно, но сложно :(

как мне выдернуть ее, если с моего запроса меня рефрешить на стартовую...
нужно что то куда то записать а потом уже от туда выдергивать, или как проще поймать эту сессию?
unix# ?